架構(gòu)師團隊決定劃分站點的功能,以便適應(yīng)應(yīng)用復(fù)雜度的增長。也許你還記得,像瀏覽、搜索、產(chǎn)品目錄上傳、存貨管理等無需知道客戶特定的信息就能執(zhí)行的動作,都可以成為站點上的一個功能分支, 具有自己的代碼庫。決定把這些功能放入泳道,每個泳道都需要具有它那部分功能所需的數(shù)據(jù)。架構(gòu)師團隊認識到,要這樣做,就要修改數(shù)據(jù)架構(gòu)的形式,有些數(shù)據(jù)元素要被復(fù)制到整個架構(gòu)中。要確保對于任何數(shù)據(jù)元素都有且只有一個節(jié)點,用于存放最近最新的數(shù)據(jù)副本。在理想狀況下,架構(gòu)師團隊把數(shù)據(jù)的更新放在一個泳道中,同時在客戶交易之外,采用某種形式的異步更新方法,來更新架構(gòu)中的其他部分中的數(shù)據(jù)。所有的客戶信息都要被劃分到N個豆莢中,其中N是個可配置的參數(shù)。每個豆莢中會駐留大約1/N的客戶。這是根據(jù)客戶進行的Z軸劃分。在每個Z軸劃分中,架構(gòu)師團隊準(zhǔn)備對代碼和執(zhí)行代碼所需的數(shù)據(jù)進行Y軸劃分。登錄/登出是一個功能,支付是一個功能,賬戶狀態(tài)和匯總是一個功能,支持這些功能所需的數(shù)據(jù)也會隨應(yīng)用作出相應(yīng)的劃分。每個Y軸劃分的泳道只需了解1/N的客戶,因此,需要緩存的數(shù)據(jù)(如登錄信息)就大大減少了,緩存速度就更快了。
最后,架構(gòu)師團隊在所有劃分中都應(yīng)用了X軸劃分,以便擴展這些劃分中的交易量。
搜索這個功能引起了AlScale的數(shù)據(jù)和軟件架構(gòu)師的擔(dān)心,所以最終他們決定對這個領(lǐng)域給予更多的關(guān)注。他們打算利用擴展立方的X軸、Y軸和Z軸來滿足搜素的需求,讓最終用戶非??斓鼐湍艿玫剿阉鹘Y(jié)果。把搜索功能單獨劃分出來,就是Y軸劃分了,所以我們接下來要關(guān)注的是X軸和Z軸劃分。對于下面的討論。
架構(gòu)師團隊決定采用聚合器來加速處理搜索請求。這些聚合器要負責(zé)處理交易量的增長,每個聚合器都是其他聚合器的克隆品,這就創(chuàng)建了一個X軸實現(xiàn)。最終請求被發(fā)送給N個系統(tǒng),每個系統(tǒng)中存放了1/N的要銷售的產(chǎn)品,N是應(yīng)用到產(chǎn)品目錄上的模數(shù)。這種N項劃分就是一種根據(jù)產(chǎn)品編號進行的Z軸劃分。此外,每個Z軸劃分中還有M個克隆的數(shù)據(jù)集,這樣可以應(yīng)對交易量的增長。
一個搜索請求可以經(jīng)過負 載均衡器被分配到任何一個聚合器上,然后這個聚合器會劃分出N個單獨的請求,每一個對應(yīng)于N個產(chǎn)品數(shù)據(jù)庫層中的一個。這些產(chǎn)品數(shù)據(jù)庫中的每一個都有1/N(產(chǎn)品編號對N取模)的數(shù)據(jù)。接下來,每個數(shù)據(jù)層中都有M個克隆品,它們是這1/N數(shù)據(jù)的副本,對這個數(shù)據(jù)層的請求會被負載均衡地分配到這M個副本中的一個上。隨著每個數(shù)據(jù)層返回一個結(jié)果,聚合器會把這些數(shù)據(jù)元素編輯成一個完整的列表,完成后就把這個排列好的列表發(fā)送給請求者。這N個Z軸劃分返回結(jié)果都非???,因為數(shù)據(jù)可以駐留在內(nèi)存中,而且每個數(shù)據(jù)庫只查找1/N的數(shù)據(jù)。由于有多個聚合器,而且N個Z軸劃分中都有M個X軸副本,所以這個系統(tǒng)是完全冗余的。只要增加聚合器和網(wǎng)站制作數(shù)據(jù)的X軸副本,這個系統(tǒng)就能輕松地擴展交易量。如果必要,當(dāng)聚合器一次需要同太多Z軸劃分交互時,還可以增加聚合器的聚合器。
本文地址:http://www.islandpacificappraisals.com//article/3897.html