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