Service Mesh 是什么,我们为什么需要它?
Service Mesh 是一個專門使服務與服務之間的通信變得安全、快速和可靠的的基礎(chǔ)設(shè)施。如果你正在在構(gòu)建一個云原生( Cloud Native )應用,那么你一定需要 Service Mesh 。
在過去的一年中, Service Mesh 成為了云原生技術(shù)棧的關(guān)鍵組件。像 PayPal , Ticketmaster 和 Credit Karma 這樣的大廠,已經(jīng)將 Service Mesh 加入到他們的應用中。并且在 2017 年 1 月,開源的 Service Mesh 軟件 Linkerd 加入云原生基金會( CNCF ),成為云原生基金會(CNCF)的官方項目。但是什么是真正的 Service Mesh?它又為何突然變的如此重要?
在這篇文章,我會講解 Service Mesh 的定義,并通過應用服務架構(gòu)過去十年的發(fā)展追溯其起源。并將 Service Mesh 與其他相似的概念,包括 API 網(wǎng)關(guān),邊緣代理以及 ESB (enterprise service bus)進行區(qū)分。最終,將會描述 Service Mesh 的發(fā)展方向,以及隨著云原生概念的普及,Service Mesh 發(fā)生的變化。
什么是 Service Mesh
Service Mesh 這個服務網(wǎng)絡(luò)專注于處理服務和服務間的通訊。其主要負責構(gòu)造一個穩(wěn)定可靠的服務通訊的基礎(chǔ)設(shè)施,并讓整個架構(gòu)更為先進和 Cloud Native。在實踐中,Service Mesh 基本來說是一組輕量級的服務代理和應用邏輯的服務在一起,并且對于應用服務是透明的。
Service Mesh 作為獨立層的概念與云原生應用的興起有關(guān)。在云原生模式,單個應用可能有數(shù)百個服務組成,每個服務又可能有上千個實例,而每個實例都有可能被像 Kubernetes 這樣的服務調(diào)度器不斷調(diào)度從而不斷變化狀態(tài)。而這些復雜的通信又普遍是服務運行時行為的一部分,這時確保端到端的通信的性能和可靠性就變的至關(guān)重要。
Service Mesh 就是一個網(wǎng)絡(luò)模型嗎?
Service Mesh 是一個位于 TCP/IP 上的抽象層的網(wǎng)絡(luò)模型。它假定底層 L3/L4 網(wǎng)絡(luò)存在并且能夠從一點向另一點傳輸數(shù)據(jù)。(它還假定這個網(wǎng)絡(luò)和環(huán)境的其他方面一樣不可靠,所以 Service Mesh 也必須能夠處理網(wǎng)絡(luò)故障。)
在某些方面,Service Mesh 就像是網(wǎng)絡(luò)七層模型中的第四層 TCP 協(xié)議。其把底層的那些非常難控制的網(wǎng)絡(luò)通訊方面的控制面的東西都管了(比如:丟包重傳、擁塞控制、流量控制),而更為上面的應用層的協(xié)議,只需要關(guān)心自己業(yè)務應用層上的事了。
與 TCP 不同的是, Service Mesh 想要達成的目的不僅僅是正常的網(wǎng)絡(luò)通訊。它為應用提供了統(tǒng)一的,可視化的以及可控制的控制平面。Service Mesh 是要將服務間的通信從無法發(fā)現(xiàn)和控制的基礎(chǔ)設(shè)施中分離出來,并對其進行監(jiān)控、管理和控制。
Service Mesh 實際上做了什么?
在云原生應用中傳遞可靠的請求是十分復雜的。而?Linkerd?提供了服務熔斷、重試、負載均衡、熔斷降級等功能,通過其強大的功能來管理那些必須運行在復雜環(huán)境中的服務。
這里列舉一個通過 Linkerd 向服務發(fā)出請求的簡單流程:
通過 Linkerd 的動態(tài)路由規(guī)則來確定打算連接哪個服務。這個請求是要路由到生產(chǎn)環(huán)境還是演示環(huán)境?是請求本地數(shù)據(jù)中心的服務還是云上的服務?是請求正在測試的最新版的服務還是已經(jīng)在生產(chǎn)中經(jīng)過驗證的老版本?所有的這些路由規(guī)則都是動態(tài)配置的,可以全局應用也可以部分應用。
找到正確的目的服務后,Linkerd 從一個或幾個相關(guān)的服務發(fā)現(xiàn)端點檢索實例池。如果這些信息與 Linkerd 的服務發(fā)現(xiàn)信息不同, Linkerd 會決定信任哪些信息來源。
Linkerd 會根據(jù)觀察到的最近的響應延遲來選擇速度最快的實例。
Linkerd 發(fā)送請求給這個實例,記錄延遲和響應類型。
如果這個實例掛了、無響應或者無法處理請求, Linkerd 會再另一個實例上重試這個請求(但只有在請求是冪等的時候)。
如果一個實例一直請求失敗, Linkerd 會將其移出定時重試的負載均衡池。
如果請求超時, Linkerd 會主動將請求失效,而不是進一步重試從而增加負載。
Linkerd 會記錄指標和分布式的追蹤上述行為的各個方面,將他們保存在集中的指標系統(tǒng)中。
以上只是簡化版的介紹, Linkerd 還可以啟動和重試 TLS ,執(zhí)行協(xié)議升級,動態(tài)切換流量,甚至在故障之后數(shù)據(jù)中心的切換。
值得注意的是,這些功能旨在為每個實例和應用程序提供彈性伸縮。而大規(guī)模的分布式系統(tǒng)(無論是如何構(gòu)建的)都有一個共同特點:都會因為許多小的故障,而升級為全系統(tǒng)災難性的故障。Service Mesh 則被設(shè)計為通過快速的失效和減少負載來保護整個系統(tǒng)免受這樣災難性的故障。
為什么 Service Mesh 是必要的?
Service Mesh 本質(zhì)上并不是什么新技術(shù),而是功能所在位置的轉(zhuǎn)變。Web 應用需要管理復雜的服務通信,Service Mesh 模式的起源和演變過程可以追溯到15年前。
參考2000年左右中型 Web 應用的典型三層架構(gòu),在這個架構(gòu)中,應用被分為三層:應用邏輯、Web 服務邏輯、存儲邏輯。層之間的通信雖然復雜,但是畢竟范圍有限,最多只有 2 跳。這里并不是 “Mesh” 的,但在每層中處理跳轉(zhuǎn)的代碼是存在通信邏輯的。
當這種架構(gòu)向更大規(guī)模發(fā)展的時候,這種通信方式就無以為繼了。像 Google、Netflix 和 Twitte ,在面臨巨大的請求流量的時候,他們實現(xiàn)了云原生應用的前身:應用被分割成了許多服務(現(xiàn)在稱作“微服務”),這些服務組成了一種網(wǎng)格結(jié)構(gòu)。在這些系統(tǒng)中,通用通信層突然興起,表現(xiàn)為“胖客戶端”的形式——Twitter 的 Finagle,Netflix 的 Hystrix 和 Google 的 Stubby 都是很典型的例子。
現(xiàn)在看來,像 Finagle 、Stubby 和 Hystrix 這樣的庫就是最早的 Service Mesh。雖然它們是為特定環(huán)境、語言和框架定制了,但都是作為基礎(chǔ)設(shè)施專門用于管理服務間的通信,并(在 Finagle 和 Hystrix 開源的情況下)在其他公司的應用中被使用。
這三個組件都有應用自適應機制,以便在負載中進行拓展,并處理在云環(huán)境中的部分故障。但是對于數(shù)百個服務或數(shù)千個實例,以及不時需要重新調(diào)度的業(yè)務層實例,單個請求通過的調(diào)用鏈可能變的非常復雜,而且服務可能由不同的語言編寫,這時基于庫的解決方案可能就不再適用了。
服務通信的復雜性和重要性導致我們急需一個專門的基礎(chǔ)設(shè)施層來處理服務間的通信,該層需要與業(yè)務代碼解耦,并且具有捕獲底層環(huán)境的動態(tài)機制。這就是 Service Mesh。
Service Mesh 的未來
Service Mesh 在云生態(tài)下迅速的成長,并且有著令人激動的未來等待探索。對無服務器計算(Serverless, 例如 Amazon 的?Lambda)適用的 Service Mesh 網(wǎng)絡(luò)模型,在云生態(tài)系統(tǒng)中角色的自然拓展。Service Mesh 可能成為服務身份和訪問策略這些在云原生領(lǐng)域還是比較新的技術(shù)的基礎(chǔ)。最后,Service Mesh,如之前的TCP / IP,將推進加入到底層的基礎(chǔ)架構(gòu)中。就像 Linkerd 是由像 Finagle 這樣的系統(tǒng)發(fā)展而來,Service Mesh 將作為單獨的用戶空間代理添加到云原生技術(shù)棧中繼續(xù)發(fā)展。
結(jié)語
Service Mesh 是云原生技術(shù)棧的關(guān)鍵技術(shù)。Linkerd 成立僅 1 年就成為了云原生基金會(CNCF)的一部分,擁有蓬勃發(fā)展的社區(qū)和貢獻者。使用者從像 Monzo 這樣顛覆英國銀行業(yè)的創(chuàng)業(yè)公司,到像 PayPal、 Ticketmaster 和 Credit Karma 這樣的互聯(lián)網(wǎng)大廠,再到像 Houghton Mifflin Harcourt 這樣經(jīng)營了數(shù)百年的公司。
使用者和貢獻者每天都在 Linkerd 社區(qū)展示 Service Mesh 創(chuàng)造的價值。我們將致力于打造這一令人驚嘆的產(chǎn)品,并繼續(xù)發(fā)展壯大我們的社區(qū)。
原文鏈接:https://buoyant.io/2017/04/25/whats-a-service-mesh-and-why-do-i-need-one/
總結(jié)
以上是生活随笔為你收集整理的Service Mesh 是什么,我们为什么需要它?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 行业观察丨激荡二十年——货代软件1999
- 下一篇: 未来我们对微服务和 Serverless