微服务架构之「 下一代微服务 Service Mesh 」
點(diǎn)擊上方“朱小廝的博客”,選擇“設(shè)為星標(biāo)”
做積極的人,而不是積極廢人
Service Mesh 被大家稱為下一代的微服務(wù),是微服務(wù)領(lǐng)域的一顆新星,被大家討論的非常多。
我在大家的討論中,還看到有人說(shuō) “目前的微服務(wù)架構(gòu)我都沒(méi)學(xué)會(huì)呢,現(xiàn)在又來(lái)一個(gè)下一代微服務(wù),真學(xué)不動(dòng)了”。
哈哈,沒(méi)辦法,互聯(lián)網(wǎng)技術(shù)就是發(fā)展得這么快,這些技術(shù)其實(shí)也都是由于大家所在的公司業(yè)務(wù)規(guī)模和復(fù)雜度變大以后所推動(dòng)出來(lái)的。
最開始 Service Mesh 的概念是由Buoyant公司在2016年提出。然后在隨后幾年,業(yè)內(nèi)就圍繞著 Service Mesh 思想探索出了各種實(shí)現(xiàn),其中包括以 Linkerd 為代表的第一代 Service Mesh,隨后又有以 Istio 為代表的第二代 Service Mesh。
在國(guó)內(nèi)的一些大廠里,例如 阿里、新浪 等,也都有基于Service Mesh思想的自研實(shí)現(xiàn)。既然 Service Mesh 這么火,那它到底是什么呢?又該如何去應(yīng)用呢?
一、什么是「 Service Mesh 」?
Service Mesh 中文稱為 服務(wù)網(wǎng)格,為啥,因?yàn)樗牟渴饒D看起來(lái)就像一個(gè)網(wǎng)格,如下圖:
Service Mesh 就是一個(gè)基礎(chǔ)設(shè)施層,它是用于處理微服務(wù)中,服務(wù)與服務(wù)之間通信的一種技術(shù)。在 Service Mesh 的實(shí)踐方案中,它是由一系列輕量級(jí)的網(wǎng)絡(luò)代理組成的,并且這些網(wǎng)絡(luò)代理會(huì)與咱們的應(yīng)用部署在一起,特別適用于云原生應(yīng)用,因?yàn)?Service Mesh 可以做到應(yīng)用是無(wú)感知的。
(上圖的綠色小塊可以理解成是咱們微服務(wù)的應(yīng)用,藍(lán)色小塊可以理解成 Service Mesh 的輕量級(jí)網(wǎng)絡(luò)代理)
有了 Service Mesh 之后,微服務(wù)中,服務(wù)與服務(wù)之間的通信就是靠這些 網(wǎng)絡(luò)代理模塊 來(lái)保障。
那我們?yōu)樯缎枰捎?Service Mesh 呢,Service Mesh 幫我們解決了目前微服務(wù)之間調(diào)用的啥痛點(diǎn)了嗎?
二、為什么需要「 Service Mesh 」?
在傳統(tǒng)微服務(wù)架構(gòu)中,隨著業(yè)務(wù)越來(lái)越大,拆分的服務(wù)實(shí)例也越來(lái)越多,那么各個(gè)服務(wù)之間的依賴就變成了非常復(fù)雜的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),可能就類似于這樣了:
哈哈,暈圖了、暈圖了!
在如此復(fù)雜的分布式部署結(jié)構(gòu)下,咱們微服務(wù)中服務(wù)依賴調(diào)用和數(shù)據(jù)傳輸所面臨的問(wèn)題也成倍增加,極大的提高了服務(wù)治理的難度。
同時(shí),由于 容器化技術(shù) 的成熟和規(guī)模化,微服務(wù)都會(huì)采用容器化,并朝著 云原生應(yīng)用 的方向發(fā)展。而傳統(tǒng)的微服務(wù)架構(gòu)中,雖然也有服務(wù)治理的組件,但是這些組件大多需要在應(yīng)用代碼里進(jìn)行集成,這是不符合 云原生應(yīng)用 的思想的。因此,大家急需一個(gè)標(biāo)準(zhǔn)化,能高效部署和運(yùn)維的微服務(wù)體系方案。
因此,Service Mesh 就出現(xiàn)了,Service Mesh 就是用來(lái)解決這些痛點(diǎn)的,設(shè)計(jì)的目的就是用來(lái)解決微服務(wù)架構(gòu)中 服務(wù)間可靠調(diào)用、服務(wù)治理 等問(wèn)題。
下面就拿第一代 Service Mesh 產(chǎn)品 Linkerd 舉例說(shuō)明:
圖中可以看到,每一個(gè)服務(wù)實(shí)例(Service)的部署都會(huì)同時(shí)部署一個(gè) Linkerd 實(shí)例,并且服務(wù)之間的調(diào)用并不是直接進(jìn)行的,而是先經(jīng)過(guò) Linkerd 模塊去代理轉(zhuǎn)發(fā)完成的。
例如:Service A 需要調(diào)用 Service B 的時(shí)候,Service A 是把請(qǐng)求發(fā)給與它一起部署的 Linkerd-1 的,然后這個(gè) Linkerd-1 將請(qǐng)求發(fā)給 Service B 所部署模塊的 Linkerd-2,然后 ?Linkerd-2 再將請(qǐng)求內(nèi)容轉(zhuǎn)發(fā)給 Service B 處理。因此,在整個(gè)流程中,Service A ?和 Service B 只需要關(guān)注自己的業(yè)務(wù)邏輯即可,無(wú)需關(guān)注任何服務(wù)框架的功能,這些服務(wù)框架的功能都是由Linkerd 去實(shí)現(xiàn),Linkerd 要做 負(fù)載均衡、熔斷、限流、監(jiān)控等等。
下面我們具體來(lái)看看 Service Mesh 的原理。
三、「 Service Mesh 」的原理與應(yīng)用?
Service Mesh 的核心其實(shí)就2個(gè)模塊:SideCar 與 ?Control Plane,如圖:
搞懂了 SideCar 與 ?Control Plane 也就對(duì) Service Mesh 的基礎(chǔ)思想原理明白了。
SideCar:
上面說(shuō)到的與服務(wù)部署在一起的輕量級(jí)網(wǎng)絡(luò)代理也就是指SideCar,它的作用就是實(shí)現(xiàn)服務(wù)框架的各項(xiàng)功能,這樣,就可以讓服務(wù)(Service A 或 Service B)回歸業(yè)務(wù)本質(zhì)。
傳統(tǒng)的微服務(wù)架構(gòu)中,各種服務(wù)框架的功能(例如:服務(wù)發(fā)現(xiàn)、負(fù)載均衡、限流熔斷等)都代碼邏輯或多或少的都需要耦合到服務(wù)實(shí)例的代碼里,給服務(wù)實(shí)例增加了很多無(wú)關(guān)業(yè)務(wù)的代碼,也帶來(lái)了復(fù)雜度。
有了SideCar之后,服務(wù)節(jié)點(diǎn)只做業(yè)務(wù)邏輯自身的功能,服務(wù)之間的調(diào)用交給了SideCar,由SideCar去注冊(cè)服務(wù)、去做服務(wù)發(fā)現(xiàn)、去做請(qǐng)求路由、去實(shí)現(xiàn)熔斷限流、去做日志統(tǒng)計(jì)。
那么在這種新的微服務(wù)架構(gòu)中,所有的 SideCar 組成在一起,其實(shí)就是一個(gè)服務(wù)網(wǎng)格了。那么這個(gè)大型的服務(wù)網(wǎng)格并不是完全自治的,它還需要一個(gè)統(tǒng)一的控制節(jié)點(diǎn),也就是 Control Plane。
Control Plane:
Control Plane 是用來(lái)從全局的角度上控制 SideCar 的。比如 它負(fù)責(zé)所有 SideCar 的注冊(cè),它存儲(chǔ)一個(gè)統(tǒng)一的路由表,幫助各個(gè) SideCar 進(jìn)行負(fù)載均衡和請(qǐng)求調(diào)度。它收集所有 SideCar 的監(jiān)控信息和日志數(shù)據(jù)。它就相當(dāng)于 Service Mesh架構(gòu) 的大腦。Control Plane 控制著 SideCar 來(lái)實(shí)現(xiàn)服務(wù)治理的各項(xiàng)功能。
在文章的最開始提到過(guò),以 Linkerd 為代表的被稱為第一代 Service Mesh,而以 Istio 為代表的稱為了第二代 Service Mesh。主要的不同就是 Istio 引入了 Control Plane 的概念,可以通過(guò) ?Control Plane 來(lái)對(duì)服務(wù)進(jìn)行一些精細(xì)化控制,所以 Istio 也被稱為是實(shí)際上的 Service Mesh 標(biāo)準(zhǔn)產(chǎn)品。
以上,就是我對(duì)微服務(wù)架構(gòu)中「 Service Mesh」的一些思考,你是怎么看的呢?
想知道更多?掃描下面的二維碼關(guān)注我
限時(shí)優(yōu)惠:極客時(shí)間課程《Elasticsearch核心技術(shù)與實(shí)戰(zhàn)》總結(jié)
以上是生活随笔為你收集整理的微服务架构之「 下一代微服务 Service Mesh 」的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Kafka主题中的分区数越多吞吐量就越高
- 下一篇: IntelliJ IDEA 2019从入