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

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

微服務(wù)(Microservices)

在過去的 2016 年和 2017 年碗淌,微服務(wù)技術(shù)迅猛普及盏求,和容器技術(shù)一起成為這兩年中最吸引眼球的技術(shù)熱點(diǎn)。而以 Spring Cloud 為代表的傳統(tǒng)侵入式開發(fā)框架亿眠,占據(jù)著微服務(wù)市場(chǎng)的主流地位碎罚。

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

形像一點(diǎn)來說岔帽,微服務(wù)架構(gòu)就像搭積木玫鸟,每個(gè)微服務(wù)都是一個(gè)零件,并使用這些零件組裝出不同的形狀犀勒。通俗來說屎飘,微服務(wù)架構(gòu)就是把一個(gè)大系統(tǒng)按業(yè)務(wù)功能分解成多個(gè)職責(zé)單一的小系統(tǒng),并利用簡(jiǎn)單的方法使多個(gè)小系統(tǒng)相互協(xié)作账蓉,組合成一個(gè)大系統(tǒng)枚碗。

如果學(xué)科派一點(diǎn),微服務(wù)架構(gòu)就是把因相同原因而變化的功能聚合到一起铸本,而把因不同原因而變化的功能分離開肮雨,并利用輕量化機(jī)制(通常為 HTTP RESTful API)實(shí)現(xiàn)通信。

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

需要注意的是“微服務(wù)”與“微服務(wù)架構(gòu)”是有本質(zhì)區(qū)別的怨规。“微服務(wù)”強(qiáng)調(diào)的是服務(wù)的大小锡足,它關(guān)注的是某一個(gè)點(diǎn)波丰。而“微服務(wù)架構(gòu)”則是一種架構(gòu)思想,需要從整體上對(duì)軟件系統(tǒng)進(jìn)行通盤的考慮舶得。

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

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

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

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

負(fù)載均衡:服務(wù)提供方一般以多實(shí)例的形式提供服務(wù)纫骑,負(fù)載均衡功能能夠讓服務(wù)調(diào)用方連接到合適的服務(wù)節(jié)點(diǎn)蝎亚。并且,節(jié)點(diǎn)選擇的工作對(duì)服務(wù)調(diào)用方來說是透明的先馆。

服務(wù)網(wǎng)關(guān):服務(wù)網(wǎng)關(guān)是服務(wù)調(diào)用的唯一入口发框,可以在這個(gè)組件是實(shí)現(xiàn)用戶鑒權(quán)、動(dòng)態(tài)路由煤墙、灰度發(fā)布梅惯、A/B 測(cè)試、負(fù)載限流等功能仿野。

配置中心:將本地化的配置信息(properties, xml, yaml 等)注冊(cè)到配置中心铣减,實(shí)現(xiàn)程序包在開發(fā)、測(cè)試脚作、生產(chǎn)環(huán)境的無差別性徙歼,方便程序包的遷移。

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

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

分布式事務(wù):對(duì)于重要的業(yè)務(wù)灭翔,需要通過分布式事務(wù)技術(shù)(TCC魏烫、高可用消息服務(wù)、最大努力通知)保證數(shù)據(jù)的一致性肝箱。

調(diào)用鏈:記錄完成一個(gè)業(yè)務(wù)邏輯時(shí)調(diào)用到的微服務(wù)哄褒,并將這種串行或并行的調(diào)用關(guān)系展示出來。在系統(tǒng)出錯(cuò)時(shí)煌张,可以方便地找到出錯(cuò)點(diǎn)呐赡。

支撐平臺(tái):系統(tǒng)微服務(wù)化后,系統(tǒng)變得更加碎片化骏融,系統(tǒng)的部署链嘀、運(yùn)維、監(jiān)控等都比單體架構(gòu)更加復(fù)雜档玻,那么怀泊,就需要將大部分的工作自動(dòng)化。現(xiàn)在误趴,可以通過 Docker 等工具來中和這些微服務(wù)架構(gòu)帶來的弊端霹琼。 例如持續(xù)集成、藍(lán)綠發(fā)布、健康檢查枣申、性能健康等等售葡。嚴(yán)重點(diǎn),以我們兩年的實(shí)踐經(jīng)驗(yàn)糯而,可以這么說天通,如果沒有合適的支撐平臺(tái)或工具,就不要使用微服務(wù)架構(gòu)熄驼。

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

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

松耦合:微服務(wù)架構(gòu)方式是松耦合的瓜贾,每個(gè)微服務(wù)可由不同團(tuán)隊(duì)獨(dú)立開發(fā)诺祸,互不影響。

跨語言:只要符合服務(wù) API 契約祭芦,開發(fā)人員可以自由選擇開發(fā)技術(shù)筷笨。這就意味著開發(fā)人員可以采用新技術(shù)編寫或重構(gòu)服務(wù),由于服務(wù)相對(duì)較小龟劲,所以這并不會(huì)對(duì)整體應(yīng)用造成太大影響胃夏。

獨(dú)立部署:微服務(wù)架構(gòu)可以使每個(gè)微服務(wù)獨(dú)立部署。開發(fā)人員無需協(xié)調(diào)對(duì)服務(wù)升級(jí)或更改的部署昌跌。這些更改可以在測(cè)試通過后立即部署仰禀。所以微服務(wù)架構(gòu)也使得 CI/CD 成為可能。

Docker 容器:和 Docker 容器結(jié)合的更好蚕愤。

DDD 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì):和 DDD 的概念契合答恶,結(jié)合開發(fā)會(huì)更好。

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

微服務(wù)強(qiáng)調(diào)了服務(wù)大小萍诱,但實(shí)際上這并沒有一個(gè)統(tǒng)一的標(biāo)準(zhǔn):業(yè)務(wù)邏輯應(yīng)該按照什么規(guī)則劃分為微服務(wù)悬嗓,這本身就是一個(gè)經(jīng)驗(yàn)工程。有些開發(fā)者主張 10-100 行代碼就應(yīng)該建立一個(gè)微服務(wù)裕坊。雖然建立小型服務(wù)是微服務(wù)架構(gòu)崇尚的包竹,但要記住,微服務(wù)是達(dá)到目的的手段碍庵,而不是目標(biāo)映企。微服務(wù)的目標(biāo)是充分分解應(yīng)用程序,以促進(jìn)敏捷開發(fā)和持續(xù)集成部署静浴。

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

分區(qū)的數(shù)據(jù)庫(kù)體系和分布式事務(wù):更新多個(gè)業(yè)務(wù)實(shí)體的業(yè)務(wù)交易相當(dāng)普遍双絮,不同服務(wù)可能擁有不同的數(shù)據(jù)庫(kù)浴麻。CAP 原理的約束,使得我們不得不放棄傳統(tǒng)的強(qiáng)一致性囤攀,而轉(zhuǎn)而追求最終一致性软免,這個(gè)對(duì)開發(fā)人員來說是一個(gè)挑戰(zhàn)。

測(cè)試挑戰(zhàn):傳統(tǒng)的單體WEB應(yīng)用只需測(cè)試單一的 REST API 即可焚挠,而對(duì)微服務(wù)進(jìn)行測(cè)試膏萧,需要啟動(dòng)它依賴的所有其他服務(wù)。這種復(fù)雜性不可低估蝌衔。

跨多個(gè)服務(wù)的更改:比如在傳統(tǒng)單體應(yīng)用中榛泛,若有 A、B噩斟、C 三個(gè)服務(wù)需要更改曹锨,A 依賴 B,B 依賴 C剃允。我們只需更改相應(yīng)的模塊沛简,然后一次性部署即可。但是在微服務(wù)架構(gòu)中斥废,我們需要仔細(xì)規(guī)劃和協(xié)調(diào)每個(gè)服務(wù)的變更部署椒楣。我們需要先更新 C,然后更新 B牡肉,最后更新 A撒顿。

部署復(fù)雜:微服務(wù)由不同的大量服務(wù)構(gòu)成。每種服務(wù)可能擁有自己的配置荚板、應(yīng)用實(shí)例數(shù)量以及基礎(chǔ)服務(wù)地址。這里就需要不同的配置吩屹、部署跪另、擴(kuò)展和監(jiān)控組件。此外煤搜,我們還需要服務(wù)發(fā)現(xiàn)機(jī)制免绿,以便服務(wù)可以發(fā)現(xiàn)與其通信的其他服務(wù)的地址。因此擦盾,成功部署微服務(wù)應(yīng)用需要開發(fā)人員有更好地部署策略和高度自動(dòng)化的水平嘲驾。

總的來說(問題和挑戰(zhàn)):API Gateway、服務(wù)間調(diào)用迹卢、服務(wù)發(fā)現(xiàn)辽故、服務(wù)容錯(cuò)丙猬、服務(wù)部署翁潘、數(shù)據(jù)調(diào)用。

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

資料來源:

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

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

從0開始的微服務(wù)架構(gòu):(一)重識(shí)微服務(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)控携取。對(duì)于編寫應(yīng)用程序來說一般無須關(guān)心 TCP/IP 這一層(比如通過 HTTP 協(xié)議的 RESTful 應(yīng)用),同樣使用 Service Mesh 也就無須關(guān)系服務(wù)之間的那些原來是通過應(yīng)用程序或者其他框架實(shí)現(xiàn)的事情帮孔,比如 Spring Cloud雷滋、OSS,現(xiàn)在只要交給 Service Mesh 就可以了文兢。

Service Mesh 的來龍去脈:

從最原始的主機(jī)之間直接使用網(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)和斷路器的軟件包/庫(kù)晤斩,如 Twitter 的 Finagle 和 Facebook 的 Proxygen,這時(shí)候還是集成在應(yīng)用程序內(nèi)部

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

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

Service Mesh 有如下幾個(gè)特點(diǎn):

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

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

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

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

Service Mesh 架構(gòu)圖:

目前流行的 Service Mesh 開源軟件有 Linkerd兔辅、Envoy 和 Istio,而最近 Buoyant(開源 Linkerd 的公司)又發(fā)布了基于 Kubernetes 的 Service Mesh 開源項(xiàng)目 Conduit击喂。

Service Mesh 開源項(xiàng)目簡(jiǎn)介:

Linkerdhttps://github.com/linkerd/linkerd):第一代 Service Mesh维苔,2016 年 1 月 15 日首發(fā)布,業(yè)界第一個(gè) Service Mesh 項(xiàng)目懂昂,由 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 個(gè)人開發(fā)(Lyft 工程師)褐澎,之后默默發(fā)展,版本較穩(wěn)定伐蒋。

Istiohttps://github.com/istio/istio):第二代 Service Mesh乱凿,2017 年 5 月 24 日首發(fā)布顽素,由 Google、IBM 和 Lyft 聯(lián)合開發(fā)徒蟆,只支持 Kubernetes 平臺(tái)胁出,2017 年 11 月 30 日發(fā)布 0.3 版本,開始支持非 Kubernetes 平臺(tái)段审,之后穩(wěn)定的開發(fā)和發(fā)布全蝶。

Conduithttps://github.com/runconduit/conduit):第二代 Service Mesh,2017 年 12 月 5 日首發(fā)布寺枉,由 Buoyant 公司開發(fā)(借鑒 Istio 整體架構(gòu)抑淫,部分進(jìn)行了優(yōu)化),對(duì)抗 ?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ù)更像是一個(gè)服務(wù)之間的生態(tài)账锹,專注于服務(wù)治理等方面萌业,而服務(wù)網(wǎng)格更專注于服務(wù)之間的通信,以及和 DevOps 更好的結(jié)合奸柬。

資料來源:

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

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

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

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

轉(zhuǎn)載地址:https://www.cnblogs.com/xishuai/p/microservices-and-service-mesh.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸟缕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子排抬,更是在濱河造成了極大的恐慌懂从,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹲蒲,死亡現(xiàn)場(chǎng)離奇詭異番甩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)届搁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門缘薛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窍育,“玉大人,你說我怎么就攤上這事宴胧∈ィ” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵恕齐,是天一觀的道長(zhǎng)乞娄。 經(jīng)常有香客問我,道長(zhǎng)显歧,這世上最難降的妖魔是什么仪或? 我笑而不...
    開封第一講書人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮士骤,結(jié)果婚禮上范删,老公的妹妹穿的比我還像新娘。我一直安慰自己拷肌,他們只是感情好到旦,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著廓块,像睡著了一般厢绝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上带猴,一...
    開封第一講書人閱讀 52,184評(píng)論 1 308
  • 那天昔汉,我揣著相機(jī)與錄音,去河邊找鬼拴清。 笑死靶病,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的口予。 我是一名探鬼主播娄周,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼沪停!你這毒婦竟也來了煤辨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤木张,失蹤者是張志新(化名)和其女友劉穎众辨,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舷礼,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鹃彻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了妻献。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛛株。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡团赁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谨履,到底是詐尸還是另有隱情欢摄,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布屉符,位于F島的核電站剧浸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏矗钟。R本人自食惡果不足惜唆香,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吨艇。 院中可真熱鬧躬它,春花似錦、人聲如沸东涡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)疮跑。三九已至组贺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間祖娘,已是汗流浹背失尖。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留渐苏,地道東北人掀潮。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像琼富,于是被迫代替她去往敵國(guó)和親仪吧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

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