微服務(wù):微服務(wù)(Microservices)和服務(wù)網(wǎng)格(Service Mesh)架構(gòu)概念整理

注:文章內(nèi)容為摘錄性文字跌捆,自己閱讀的一些筆記佩厚,方便日后查看说订。

微服務(wù)(Microservices)

在過去的 2016 年和 2017 年,微服務(wù)技術(shù)迅猛普及闺鲸,和容器技術(shù)一起成為這兩年中最吸引眼球的技術(shù)熱點埃叭。而以 Spring Cloud 為代表的傳統(tǒng)侵入式開發(fā)框架摸恍,占據(jù)著微服務(wù)市場的主流地位赤屋。

微服務(wù)(Microservices)是一種架構(gòu)風(fēng)格,一個大型復(fù)雜軟件應(yīng)用由一個或多個微服務(wù)組成类早。系統(tǒng)中的各個微服務(wù)可被獨立部署,各個微服務(wù)之間是松耦合的缭召。每個微服務(wù)僅關(guān)注于完成一件任務(wù)并很好地完成該任務(wù)栈顷。在所有情況下嵌巷,每個任務(wù)代表著一個小的業(yè)務(wù)能力。

形像一點來說搪哪,微服務(wù)架構(gòu)就像搭積木,每個微服務(wù)都是一個零件晓折,并使用這些零件組裝出不同的形狀。通俗來說漓概,微服務(wù)架構(gòu)就是把一個大系統(tǒng)按業(yè)務(wù)功能分解成多個職責(zé)單一的小系統(tǒng),并利用簡單的方法使多個小系統(tǒng)相互協(xié)作栅屏,組合成一個大系統(tǒng)。

如果學(xué)科派一點栈雳,微服務(wù)架構(gòu)就是把因相同原因而變化的功能聚合到一起缔莲,而把因不同原因而變化的功能分離開哥纫,并利用輕量化機制(通常為 HTTP RESTful API)實現(xiàn)通信痴奏。

微服務(wù)架構(gòu) ≈ 模塊化開發(fā) + 分布式計算。

需要注意的是“微服務(wù)”與“微服務(wù)架構(gòu)”是有本質(zhì)區(qū)別的读拆。“微服務(wù)”強調(diào)的是服務(wù)的大小暑诸,它關(guān)注的是某一個點。而“微服務(wù)架構(gòu)”則是一種架構(gòu)思想个榕,需要從整體上對軟件系統(tǒng)進行通盤的考慮。

微服務(wù)架構(gòu)示意圖:

常見的微服務(wù)組件及概念:

服務(wù)注冊:服務(wù)提供方將自己調(diào)用地址注冊到服務(wù)注冊中心西采,讓服務(wù)調(diào)用方能夠方便地找到自己。

服務(wù)發(fā)現(xiàn):服務(wù)調(diào)用方從服務(wù)注冊中心找到自己需要調(diào)用的服務(wù)的地址械馆。

負(fù)載均衡:服務(wù)提供方一般以多實例的形式提供服務(wù)胖眷,負(fù)載均衡功能能夠讓服務(wù)調(diào)用方連接到合適的服務(wù)節(jié)點。并且狱杰,節(jié)點選擇的工作對服務(wù)調(diào)用方來說是透明的瘦材。

服務(wù)網(wǎng)關(guān):服務(wù)網(wǎng)關(guān)是服務(wù)調(diào)用的唯一入口,可以在這個組件是實現(xiàn)用戶鑒權(quán)仿畸、動態(tài)路由、灰度發(fā)布朗和、A/B 測試错沽、負(fù)載限流等功能。

配置中心:將本地化的配置信息(properties, xml, yaml 等)注冊到配置中心眶拉,實現(xiàn)程序包在開發(fā)千埃、測試、生產(chǎn)環(huán)境的無差別性忆植,方便程序包的遷移。

API 管理:以方便的形式編寫及更新 API 文檔朝刊,并以方便的形式供調(diào)用者查看和測試耀里。

集成框架:微服務(wù)組件都以職責(zé)單一的程序包對外提供服務(wù),集成框架以配置的形式將所有微服務(wù)組件(特別是管理端組件)集成到統(tǒng)一的界面框架下拾氓,讓用戶能夠在統(tǒng)一的界面中使用系統(tǒng)冯挎。

分布式事務(wù):對于重要的業(yè)務(wù),需要通過分布式事務(wù)技術(shù)(TCC咙鞍、高可用消息服務(wù)房官、最大努力通知)保證數(shù)據(jù)的一致性。

調(diào)用鏈:記錄完成一個業(yè)務(wù)邏輯時調(diào)用到的微服務(wù)续滋,并將這種串行或并行的調(diào)用關(guān)系展示出來翰守。在系統(tǒng)出錯時,可以方便地找到出錯點疲酌。

支撐平臺:系統(tǒng)微服務(wù)化后蜡峰,系統(tǒng)變得更加碎片化徐勃,系統(tǒng)的部署事示、運維僻肖、監(jiān)控等都比單體架構(gòu)更加復(fù)雜肖爵,那么,就需要將大部分的工作自動化⊥卧啵現(xiàn)在劝堪,可以通過 Docker 等工具來中和這些微服務(wù)架構(gòu)帶來的弊端冀自。 例如持續(xù)集成、藍綠發(fā)布秒啦、健康檢查熬粗、性能健康等等。嚴(yán)重點余境,以我們兩年的實踐經(jīng)驗驻呐,可以這么說,如果沒有合適的支撐平臺或工具芳来,就不要使用微服務(wù)架構(gòu)佣盒。

微服務(wù)架構(gòu)的優(yōu)點:

降低系統(tǒng)復(fù)雜度:每個服務(wù)都比較簡單肥惭,只關(guān)注于一個業(yè)務(wù)功能蜜葱。

松耦合:微服務(wù)架構(gòu)方式是松耦合的笼沥,每個微服務(wù)可由不同團隊獨立開發(fā),互不影響汹桦。

跨語言:只要符合服務(wù) API 契約舞骆,開發(fā)人員可以自由選擇開發(fā)技術(shù)督禽。這就意味著開發(fā)人員可以采用新技術(shù)編寫或重構(gòu)服務(wù),由于服務(wù)相對較小胧谈,所以這并不會對整體應(yīng)用造成太大影響菱肖。

獨立部署:微服務(wù)架構(gòu)可以使每個微服務(wù)獨立部署场仲。開發(fā)人員無需協(xié)調(diào)對服務(wù)升級或更改的部署燎窘。這些更改可以在測試通過后立即部署。所以微服務(wù)架構(gòu)也使得 CI/CD 成為可能。

Docker 容器:和 Docker 容器結(jié)合的更好俊抵。

DDD 領(lǐng)域驅(qū)動設(shè)計:和 DDD 的概念契合徽诲,結(jié)合開發(fā)會更好。

微服務(wù)架構(gòu)的缺點:

微服務(wù)強調(diào)了服務(wù)大小钱贯,但實際上這并沒有一個統(tǒng)一的標(biāo)準(zhǔn):業(yè)務(wù)邏輯應(yīng)該按照什么規(guī)則劃分為微服務(wù),這本身就是一個經(jīng)驗工程弃锐。有些開發(fā)者主張 10-100 行代碼就應(yīng)該建立一個微服務(wù)。雖然建立小型服務(wù)是微服務(wù)架構(gòu)崇尚的浇辜,但要記住柳洋,微服務(wù)是達到目的的手段卑雁,而不是目標(biāo)测蹲。微服務(wù)的目標(biāo)是充分分解應(yīng)用程序,以促進敏捷開發(fā)和持續(xù)集成部署。

微服務(wù)的分布式特點帶來的復(fù)雜性:開發(fā)人員需要基于 RPC 或者消息實現(xiàn)微服務(wù)之間的調(diào)用和通信示辈,而這就使得服務(wù)之間的發(fā)現(xiàn)矾麻、服務(wù)調(diào)用鏈的跟蹤和質(zhì)量問題變得的相當(dāng)棘手险耀。

分區(qū)的數(shù)據(jù)庫體系和分布式事務(wù):更新多個業(yè)務(wù)實體的業(yè)務(wù)交易相當(dāng)普遍,不同服務(wù)可能擁有不同的數(shù)據(jù)庫柴灯。CAP 原理的約束,使得我們不得不放棄傳統(tǒng)的強一致性查描,而轉(zhuǎn)而追求最終一致性匀油,這個對開發(fā)人員來說是一個挑戰(zhàn)窝爪。

測試挑戰(zhàn):傳統(tǒng)的單體WEB應(yīng)用只需測試單一的 REST API 即可,而對微服務(wù)進行測試望蜡,需要啟動它依賴的所有其他服務(wù)状您。這種復(fù)雜性不可低估柒桑。

跨多個服務(wù)的更改:比如在傳統(tǒng)單體應(yīng)用中,若有 A、B、C 三個服務(wù)需要更改氯庆,A 依賴 B实昨,B 依賴 C志电。我們只需更改相應(yīng)的模塊洒嗤,然后一次性部署即可间唉。但是在微服務(wù)架構(gòu)中际跪,我們需要仔細規(guī)劃和協(xié)調(diào)每個服務(wù)的變更部署玛追。我們需要先更新 C,然后更新 B佛析,最后更新 A。

部署復(fù)雜:微服務(wù)由不同的大量服務(wù)構(gòu)成。每種服務(wù)可能擁有自己的配置、應(yīng)用實例數(shù)量以及基礎(chǔ)服務(wù)地址敬特。這里就需要不同的配置、部署皱炉、擴展和監(jiān)控組件怀估。此外,我們還需要服務(wù)發(fā)現(xiàn)機制合搅,以便服務(wù)可以發(fā)現(xiàn)與其通信的其他服務(wù)的地址多搀。因此,成功部署微服務(wù)應(yīng)用需要開發(fā)人員有更好地部署策略和高度自動化的水平灾部。

總的來說(問題和挑戰(zhàn)):API Gateway康铭、服務(wù)間調(diào)用、服務(wù)發(fā)現(xiàn)梳猪、服務(wù)容錯麻削、服務(wù)部署、數(shù)據(jù)調(diào)用春弥。

不過呛哟,現(xiàn)在很多微服務(wù)的框架(比如 Spring Cloud、Dubbo)已經(jīng)很好的解決了上面的問題匿沛。

資料來源:

微服務(wù)架構(gòu)初探很贊扫责,推薦

解析微服務(wù)架構(gòu)(一):什么是微服務(wù)

從0開始的微服務(wù)架構(gòu):(一)重識微服務(wù)架構(gòu)

服務(wù)網(wǎng)格(Service Mesh)

2017 年底,非侵入式的 Service Mesh 技術(shù)從萌芽到走向了成熟逃呼。

Service Mesh 又譯作“服務(wù)網(wǎng)格”鳖孤,作為服務(wù)間通信的基礎(chǔ)設(shè)施層

如果用一句話來解釋什么是 Service Mesh抡笼,可以將它比作是應(yīng)用程序或者說微服務(wù)間的 TCP/IP苏揣,負(fù)責(zé)服務(wù)之間的網(wǎng)絡(luò)調(diào)用、限流推姻、熔斷和監(jiān)控平匈。對于編寫應(yīng)用程序來說一般無須關(guān)心 TCP/IP 這一層(比如通過 HTTP 協(xié)議的 RESTful 應(yīng)用),同樣使用 Service Mesh 也就無須關(guān)系服務(wù)之間的那些原來是通過應(yīng)用程序或者其他框架實現(xiàn)的事情藏古,比如 Spring Cloud增炭、OSS,現(xiàn)在只要交給 Service Mesh 就可以了拧晕。

Service Mesh 的來龍去脈:

從最原始的主機之間直接使用網(wǎng)線相連

網(wǎng)絡(luò)層的出現(xiàn)

集成到應(yīng)用程序內(nèi)部的控制流

分解到應(yīng)用程序外部的控制流

應(yīng)用程序的中集成服務(wù)發(fā)現(xiàn)和斷路器

出現(xiàn)了專門用于服務(wù)發(fā)現(xiàn)和斷路器的軟件包/庫隙姿,如 Twitter 的 Finagle 和 Facebook 的 Proxygen,這時候還是集成在應(yīng)用程序內(nèi)部

出現(xiàn)了專門用于服務(wù)發(fā)現(xiàn)和斷路器的開源軟件厂捞,如 Netflix OSS输玷、Airbnb 的 synapse 和 nerve

最后作為微服務(wù)的中間層 Service Mesh 出現(xiàn)

Service Mesh 有如下幾個特點:

應(yīng)用程序間通訊的中間層

輕量級網(wǎng)絡(luò)代理

應(yīng)用程序無感知

解耦應(yīng)用程序的重試/超時队丝、監(jiān)控、追蹤和服務(wù)發(fā)現(xiàn)

Service Mesh 架構(gòu)圖:

目前流行的 Service Mesh 開源軟件有 Linkerd饲嗽、Envoy 和 Istio炭玫,而最近 Buoyant(開源 Linkerd 的公司)又發(fā)布了基于 Kubernetes 的 Service Mesh 開源項目 Conduit。

Service Mesh 開源項目簡介:

Linkerdhttps://github.com/linkerd/linkerd):第一代 Service Mesh貌虾,2016 年 1 月 15 日首發(fā)布吞加,業(yè)界第一個 Service Mesh 項目,由 Buoyant 創(chuàng)業(yè)小公司開發(fā)(前 Twitter 工程師)尽狠,2017 年 7 月 11 日衔憨,宣布和 Istio 集成,成為 Istio 的數(shù)據(jù)面板袄膏。

Envoyhttps://github.com/envoyproxy/envoy):第一代 Service Mesh践图,2016 年 9 月 13 日首發(fā)布,由 Matt Klein 個人開發(fā)(Lyft 工程師)沉馆,之后默默發(fā)展码党,版本較穩(wěn)定。

Istiohttps://github.com/istio/istio):第二代 Service Mesh斥黑,2017 年 5 月 24 日首發(fā)布揖盘,由 Google、IBM 和 Lyft 聯(lián)合開發(fā)锌奴,只支持 Kubernetes 平臺兽狭,2017 年 11 月 30 日發(fā)布 0.3 版本,開始支持非 Kubernetes 平臺鹿蜀,之后穩(wěn)定的開發(fā)和發(fā)布箕慧。

Conduithttps://github.com/runconduit/conduit):第二代 Service Mesh,2017 年 12 月 5 日首發(fā)布茴恰,由 Buoyant 公司開發(fā)(借鑒 Istio 整體架構(gòu)颠焦,部分進行了優(yōu)化),對抗 Istio 壓力山大往枣,也期待 Buoyant 公司的毅力伐庭。

nginMeshhttps://github.com/nginmesh/nginmesh):2017 年 9 月首發(fā)布,由 Nginx 開發(fā)婉商,定位是作為 Istio 的服務(wù)代理,也就是替代 Envoy渣叛,思路跟 Linkerd 之前和 Istio 集成很相似丈秩,極度低調(diào),GitHub 上的 star 也只有不到 100淳衙。

Konghttps://github.com/Kong/kong):比 nginMesh 更加低調(diào)蘑秽,默默發(fā)展中饺著。

關(guān)于微服務(wù)和服務(wù)網(wǎng)格的區(qū)別,我的一些理解:微服務(wù)更像是一個服務(wù)之間的生態(tài)肠牲,專注于服務(wù)治理等方面幼衰,而服務(wù)網(wǎng)格更專注于服務(wù)之間的通信,以及和 DevOps 更好的結(jié)合缀雳。

資料來源:

模式之服務(wù)網(wǎng)格

微服務(wù)架構(gòu)初探

什么是 Service Mesh(服務(wù)網(wǎng)格)很贊渡嚣,推薦

解讀2017之Service Mesh:群雄逐鹿烽煙起很贊,推薦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肥印,一起剝皮案震驚了整個濱河市识椰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌深碱,老刑警劉巖腹鹉,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異敷硅,居然都是意外死亡功咒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門绞蹦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來力奋,“玉大人,你說我怎么就攤上這事坦辟】睿” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵锉走,是天一觀的道長滨彻。 經(jīng)常有香客問我,道長挪蹭,這世上最難降的妖魔是什么亭饵? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮梁厉,結(jié)果婚禮上辜羊,老公的妹妹穿的比我還像新娘。我一直安慰自己词顾,他們只是感情好八秃,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肉盹,像睡著了一般昔驱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上上忍,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天骤肛,我揣著相機與錄音纳本,去河邊找鬼。 笑死腋颠,一個胖子當(dāng)著我的面吹牛繁成,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播淑玫,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼巾腕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了混移?” 一聲冷哼從身側(cè)響起祠墅,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歌径,沒想到半個月后毁嗦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡回铛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年狗准,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茵肃。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡腔长,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出验残,到底是詐尸還是另有隱情捞附,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布您没,位于F島的核電站鸟召,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏氨鹏。R本人自食惡果不足惜欧募,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仆抵。 院中可真熱鬧跟继,春花似錦、人聲如沸镣丑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽莺匠。三九已至金吗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辽聊。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留期贫,地道東北人跟匆。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像通砍,于是被迫代替她去往敵國和親玛臂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354

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