1. 隔離設(shè)計(jì)概述
- 現(xiàn)實(shí)生活中的隔離設(shè)計(jì)(Bulkheads 設(shè)計(jì))
- 造船上有防漏水的隔板,一般的船無(wú)論大小都有這個(gè)東西,大一點(diǎn)的船回把船艙隔成若干個(gè)空間。這樣如果船艙漏水,只會(huì)進(jìn)到一個(gè)小空間里,不會(huì)讓船艙都進(jìn)水,導(dǎo)致整個(gè)船沉。
- image.png
- 軟件設(shè)計(jì)中
- 為了不讓故障蔓延開來(lái),需要使用隔板技術(shù),來(lái)將架構(gòu)隔成多個(gè) 船艙 來(lái)隔離故障。
- 在分布式軟件架構(gòu)中,一般來(lái)說(shuō)分離有兩種方式
- 一種是以服務(wù)的種類來(lái)做分離
- 一種是以用戶來(lái)做分離。
2.系統(tǒng)的隔離方式
2.1 服務(wù)的種類來(lái)做分離
- image.png
1. 微服務(wù)架構(gòu),將大系統(tǒng),分離成不同的核心域。
- 不同核心域,有自己的數(shù)據(jù)庫(kù),從用戶接口層,到應(yīng)用層,領(lǐng)域?qū)油耆綦x。
- 一個(gè)核心域的故障不會(huì)影響到另一個(gè)板塊。
2. 問(wèn)題
- 同時(shí)獲取多個(gè)核心域的數(shù)據(jù),就需要調(diào)用多個(gè)服務(wù),會(huì)降低性能。
- 性能底 是指響應(yīng)時(shí)間,而不是吞吐量(吞吐量跟性能是反比)
- 解決方案
- 設(shè)計(jì)好用戶交互,不讓用戶在一個(gè)頁(yè)面上獲取所有的數(shù)據(jù)。
- 大數(shù)據(jù)平臺(tái) ,需要把這些數(shù)據(jù)抽取到一個(gè)數(shù)據(jù)倉(cāng)庫(kù)計(jì)算,增加了數(shù)據(jù)合并的復(fù)雜度
- 一般用一個(gè)框架或一個(gè)中間件來(lái)對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的抽取。
- 如果業(yè)務(wù)邏輯,跨領(lǐng)域,一個(gè)領(lǐng)域的故障也會(huì)導(dǎo)致流程走不下去。導(dǎo)致整個(gè)業(yè)務(wù)故障
- 一方面 保證這個(gè)業(yè)務(wù)流程各個(gè)子系統(tǒng)的高可用。
- 并且在業(yè)務(wù)流程做出 step-by-step 的方式,這樣用戶交互每一步都可以保存,以便故障恢復(fù)后可以繼續(xù)執(zhí)行。
- 如果跨領(lǐng)域交互變得復(fù)雜,
- 我們需要一個(gè) Pub/Sub 的高可用,且可以持久化的消息訂閱通知中間件來(lái)打通各個(gè)板塊的數(shù)據(jù)和信息交互。
- 多個(gè)領(lǐng)域中分布式事務(wù)問(wèn)題。
- 采用 兩階段,或者三階段的模式。
2.2 按用戶的請(qǐng)求來(lái)做分離

image.png
1. 多租戶模式
- 將用戶分成不同的組,并把后端的同一個(gè)服務(wù)根據(jù)這些不同組分成不同的實(shí)例。
- 讓同一個(gè)服務(wù)對(duì)于不同的用戶進(jìn)行冗余和隔離,這樣一來(lái)當(dāng)服務(wù)實(shí)例掛斷時(shí),只會(huì)影響其中一部分用戶,而不會(huì)導(dǎo)致所有用戶無(wú)法訪問(wèn)。
- 對(duì)于大客服,可以設(shè)置獨(dú)立分服務(wù)實(shí)例,或是服務(wù)集群與其他客服隔離開來(lái),對(duì)于較小的用戶,共享一個(gè)服務(wù)實(shí)例,這樣可以節(jié)省相關(guān)的資源。
2. 多租戶的做法
- 完全獨(dú)立的設(shè)計(jì)
- 每個(gè)租戶有自己完全獨(dú)立的服務(wù)和數(shù)據(jù)。
- 獨(dú)立的數(shù)據(jù)分區(qū),共享的服務(wù)
- 多租戶的服務(wù)是共享的, 但數(shù)據(jù)是分開隔離的。
- 共享的服務(wù),共享的數(shù)據(jù)分區(qū)
- 每個(gè)租戶的數(shù)據(jù)和服務(wù)都是共享的。
- 優(yōu)缺點(diǎn)
- image.png
3. 隔離設(shè)計(jì)的重點(diǎn)
- 定義號(hào)隔離業(yè)務(wù)的大小和粒度,過(guò)大和過(guò)小都不會(huì),這需要認(rèn)真的做業(yè)務(wù)上的需求和系統(tǒng)分析。
- 無(wú)論是做系統(tǒng)種類分離 還是多租戶模式的隔離, 都需要考慮系統(tǒng)的復(fù)雜度,成本,性能,資源。定義好要什么和不要什么。
- 隔離模式要配置一些高可用,重試,異步,消息中間件,流控,熔斷等設(shè)計(jì)模式的方法配套使用。
- 分布式系統(tǒng)中運(yùn)維的復(fù)雜度的提升,需要很多自動(dòng)化運(yùn)維的工具。
- 需要一個(gè)完整的能夠看得到所有服務(wù)的監(jiān)控系統(tǒng)。


