架構(gòu)設(shè)計之「服務(wù)隔離」

我們在做系統(tǒng)架構(gòu)設(shè)計的時候熄攘,經(jīng)常離不開的一個話題就是進行服務(wù)的隔離設(shè)計。

那什么是「服務(wù)隔離」呢?

顧名思義县匠,它是指將系統(tǒng)按照一定的原則劃分為若干個服務(wù)模塊,各個模塊之間相對獨立撒轮,無強依賴乞旦。當有故障發(fā)生時,能將問題和影響隔離在某個模塊內(nèi)部题山,而不擴散風(fēng)險兰粉,不波及其它模塊,不影響整體的系統(tǒng)服務(wù)顶瞳。

其實隔離設(shè)計并非軟件行業(yè)獨創(chuàng)玖姑,它是借鑒于造船行業(yè)愕秫。

如上圖,造船行業(yè)有一個專業(yè)術(shù)語叫做「艙壁隔離」焰络。利用艙壁將不同的船艙隔離起來戴甩,如果某一個船艙進了水,那么就可以立即封閉艙門舔琅,形成艙壁隔離等恐,只損失那一個船艙,其他船艙不受影響备蚓,整個船只還是可以正常航行课蔬。

一、為什么要做服務(wù)隔離設(shè)計呢郊尝?

我們在做系統(tǒng)設(shè)計的時候二跋,必須有一個清楚的認知是:任何軟件系統(tǒng),故障是不可避免的流昏,并且大多數(shù)還是不可預(yù)測的扎即,因此,我們只能在系統(tǒng)的設(shè)計之初就充分的考慮好應(yīng)對措施况凉,如何在故障發(fā)生時谚鄙,去盡最大可能的止損和減少故障范圍。

沒有人敢說他的系統(tǒng)是百分百可用刁绒,我們能做的就是闷营,使用一切方法去減少故障的影響面,盡可能的去提高系統(tǒng)的整體可用率知市。

而把系統(tǒng)分離成子服務(wù)傻盟,將子服務(wù)進行一定程度隔離的做法,能保證在有不可預(yù)測的故障發(fā)生時嫂丙,縮小故障范圍的最佳手段娘赴。

二、服務(wù)隔離應(yīng)該怎么做跟啤?

那在實際項目中诽表,一般通過什么方法去做服務(wù)隔離呢?主要有以下兩種:

按服務(wù)/功能做隔離

按用戶分類隔離

首先說一下按照服務(wù)進行隔離的做法隅肥。

網(wǎng)上找了一張圖关顷,雖然原圖的作用不是用來表述這個的,但是也類似武福,將就看吧。

比如上圖里面痘番,微博項目可以把 Feed信息流捉片、用戶系統(tǒng)平痰、評論系統(tǒng) 都分拆為獨立業(yè)務(wù)模塊,這些模塊無論是對外的接口應(yīng)用伍纫、還是到數(shù)據(jù)庫宗雇、到底層硬件資源都是完全隔離的。其中任何一個模塊的故障莹规,理論上都不會影響到其它模塊赔蒲。

再舉個例子,如果我們要設(shè)計個電商平臺良漱,可以將其中的 用戶系統(tǒng)舞虱、訂單系統(tǒng)、支付系統(tǒng)母市、倉儲系統(tǒng) 都分別進行獨立隔離矾兜,這樣做就是從服務(wù)層面實現(xiàn)了故障的隔離效果。

那按照服務(wù)隔離有沒有弊端呢患久?有椅寺,肯定有。

當我們某個功能操作需要關(guān)聯(lián)多個服務(wù)模塊或者同時查詢所個模塊數(shù)據(jù)的時候蒋失,代碼寫起來就會相對麻煩一些了返帕,其中涉及到多模塊調(diào)用的性能問題、數(shù)據(jù)一致性問題篙挽、事物問題等荆萤。

不同服務(wù)模塊之間的交互也會比較復(fù)雜一些,因為要做服務(wù)隔離嫉髓,避免服務(wù)強依賴观腊,所以模塊之間的交互調(diào)用最好是走異步模式,需要通過異步線程或消息中間件來傳遞實現(xiàn)算行。

在進行運營大數(shù)據(jù)分析的時候梧油,由于數(shù)據(jù)是散落在不同服務(wù)模塊的,因此需要做額外的匯聚操作州邢,還得有唯一字段保證數(shù)據(jù)在不同模塊產(chǎn)生的先后順序儡陨。

接下來說一下按用戶隔離的做法。

繼續(xù)網(wǎng)上找圖量淌,雖然原圖的作用不是用來表述這個的骗村,但是也類似。粉絲又不多呀枢,我又懶得畫圖胚股,將就看吧,多發(fā)揮一下想象力裙秋,哈哈琅拌。

簡單一句話解釋就是:我們先部署多套一模一樣的業(yè)務(wù)服務(wù)缨伊,然后將用戶根據(jù)一定的特征去做分類,讓不同分類的用戶去訪問不同的業(yè)務(wù)實例进宝,達到分流和隔離的效果刻坊。

怎么給用戶分類?

可以用按照用戶是否VIP党晋、用戶等級谭胚、用戶IP等等,方法很多未玻,要結(jié)合自己實際業(yè)務(wù)的特性來做灾而。

其實這也是一種「多租戶架構(gòu)」,在SaaS服務(wù)中用得比較多深胳。

多租戶模式有三種形式:

完全的隔離绰疤,即服務(wù)和數(shù)據(jù)都是完全獨立的。

公共服務(wù)舞终、獨立數(shù)據(jù)源轻庆,即多個租戶是用的同一臺服務(wù)程序,但是底層的數(shù)據(jù)源是獨立的敛劝。

公用服務(wù)余爆、公用數(shù)據(jù)源,即多個租戶的服務(wù)程序與數(shù)據(jù)庫源都是共享的夸盟,不同數(shù)據(jù)可能會做分區(qū)分表來獨立蛾方。

上述三種方式,從下到上上陕,獨立性和安全性越來越高桩砰,資源利用率越來越低,根據(jù)業(yè)務(wù)特性去選擇释簿,一般選擇折中方案亚隅。

另外,功能隔離和用戶隔離 兩種方式并非互斥的庶溶,是可以結(jié)合在一起使用的煮纵。

三、服務(wù)隔離的注意事項

我們在做服務(wù)隔離的時候偏螺,還是有一些原則和事項需要注意的:

不可越界:能在隔離模塊內(nèi)完成的邏輯行疏,就盡量不要跨模塊調(diào)用,減少依賴套像。

不可共享:數(shù)據(jù)和資源能獨享的就盡量不要共享酿联,不然很容易造成隔離失效。

考慮效率:設(shè)計隔離模塊的時候,要根據(jù)業(yè)務(wù)情況而定贞让,充分的考慮到未來的拓補結(jié)構(gòu)采幌,減少調(diào)用效率的損失。

考慮顆粒度:隔離模塊設(shè)計的大小問題震桶,過大和過小都不合適,需充分考慮征绎。

服務(wù)的全面監(jiān)控:既然服務(wù)或用戶進行隔離了蹲姐,那么系統(tǒng)的復(fù)雜度肯定是比之前要高了,那么針對多服務(wù)的全鏈路監(jiān)控是必不可少的人柿。

服務(wù)隔離的設(shè)計模式能降低依賴服務(wù)對整個系統(tǒng)的影響柴墩,保護有限的資源不被耗盡,提高了整個系統(tǒng)的可用性凫岖。本文參考了很多其它資料江咳,屬于拋磚引玉,希望大家能一起交流哥放,提出更好的架構(gòu)設(shè)計思路歼指。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市甥雕,隨后出現(xiàn)的幾起案子踩身,更是在濱河造成了極大的恐慌,老刑警劉巖社露,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挟阻,死亡現(xiàn)場離奇詭異,居然都是意外死亡峭弟,警方通過查閱死者的電腦和手機附鸽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞒瘸,“玉大人坷备,你說我怎么就攤上這事“の瘢” “怎么了击你?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谎柄。 經(jīng)常有香客問我丁侄,道長,這世上最難降的妖魔是什么朝巫? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任鸿摇,我火速辦了婚禮,結(jié)果婚禮上劈猿,老公的妹妹穿的比我還像新娘拙吉。我一直安慰自己潮孽,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布筷黔。 她就那樣靜靜地躺著往史,像睡著了一般。 火紅的嫁衣襯著肌膚如雪佛舱。 梳的紋絲不亂的頭發(fā)上椎例,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音请祖,去河邊找鬼订歪。 笑死,一個胖子當著我的面吹牛肆捕,可吹牛的內(nèi)容都是我干的刷晋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼慎陵,長吁一口氣:“原來是場噩夢啊……” “哼眼虱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荆姆,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蒙幻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后胆筒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邮破,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年仆救,在試婚紗的時候發(fā)現(xiàn)自己被綠了抒和。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡彤蔽,死狀恐怖摧莽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情顿痪,我是刑警寧澤镊辕,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站蚁袭,受9級特大地震影響征懈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜揩悄,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一卖哎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦亏娜、人聲如沸焕窝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽它掂。三九已至,卻和暖如春溯泣,著一層夾襖步出監(jiān)牢的瞬間群发,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工发乔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雪猪。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓栏尚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親只恨。 傳聞我的和親對象是個殘疾皇子译仗,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

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