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