彈力設(shè)計(jì)之隔離設(shè)計(jì)

隔離設(shè)計(jì)對應(yīng)的單詞是 Bulkheads欢伏,中文翻譯為隔板匿垄。但其實(shí),這個術(shù)語是用在造船上的虎忌,也就是船艙里防漏水的隔板泡徙。一般的船無論大小都會有這個東西,大一點(diǎn)的船都會把船艙隔成若干個空間膜蠢。這樣堪藐,如果船艙漏水,只會進(jìn)到一個小空間里挑围,不會讓整個船艙都進(jìn)水而導(dǎo)致整艘船都沉了礁竞,如下圖所示。




我們的軟件設(shè)計(jì)當(dāng)然也“漏水”杉辙,所以為了不讓“故障”蔓延開來模捂,需要使用“隔板”技術(shù),來將架構(gòu)分隔成多個“船艙”來隔離故障蜘矢。

在分布式軟件架構(gòu)中狂男,我們同樣需要使用類似的技術(shù)來讓我們的故障得到隔離。這就需要我們對系統(tǒng)進(jìn)行分離品腹。一般來說并淋,對于系統(tǒng)的分離有兩種方式,一種是以服務(wù)的種類來做分離珍昨,一種是以用戶來做分離县耽。下面具體說明一下這兩種方式句喷。

按服務(wù)的種類來做分離

下面這個圖中,說明了按服務(wù)種類來做分離的情況兔毙。



上圖中唾琼,我們將系統(tǒng)分成了用戶、商品澎剥、社區(qū)三個板塊锡溯。這三個塊分別使用不同的域名、服務(wù)器和數(shù)據(jù)庫哑姚,做到從接入層到應(yīng)用層再到數(shù)據(jù)層三層完全隔離祭饭。這樣一來,在物理上來說叙量,一個板塊的故障就不會影響到另一板塊倡蝙。

然而任何架構(gòu)都有其好和不好的地方,上面這種架構(gòu)雖然在系統(tǒng)隔離上做得比較好绞佩,但是也存在以下一些問題寺鸥。

1、如果我們需要同時獲得多個板塊的數(shù)據(jù)品山,那么就需要調(diào)用多個服務(wù)胆建,這會降低性能。注意肘交,這里性能降低指的是響應(yīng)時間笆载,而不是吞吐量(相反,在這種架構(gòu)下涯呻,吞吐量可以得到提高)凉驻。
對于這樣的問題,一般來說魄懂,我們需要小心地設(shè)計(jì)用戶交互,最好不要讓用戶在一個頁面上獲得所有的數(shù)據(jù)闯第。對于目前的手機(jī)端來說市栗,因?yàn)槭謾C(jī)屏幕尺寸比較小,所以咳短,也不可能在一個屏幕頁上展示太多的內(nèi)容填帽。

2、如果有大數(shù)據(jù)平臺咙好,就需要把這些數(shù)據(jù)都抽取到一個數(shù)據(jù)倉庫中進(jìn)行計(jì)算篡腌,這也增加了數(shù)據(jù)合并的復(fù)雜度。對于這個問題勾效,我們需要一個框架或是一個中間件來對數(shù)據(jù)進(jìn)行相應(yīng)的抽取嘹悼。

3叛甫、另外,如果我們的業(yè)務(wù)邏輯或是業(yè)務(wù)流程需要跨板塊的話杨伙,那么一個板塊的故障也會導(dǎo)致整個流程走不下去其监,同樣會導(dǎo)致整體業(yè)務(wù)故障。
對于這個問題限匣,一方面抖苦,我們需要保證這個業(yè)務(wù)流程中各個子系統(tǒng)的高可用性,并且在業(yè)務(wù)流程上做成 Step-by-Step 的方式米死,這樣用戶交互的每一步都可以保存锌历,以便故障恢復(fù)后可以繼續(xù)執(zhí)行,而不是從頭執(zhí)行峦筒。

4究西、還有,如果需要有跨板塊的交互也會變得有點(diǎn)復(fù)雜勘天。對此我們需要一個類似于 Pub/Sub 的高可用怔揩、且可以持久化的消息訂閱通知中間件來打通各個板塊的數(shù)據(jù)和信息交換。

5脯丝、最后還會有在多個板塊中分布式事務(wù)的問題商膊。對此,我們需要“二階段提交”這樣的方案宠进。

按用戶的請求來做分離

下圖是一個按用戶請求來做分離的圖示晕拆。



在這個圖中,可以看到材蹬,我們將用戶分成不同的組实幕,并把后端的同一個服務(wù)根據(jù)這些不同的組分成不同的實(shí)例。讓同一個服務(wù)對于不同的用戶進(jìn)行冗余和隔離堤器,這樣一來昆庇,當(dāng)服務(wù)實(shí)例掛掉時,只會影響其中一部分用戶闸溃,而不會導(dǎo)致所有的用戶無法訪問整吆。

這種分離和上面按功能的分離可以融合。說白了辉川,這就是所謂的“多租戶”模式表蝙。對于一些比較大的客戶,我們可以為他們設(shè)置專門獨(dú)立的服務(wù)實(shí)例乓旗,或是服務(wù)集群與其他客戶隔離開來府蛇,對于一些比較小的用戶來說,可以讓他們共享一個服務(wù)實(shí)例屿愚,這樣可以節(jié)省相關(guān)的資源汇跨。

對于“多租戶”的架構(gòu)來說务荆,會引入一些系統(tǒng)設(shè)計(jì)的復(fù)雜度。一方面扰法,如果完全隔離蛹含,資源使用上會比較浪費(fèi),如果共享塞颁,又會導(dǎo)致程序設(shè)計(jì)的一些復(fù)雜度浦箱。

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

1祠锣、完全獨(dú)立的設(shè)計(jì)酷窥。每個租戶有自己完全獨(dú)立的服務(wù)和數(shù)據(jù)。
2伴网、獨(dú)立的數(shù)據(jù)分區(qū)蓬推,共享的服務(wù)。多租戶的服務(wù)是共享的澡腾,但數(shù)據(jù)是分開隔離的沸伏。
3、共享的服務(wù)动分,共享的數(shù)據(jù)分區(qū)毅糟。每個租戶的數(shù)據(jù)和服務(wù)都是共享的。

這三種方案各有優(yōu)缺點(diǎn)澜公,如圖所示姆另。



通過上圖,可以看到:

如果使用完全獨(dú)立的方案坟乾,在開發(fā)實(shí)現(xiàn)上和資源隔離度方面會非常好迹辐,然而,成本會比較高甚侣,計(jì)算資源也會有一定的浪費(fèi)明吩。
如果使用完全共享的方案,在資源利用和成本上會非常好殷费,然而印荔,開發(fā)難度非常大,而且數(shù)據(jù)和資源隔離非常不好宗兼。

所以躏鱼,一般來說氮采,技術(shù)方案會使用折衷方案殷绍,也就是中間方案,服務(wù)是共享的鹊漠,數(shù)據(jù)通過分區(qū)來隔離主到,而對于一些比較重要的租戶(需要好的隔離性)茶行,則使用完全獨(dú)立的方式。

然而登钥,在虛擬化技術(shù)非常成熟的今天畔师,我們完全可以使用“完全獨(dú)立”(完全隔離)的方案,通過底層的虛擬化技術(shù)(Hypervisor 的技術(shù)牧牢,如 KVM看锉,或是 Linux Container 的技術(shù),如 Docker)來實(shí)現(xiàn)物理資源的共享和成本的節(jié)約塔鳍。

隔離設(shè)計(jì)的重點(diǎn)

要能做好隔離設(shè)計(jì)伯铣,我們需要有如下的一些設(shè)計(jì)考量。

1轮纫、我們需要定義好隔離業(yè)務(wù)的大小和粒度腔寡,過大和過小都不好。這需要認(rèn)真地做業(yè)務(wù)上的需求和系統(tǒng)分析掌唾。
2放前、無論是做系統(tǒng)板塊還是多租戶的隔離,你都需要考慮系統(tǒng)的復(fù)雜度糯彬、成本凭语、性能、資源使用的問題情连,找到一個合適的均衡方案叽粹,或是分布實(shí)施的方案尤其重要,這其中需要你定義好要什么和不要什么却舀。因?yàn)槌婕福覀儾豢赡茏龀鲆粋€什么都能滿足的系統(tǒng)。
3挽拔、隔離模式需要配置一些高可用辆脸、重試、異步螃诅、消息中間件啡氢,流控、熔斷等設(shè)計(jì)模式的方式配套使用术裸。
4倘是、不要忘記了分布式系統(tǒng)中的運(yùn)維的復(fù)雜度的提升,要能駕馭得好的話袭艺,還需要很多自動化運(yùn)維的工具搀崭,尤其是使用像容器或是虛擬機(jī)這樣的虛擬化技術(shù)可以幫助我們更方便地管理,和對比資源更好地利用猾编。否則做出來了也管理不好瘤睹。
5升敲、最后,你需要一個非常完整的能夠看得到所有服務(wù)的監(jiān)控系統(tǒng)轰传,這點(diǎn)非常重要驴党。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市获茬,隨后出現(xiàn)的幾起案子港庄,更是在濱河造成了極大的恐慌,老刑警劉巖恕曲,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件攘轩,死亡現(xiàn)場離奇詭異,居然都是意外死亡码俩,警方通過查閱死者的電腦和手機(jī)度帮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稿存,“玉大人笨篷,你說我怎么就攤上這事“曷模” “怎么了率翅?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長袖迎。 經(jīng)常有香客問我冕臭,道長,這世上最難降的妖魔是什么燕锥? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任辜贵,我火速辦了婚禮,結(jié)果婚禮上归形,老公的妹妹穿的比我還像新娘托慨。我一直安慰自己,他們只是感情好暇榴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布厚棵。 她就那樣靜靜地躺著,像睡著了一般蔼紧。 火紅的嫁衣襯著肌膚如雪婆硬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天奸例,我揣著相機(jī)與錄音彬犯,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛躏嚎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播菩貌,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼卢佣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了箭阶?” 一聲冷哼從身側(cè)響起虚茶,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仇参,沒想到半個月后嘹叫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诈乒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年罩扇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怕磨。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡喂饥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肠鲫,到底是詐尸還是另有隱情员帮,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布导饲,位于F島的核電站捞高,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏渣锦。R本人自食惡果不足惜硝岗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望袋毙。 院中可真熱鬧辈讶,春花似錦、人聲如沸娄猫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽媳溺。三九已至月幌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悬蔽,已是汗流浹背扯躺。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人录语。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓倍啥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親澎埠。 傳聞我的和親對象是個殘疾皇子虽缕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容