[分佈式設計] 隔離設計

按服務的種類來做分離

下面這個圖中,說明了按服務種類來做分離的情況

[分佈式設計] 隔離設計


上圖中,我們將系統分成了用戶、商品、社區三個板塊。這三個塊分別使用不同的域名、服務器和數據庫,做到從接入層到應用層再到數據層三層完全隔離。這樣一來,在物理上來說,一個板塊的故障就不會影響到另一板塊。

按用戶的請求來做分離

[分佈式設計] 隔離設計

在這個圖中,可以看到,我們將用戶分成不同的組,並把後端的同一個服務根據這些不同的組分成不同的實例。讓同一個服務對於不同的用戶進行冗餘和隔離,這樣一來,當服務實例掛掉時,只會影響其中一部分用戶,而不會導致所有的用戶無法訪問。這種分離和上面按功能的分離可以融合。說白了,這就是所謂的“多租戶”模式。對於一些比較大的客戶,我們可以為他們設置專門獨立的服務實例,或是服務集群與其他客戶隔離開來,對於一些比較小的用戶來說,可以讓他們共享一個服務實例,這樣可以節省相關的資源。對於“多租戶”的架構來說,會引入一些系統設計的複雜度。一方面,如果完全隔離,資源使用上會比較浪費,如果共享,又會導致程序設計的一些複雜度。

通常來說多租戶的做法有三種。

完全獨立的設計。每個租戶有自己完全獨立的服務和數據。

獨立的數據分區,共享的服務。多租戶的服務是共享的,但數據是分開隔離的。

共享的服務,共享的數據分區。每個租戶的數據和服務都是共享的。

這三種方案各有優缺點,如圖所示。

[分佈式設計] 隔離設計

所以,一般來說,技術方案會使用折衷方案,也就是中間方案,服務是共享的,數據通過分區來隔離,而對於一些比較重要的租戶(需要好的隔離性),則使用完全獨立的方式。

隔離設計的重點

我們需要定義好隔離業務的大小和粒度,過大和過小都不好。這需要認真地做業務上的需求和系統分析。

無論是做系統板塊還是多租戶的隔離,你都需要考慮系統的複雜度、成本、性能、資源使用的問題,找到一個合適的均衡方案,或是分佈實施的方案尤其重要,這其中需要你定義好要什麼和不要什麼。因為,我們不可能做出一個什麼都能滿足的系統。

隔離模式需要配置一些高可用、重試、異步、消息中間件,流控、熔斷等設計模式的方式配套使用。

不要忘記了分佈式系統中的運維的複雜度的提升,要能駕馭得好的話,還需要很多自動化運維的工具,尤其是使用像容器或是虛擬機這樣的虛擬化技術可以幫助我們更方便地管理,和對比資源更好地利用。否則做出來了也管理不好。

最後,你需要一個非常完整的能夠看得到所有服務的監控系統,這點非常重要。


分享到:


相關文章: