概要:系統(tǒng)的分離有兩種方式,以服務(wù)、以用戶來做分離;隔離設(shè)計(jì)的重點(diǎn):
一、按服務(wù)的種類來做分離

系統(tǒng)分成了用戶、商品、社區(qū)三個(gè)版塊。使用不同的域名、服務(wù)器和數(shù)據(jù)庫,從接入層到應(yīng)用層再到數(shù)據(jù)層三層完全隔離。每個(gè)服務(wù)都有自己的一個(gè)數(shù)據(jù)庫,保存相關(guān)業(yè)務(wù)的數(shù)據(jù)和相應(yīng)的處理狀態(tài)。每個(gè)服務(wù)對外暴露。微服務(wù)所推薦的架構(gòu)方式。
隔離存在以下一些問題:
1.調(diào)用多個(gè)服務(wù)(同時(shí)獲得多個(gè)板塊數(shù)據(jù)),會降低性能。性能指的是響應(yīng)時(shí)間,而不是吞吐量(這種架構(gòu)下,吞吐量可以得到提高)。所以不要在一個(gè)頁面上獲得所有的數(shù)據(jù),好在手機(jī)頁面小。
2.增加了數(shù)據(jù)合并的復(fù)雜度。需要一個(gè)框架、間件來對數(shù)據(jù)進(jìn)行相應(yīng)的抽取。
3.導(dǎo)致整體業(yè)務(wù)故障,如果業(yè)務(wù)流程跨版塊的話,所以業(yè)務(wù)流程Step-by-Step 的方式,交互的每一步都可以保存,以便故障恢復(fù)后繼續(xù)執(zhí)行,而不是從頭執(zhí)行。
4.跨版塊復(fù)雜。高可用并持久化的消息中間件(類似Pub/Sub),打通各個(gè)版塊的數(shù)據(jù)和信息交換。
5.多版塊分布式事務(wù)問題。采用“二階段提交”方案。亞馬遜使用的是 Plan – Reserve – Commit/Cancel 模式。也就是說,先做一個(gè) plan 的 API 調(diào)用,各個(gè)子系統(tǒng) reserve 住相應(yīng)的資源,成功Commit;一個(gè)失敗體 Cancel。很像阿里的 TCC – try confirm/cancel。引入大量的異步處理模型。
二·、按用戶的請求來做分離

這樣系統(tǒng)掛掉時(shí),只影響一部分。
“多租戶”模式:大客戶,設(shè)置專門獨(dú)立服務(wù)實(shí)例,或是服務(wù)集群與其他客戶隔離開來,小用戶,共享一個(gè)服務(wù)實(shí)例。
“多租戶”架構(gòu)來引入復(fù)雜度。完全隔離,資源浪費(fèi),共享,程序設(shè)計(jì)復(fù)雜。
多租戶的做法有三種:
(1)完全獨(dú)立的設(shè)計(jì)。每個(gè)租戶有自己完全獨(dú)立的服務(wù)和數(shù)據(jù)。
(2)獨(dú)立的數(shù)據(jù)分區(qū),共享的服務(wù)。多租戶的服務(wù)是共享的,但數(shù)據(jù)是分開隔離的。
(3)共享的服務(wù),共享的數(shù)據(jù)分區(qū)。每個(gè)租戶的數(shù)據(jù)和服務(wù)都是共享的。
這三種方案各有優(yōu)缺點(diǎn),如圖所示。

在虛擬化技術(shù)非常成熟的今天,我們完全可以使用“完全獨(dú)立”(完全隔離)的方案,通過底層的虛擬化技術(shù)(Hypervisor 的技術(shù),如 KVM,或是 Linux Container 的技術(shù),如Docker)來實(shí)現(xiàn)物理資源的共享和成本的節(jié)約。
三、隔離設(shè)計(jì)的重點(diǎn):
定義好隔離業(yè)務(wù)的大小和粒度,不過大過小。業(yè)務(wù)上的需求和系統(tǒng)分析。
考慮系統(tǒng)的復(fù)雜度、成本、性能、資源使用的問題,無論是做系統(tǒng)版塊還是多租戶的隔離,定義好要什么和不要什么,一個(gè)合適的均衡方案/分布實(shí)施的方案尤其重要,。
配置高可用、重試、異步、消息中間件,流控、熔斷等配套使用。
自動(dòng)化運(yùn)維的工具:使用像容器或是虛擬機(jī)更方便地管理
看到所有服務(wù)的監(jiān)控系統(tǒng)。
評論:
我們目前系統(tǒng)中采用隔離的點(diǎn)包括:
1、服務(wù)集群隔離,我們可以配置不同的請求訪問不同的服務(wù)集群,我們通過服務(wù)別名來區(qū)分
2、數(shù)據(jù)存儲隔離,包括數(shù)據(jù)庫隔離、緩存集群隔離。數(shù)據(jù)庫隔離一般通過分庫分表,讀寫分離
3、線程池隔離,在同一個(gè)應(yīng)用中,不同的任務(wù)處理通過線程池隔離
4、網(wǎng)絡(luò)帶寬隔離
隔離的本質(zhì)是當(dāng)系統(tǒng)出盡現(xiàn)故障時(shí),將影響范圍降到最低。