微服務設計-讀書筆記

一:微服務概念

1春锋、微服務的產(chǎn)生

隨著領域驅(qū)動開發(fā)、持續(xù)交付差凹、按需虛擬化期奔、基礎設施自動化、容器技術(shù)危尿、小型自治團隊呐萌、大型集群系統(tǒng)等等實踐的過程中,發(fā)現(xiàn)細粒度的服務架構(gòu)可用提交交付速度谊娇,并且有更多的機會嘗試新技術(shù)肺孤。微服務在技術(shù)決策上給予更大的自由度,更快遞響應未知或者不可避免的變化济欢。

2赠堵、微服務的概念

微服務是小而自治的服務。小是只專注做好一件事法褥,粒度和業(yè)務邊界匹配茫叭。自治是自我治理,服務方和消費方解耦半等。修改一個微服務并且對其進行部署揍愁,并不影響其他的服務呐萨。

3、微服務的優(yōu)點

1)技術(shù)的異構(gòu)性:一個公司系統(tǒng)可能用不同的技術(shù)棧解決不同的應用場景吗垮,服務提供的API的支持不同的技術(shù)調(diào)用就很重要

2)彈性:服務邊界就是艙壁垛吗。單塊系統(tǒng)中,如果服務不可用烁登,那么所有功能都不可用怯屉。微服務中一個組件不可用,并不導致級連故障饵沧。微服務善于處理不可用和功能降級問題锨络。

3)擴展:單塊系統(tǒng)只能一個整體進行擴展,一小部分存在性能問題狼牺,也需要整體驚醒擴張羡儿。微服務因為是細粒度的,所以容易擴展是钥。

4)簡化部署:單塊系統(tǒng)修改小部分代碼掠归、也需要整體應用程序發(fā)布變更,導致風險很高悄泥。微服務架構(gòu)中虏冻,各個服務部署都是獨立的。

5)與組織結(jié)構(gòu)相匹配:微服務架構(gòu)可以的與組織結(jié)構(gòu)匹配弹囚,從而提高團隊的生產(chǎn)力厨相。

6)可組合性:單純的PC時代已過去,微服務架構(gòu)中鸥鹉,提供接口給各個端使用蛮穿,可組合成各個服務想要的功能。

7)可替代性風險低:在單體遺留系統(tǒng)中毁渗,需要替換工作量大践磅,風險很高。微服務因為小而自治灸异,可以簡單并且小風險的替換或重寫音诈。

4、微服務與SOA的關系

微服務架架構(gòu)師面向服務架構(gòu)(SOA)的一種特定實現(xiàn)

5绎狭、微服務不是銀彈

微服務需要面對所有分布式系統(tǒng)所面對復雜性细溅,比如面對部署、測試儡嘶、監(jiān)控和擴展等工作喇聊。微服務是否適合你,需與公司的組織蹦狂、系統(tǒng)等很多因素有關誓篱。如果組織是中心化朋贬、集中化管理的可能不適合使用微服務。



二:微服務建模

1窜骄、什么樣的服務是好服務

1)低耦合:一個修改不影響另一個服務锦募,一個服務盡可能少的知道與之協(xié)作的相關服務的信息2)高內(nèi)聚:相關的行為聚集在一起,找到問題域的邊界確保相關行為聚集邻遏。

2糠亩、限界上下文

限界上下文包括兩部分內(nèi)容,一部分需要與外部通訊准验,另一部分不需要和外部通訊赎线。上下文必須都要有明確的接口,接口決定暴露哪些模型給其他的上下文糊饱。想要從一個限界上下文中獲取信息垂寥,需使用模型和他的對外通訊的邊界進行通訊。

1)共享的隱藏模型

同一個名字在不同的上下文中有完全不同的含義另锋。比如退貨滞项,在客戶上下文中,意味著寄送包裹夭坪,退款等文判、在倉庫上下文中,退貨是一個即將到來的包裹台舱,重新入庫等律杠。所以庫存是共享的模型潭流,不能完全暴露或者盲目的暴露出去竞惋。

2)模塊和服務
模塊:同一進程內(nèi)可以使用模塊減少彼此之間的耦合。發(fā)現(xiàn)領域內(nèi)部的限界上下文灰嫉,一定要對模塊對其進行建模拆宛,同時使用共享和隱藏模型。服務:模塊成為轉(zhuǎn)為微服務的候選讼撒。模塊上下文越清晰浑厚,轉(zhuǎn)為微服務成了可能,最終服務邊界和領域上下文保持一致根盒。

3)過早的劃分
過早的進行服務劃分钳幅,發(fā)展一段時間后,服務的邊界上下文可能和之前有所不同炎滞,導致很多跨服務的修改代價高敢艰,導致合并成單塊系統(tǒng)的風險。面度新的領域時册赛,很多時候?qū)⒁粋€已有的系統(tǒng)劃分成微服務钠导,要比從頭開始構(gòu)建微服務簡單的多震嫉。

4、業(yè)務建模

1)方法:當你在思考業(yè)務的上下文時牡属,不應該從數(shù)據(jù)共享的角度考慮票堵,而應該從這些上下文提供的功能來考慮。這些功能操作提供給其他業(yè)務逮栅。
2)溝通:在組織內(nèi)悴势,不僅僅共享上下文的概念,還應該統(tǒng)一和共享術(shù)語和想法证芭。

5瞳浦、劃分上下文

1)劃分方法:一開始識別粗粒度的限界上下文、這些粗粒度的上下文可能包括一些套嵌的限界上下文废士,這些套嵌的上下文不直接對外可見叫潦。
2)暴露原則:使用粗粒度上下文還是套嵌上下文暴露服務,哪個更合理官硝,應該有組織結(jié)構(gòu)來決定的矗蕊。

6)技術(shù)邊界

技術(shù)邊界有顯示層、業(yè)務層和數(shù)據(jù)層氢架,微服務可以按照技術(shù)邊界搭建技術(shù)架構(gòu)傻咖。搭建這個架構(gòu)之前需按照業(yè)務進行垂直劃分。


三岖研、微服務集成

微服務的集成做到好卿操,可以保持自治性、可以獨立發(fā)布修改和發(fā)布孙援。

1害淤、集成原則

1)避免破壞性修改
服務的一些修改不能導致該服務的消費方發(fā)生改變。
2)保證API與技術(shù)的無關性
3)保證API的易用性
4)隱藏內(nèi)部實現(xiàn)細節(jié)

2拓售、同步與異步

同步:調(diào)用方發(fā)起遠程服務調(diào)用后窥摄,調(diào)用方阻塞自己并且等待服務方的返回。
異步:調(diào)用方不需要等待服務方返回础淤,甚至可能不關心這個操作完成與否崭放。

3、編排與協(xié)同

編排:同步調(diào)用一組服務鸽凶,等待各個服務的返回結(jié)果币砂。優(yōu)點知道業(yè)務流程中每一步跨服務調(diào)用結(jié)果,缺點容易承擔太多的調(diào)用玻侥,太耗時决摧,導致調(diào)用方的不穩(wěn)定性。
協(xié)同:異步調(diào)用一組服務或服務調(diào)用加入隊列中,降低服務之間的耦合度蜜徽,帶來的額外工作業(yè)務流程跨服務的監(jiān)控祝懂,不過可通過消費方處理完成后,回調(diào)服務方告知處理結(jié)果拘鞋。

4砚蓬、版本管理

1)盡可能推遲破壞性修改
寬進嚴出的原則
2)盡早發(fā)現(xiàn)破壞性的修改
按照契約,通過測試及早發(fā)現(xiàn)是服務方還是消費方破壞性的修改
3)不同的接口版本共存
最好共存兩個版本


四盆色、微服務規(guī)幕彝埽化

1、故障無所不在
網(wǎng)絡是不可靠隔躲,只能盡力限制引起故障的因數(shù)摩梧,達到一定規(guī)模后,故障不可避免宣旱。

2仅父、跨功能需求
服務吞吐量、可用性和數(shù)據(jù)持久性等這些需求需要持續(xù)測量浑吟,并保證服務滿足可接受的目標笙纤。

3、功能降級
構(gòu)建彈性系統(tǒng)组力,因微服務功能分散省容,在有可能down機的微服務上,能夠安全的降級以保證彈性

4燎字、反服務脆弱
為了不會引起嚴重級聯(lián)影響腥椒,需要正確的設置超時、實現(xiàn)艙壁隔離或斷路層等以避免在第一時間調(diào)用一個不健康的服務候衍。

1)超時
設置超時時間對于調(diào)用下游服務十分重要笼蛛,超時時間設置太長有可能把下游系統(tǒng)拖慢,設置太短可能下游服務未處理完成脱柱。最好設置一個默認的超時時間伐弹,當超時發(fā)生時后拉馋,記錄到日志里看看發(fā)生了什么榨为,并且做響應的調(diào)整。
2)斷路器
使用斷路器煌茴,當請求下游服務發(fā)生一定數(shù)量的失敗后随闺,短路器打開,接下來的請求快速失敗蔓腐。一斷時間后矩乐,查看下游服務是否已服務,重置斷路器。
3)艙壁
未每個下游服務建立單獨的連接池散罕。超時和斷路器資源受限時釋放資源分歇,艙壁第一時間確保它不成為限制。還有一個拒絕請求的艙壁欧漱,用以避免資源飽和职抡,稱之為減載。
4)隔離
當下游服務離線误甚,上游服務不受影響缚甩。設置成為服務間隔離。

5窑邦、冪等

冪等操作擅威,多次執(zhí)行所產(chǎn)生的影響,均與一次執(zhí)行影響相同冈钦〗即裕可以把某些特定業(yè)務操作設計成冪等的,比如客戶下單送積分瞧筛。

6宾袜、擴展

增加負載、減少延遲驾窟。

1)更強大的主機:垂直擴展庆猫,更好的機器。
2)拆分負載:按業(yè)務拆分成不同的微服務
3)分散風險:數(shù)據(jù)跨機房绅络,異地備份等
4)負載均衡:避免服務單點故障
5)作業(yè)分離:Job獨立服務執(zhí)行
6)重新設計:一般設計系統(tǒng)需要考慮10倍容量增長月培。重新設計系統(tǒng)應對規(guī)模化恩急,是成功的標志杉畜。

7、擴展數(shù)據(jù)庫

1)服務的可用性
2)服務的持久性:多副本
3)讀取數(shù)據(jù)擴展:讀寫分離
4)寫操作擴展:分表分庫
5)共享數(shù)據(jù)庫設施:容易形成單點故障
6)CQRS:命令查詢職責分離

8衷恭、緩存

通過存儲之前的操作結(jié)果此叠,以便后續(xù)請求使用這個結(jié)果,而無需花重新計算或查詢随珠。
1)客戶端緩存
客戶端緩存獲取的結(jié)果灭袁,客戶端決定何時獲取新副本。一般是有下游服務提供緩沖的過期時間窗看∪灼纾客戶端緩存可以減少網(wǎng)絡調(diào)用次數(shù),并且減少下游服務負載的最快方法之一显沈,客戶端緩存數(shù)據(jù)软瞎,讓數(shù)據(jù)失效需要做額外的工作逢唤。
2)服務端緩存
服務端來負責處理緩存,容易跟蹤和優(yōu)化緩存的命中率涤浇。
3)代理服務器緩存
緩存在服務的和客戶端之間鳖藕,比如方向代理或CDN等。對一切客戶端和服務端不透明
4)HTTP緩存
5)為寫使用緩存
先寫入本地緩存只锭,之后某個時刻將數(shù)據(jù)寫入下游的吊奢,可能更規(guī)范化的數(shù)據(jù)源中。
6)為彈性使用緩存
下游服務不可用纹烹,客戶端可以緩存可能失效的數(shù)據(jù)页滚。
7)隱藏源服務
保護源服務,不直接暴露源服務铺呵。如果緩存不命中裹驰,立即失敗,異步重建緩存片挂。
8)保持簡單
避免太多地方使用緩存幻林,緩存越多,數(shù)據(jù)越可能失效音念,就越難保證數(shù)據(jù)的新鮮程度沪饺。

9、自動伸縮

響應型伸縮闷愤、預測型伸縮

10整葡、CAP定理

在分布式系統(tǒng)中有三方面需要彼此權(quán)衡:一致性、可用性和分區(qū)容忍性讥脐。這個定理告之我們最多只能能保證三個中的兩個遭居。CA系統(tǒng)在分布式系統(tǒng)中根本不存在。

11旬渠、服務發(fā)現(xiàn)

1)DNS
2)動態(tài)服務注冊:zookeeper俱萍、redis、consul

12告丢、文檔

接口文檔的重要性


五枪蘑、微服務總結(jié)

什么時候你不應該使用微服務
越不了解一個領域,為服務找到合適的限界上下文就越難岖免,邊界清晰穩(wěn)定后岳颇,再進行拆分。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末觅捆,一起剝皮案震驚了整個濱河市赦役,隨后出現(xiàn)的幾起案子麻敌,更是在濱河造成了極大的恐慌栅炒,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赢赊,居然都是意外死亡乙漓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門释移,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叭披,“玉大人,你說我怎么就攤上這事玩讳∩” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵熏纯,是天一觀的道長同诫。 經(jīng)常有香客問我,道長樟澜,這世上最難降的妖魔是什么误窖? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮秩贰,結(jié)果婚禮上霹俺,老公的妹妹穿的比我還像新娘。我一直安慰自己毒费,他們只是感情好丙唧,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著觅玻,像睡著了一般艇棕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上串塑,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天沼琉,我揣著相機與錄音,去河邊找鬼桩匪。 笑死打瘪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的傻昙。 我是一名探鬼主播闺骚,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼妆档!你這毒婦竟也來了僻爽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤贾惦,失蹤者是張志新(化名)和其女友劉穎胸梆,沒想到半個月后敦捧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡碰镜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年兢卵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绪颖。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡秽荤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出柠横,到底是詐尸還是另有隱情窃款,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布牍氛,位于F島的核電站雁乡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏糜俗。R本人自食惡果不足惜踱稍,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悠抹。 院中可真熱鬧珠月,春花似錦、人聲如沸楔敌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卵凑。三九已至庆聘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勺卢,已是汗流浹背伙判。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留黑忱,地道東北人宴抚。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像甫煞,于是被迫代替她去往敵國和親菇曲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

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

  • 技術(shù)上解耦的手段:集成 1. 理想的集成技術(shù) 1) 避免破壞性修改:修改一個服務不會導致該服務的消費方隨之發(fā)生改變...
    書興閱讀 1,560評論 0 1
  • 如何確定微服務的邊界 ---建模 1. 什么樣的服務是好的服務 1) 松耦合:修改一個服務不需要修改另外一個服務抚吠,...
    書興閱讀 940評論 0 3
  • 隨著領域驅(qū)動設計常潮、持續(xù)交付、按需虛擬化楷力、基礎設施自動化喊式、小型自治團隊孵户、大型集群系統(tǒng)這些實踐的流行,微服務也應運而生...
    孤島之森閱讀 432評論 0 1
  • 組織:康威定律和系統(tǒng)設計 康威定律:任何組織在設計一套系統(tǒng)時垃帅,所交付的設計方案在結(jié)構(gòu)上與該組織的溝通結(jié)構(gòu)保持一致 ...
    書興閱讀 800評論 0 1
  • 交朋友是要花費時間精力的捌肴,而我們每個人的精力都是有限的恨胚。忙著應付一些酒肉朋友,留給真心相待的朋友的時間自然就會變少...
    點滴故事閱讀 378評論 0 0