架構師團隊決定劃分站點(diǎn)的功能,以便適應應用復雜度的增長(cháng)。也許你還記得,像瀏覽、搜索、產(chǎn)品目錄上傳、存貨管理等無(wú)需知道客戶(hù)特定的信息就能執行的動(dòng)作,都可以成為站點(diǎn)上的一個(gè)功能分支, 具有自己的代碼庫。決定把這些功能放入泳道,每個(gè)泳道都需要具有它那部分功能所需的數據。架構師團隊認識到,要這樣做,就要修改數據架構的形式,有些數據元素要被復制到整個(gè)架構中。要確保對于任何數據元素都有且只有一個(gè)節點(diǎn),用于存放最近最新的數據副本。在理想狀況下,架構師團隊把數據的更新放在一個(gè)泳道中,同時(shí)在客戶(hù)交易之外,采用某種形式的異步更新方法,來(lái)更新架構中的其他部分中的數據。所有的客戶(hù)信息都要被劃分到N個(gè)豆莢中,其中N是個(gè)可配置的參數。每個(gè)豆莢中會(huì )駐留大約1/N的客戶(hù)。這是根據客戶(hù)進(jìn)行的Z軸劃分。在每個(gè)Z軸劃分中,架構師團隊準備對代碼和執行代碼所需的數據進(jìn)行Y軸劃分。登錄/登出是一個(gè)功能,支付是一個(gè)功能,賬戶(hù)狀態(tài)和匯總是一個(gè)功能,支持這些功能所需的數據也會(huì )隨應用作出相應的劃分。每個(gè)Y軸劃分的泳道只需了解1/N的客戶(hù),因此,需要緩存的數據(如登錄信息)就大大減少了,緩存速度就更快了。

最后,架構師團隊在所有劃分中都應用了X軸劃分,以便擴展這些劃分中的交易量。
搜索這個(gè)功能引起了AlScale的數據和軟件架構師的擔心,所以最終他們決定對這個(gè)領(lǐng)域給予更多的關(guān)注。他們打算利用擴展立方的X軸、Y軸和Z軸來(lái)滿(mǎn)足搜素的需求,讓最終用戶(hù)非??斓鼐湍艿玫剿阉鹘Y果。把搜索功能單獨劃分出來(lái),就是Y軸劃分了,所以我們接下來(lái)要關(guān)注的是X軸和Z軸劃分。對于下面的討論。
架構師團隊決定采用聚合器來(lái)加速處理搜索請求。這些聚合器要負責處理交易量的增長(cháng),每個(gè)聚合器都是其他聚合器的克隆品,這就創(chuàng )建了一個(gè)X軸實(shí)現。最終請求被發(fā)送給N個(gè)系統,每個(gè)系統中存放了1/N的要銷(xiāo)售的產(chǎn)品,N是應用到產(chǎn)品目錄上的模數。這種N項劃分就是一種根據產(chǎn)品編號進(jìn)行的Z軸劃分。此外,每個(gè)Z軸劃分中還有M個(gè)克隆的數據集,這樣可以應對交易量的增長(cháng)。
一個(gè)搜索請求可以經(jīng)過(guò)負 載均衡器被分配到任何一個(gè)聚合器上,然后這個(gè)聚合器會(huì )劃分出N個(gè)單獨的請求,每一個(gè)對應于N個(gè)產(chǎn)品數據庫層中的一個(gè)。這些產(chǎn)品數據庫中的每一個(gè)都有1/N(產(chǎn)品編號對N取模)的數據。接下來(lái),每個(gè)數據層中都有M個(gè)克隆品,它們是這1/N數據的副本,對這個(gè)數據層的請求會(huì )被負載均衡地分配到這M個(gè)副本中的一個(gè)上。隨著(zhù)每個(gè)數據層返回一個(gè)結果,聚合器會(huì )把這些數據元素編輯成一個(gè)完整的列表,完成后就把這個(gè)排列好的列表發(fā)送給請求者。這N個(gè)Z軸劃分返回結果都非???,因為數據可以駐留在內存中,而且每個(gè)數據庫只查找1/N的數據。由于有多個(gè)聚合器,而且N個(gè)Z軸劃分中都有M個(gè)X軸副本,所以這個(gè)系統是完全冗余的。只要增加聚合器和網(wǎng)站制作數據的X軸副本,這個(gè)系統就能輕松地擴展交易量。如果必要,當聚合器一次需要同太多Z軸劃分交互時(shí),還可以增加聚合器的聚合器。
本文地址:http://havencoinwallet.com//article/3897.html