科普帖:什么是服务网格?
戳藍字“CSDN云計算”關注我們哦!
譯|?風車云馬
文| Josh Fruhlinger
來源| InfoWorld網站
在數字化轉型的背景下,IT行業正在將大型的應用程序集成到小的、離散的微服務容器中,這些容器包含所有的服務代碼和依賴項,而這些依賴項彼此獨立且很容易地從一臺服務器轉移到另一臺服務器。
?
這種容器架構很容易在云中擴展和運行,并且可以快速構建獨立的微服務。然而隨著應用程序變得越來越大,并且同一服務的多個實例同時運行,這些微服務之間的通信變得越來越復雜,在此基礎上服務網格是一種新興的機構形態,旨在以一種減少管理和編程開銷的方式動態連接這些微服務。
?
正如Red Hat(紅帽)所描述的,“服務網格是一種控制不同應用程序共享數據的方法。”實際上,這聽起來非常像大多數開發人員所熟知的客戶端-服務器應用程序中的中間件。
?
服務網格的獨特之處在于它是為適應分布式微服務環境而構建的。在由微服務構建的大規模應用程序中,任何給定服務可能有多個實例,這些實例運行在各種本地或云服務器上。這顯然使單個微服務很難找到它們需要與之通信的其他服務,而服務網格會根據時間順序自動地負責連接服務,這樣就“解放”了開發人員和單個微服務。
?
我們可以將服務網格看作軟件定義網絡(SDN)。正如SDN創建一個抽象層,使網絡管理員不必處理物理網絡連接一樣,服務網格將應用程序的底層基礎設施與所交互的抽象體系結構解耦。
?
圖片來源網絡
當開發人員開始處理龐大的分布式體系結構時,服務網格的概念就自然而然地產生了。該領域的第一個項目是Linkerd,它是Twitter內部項目的一個分支;Istio則是另一個受歡迎的項目,主要由企業支持,起源于Lyft。
?
解決“服務網格”管理微服務的通信問題有許多不同的方法。Aspen Mesh的Andrew Jenkins提出了三種可能的方式,即服務網格創建的通信層可能位于:
?
在每個微服務導入的庫中
在向特定容器提供服務的節點代理程序中
在與應用程序容器一起運行的sidecar容器中
基于sidecar的模式是目前最流行的服務網格模式之一,甚至在某種程度上它已經成為服務網格的同義詞。嚴格地說它們并不等同,不過sidecar方法已經得到了如此多的關注,這就是我們將要詳細討論的架構。
?
那在應用程序容器中運行一個sidecar容器是什么意思?紅帽(Red Hat )有一個很好的解釋。這種類型的服務網格中,每個微服務容器都有與之對應的另一個代理容器,服務到服務通信所需的所有邏輯都從微服務中抽象出來,放到sidecar中。
這看起來可能很復雜,畢竟實際使應用程序中的容器數量增加了一倍,但是這種設計模式成為簡化分布式應用程序的關鍵。它通過將所有網絡和通信代碼放到一個單獨的容器中,將其作為基礎設施的一部分,并使開發人員實現應用程序時不必考慮這一點。
?
從本質上說,這個微服務只需要專注于其業務邏輯,不需要知道如何在其運行的環境中與所有其他服務通信。它只要知道如何與sidecar通信,sidecar負責其余的工作就可以了。
?
那么目前有哪些可用的服務網格呢?據了解市面上沒有現成的商業產品,大多數服務網格都是開源項目,需要一些技巧才能實現。最著名的有:
?
Linkerd——于2016年發布,是最古老的產品,最早是從Twitter開發的一個庫中分離出來的。該領域的一位重量級人物Conduit引入了Linkerd項目,后來成為Linkerd 2.0的基礎。
Envoy——Lyft創建的Envoy占領了服務網格的“data plane”(數據區)。為了提供一個完整的服務網格,它需要與一個“control plane”(控制區)相匹配,比如Istio……
Istio——由Lyft、IBM和谷歌合作開發,Istio是一個服務于Envoy等代理的控制計劃。雖然Istio和Envoy是默認的一對,但是它們都可以與其他平臺配對。
HashiCorp Consul—— Consul 1.2中引入了一個名為Connect的特性,它向HashiCorp的分布式系統添加了服務加密和身份授權,用于服務搜索和配置,從而將其轉變為一個完整的服務網格。
?
服務網格 VS 負載平衡
?
服務網格提供的一個關鍵特性是負載平衡。我們通常認為負載平衡是一種網絡功能,即為了防止任何一臺服務器或網絡鏈接流量過大,因此需要相應地路由數據包。正如Twain Taylor所描述的,服務網格類似于應用程序層的軟件定義的網絡。
?
本質上,服務網格的工作之一是跟蹤分布在基礎設施中的各種微服務的實例。它可能會輪詢,看看它們在做什么;或者跟蹤哪些實例對服務請求響應較慢,然后將后續請求發送給其他實例。
?
服務網格會為網絡路由做類似的工作,注意到消息到達目的地花費的時間過長,就采取其他路由進行補償。這些延遲可能是由于底層硬件的問題,或者僅僅是由服務請求過載或處理能力不足造成的。重要的是,服務網格可以找到相同服務的另一個實例并將其路由到另一個實例,從而最有效地利用整個應用程序的容量。
?
服務網格 VS Kubernetes
?
如果對基于容器的體系結構比較熟悉,那么就一定知道Kubernetes在這方面的地位。作為流行的開源容器編制平臺,Kubernetes不就是管理容器之間的通信嗎? 正如Kublr團隊指出的,用戶可以將Kubernetes的服務資源看作是一種非常基本的服務網格,因為它提供服務發現和請求的輪循;但是服務網格提供了更多功能,例如管理安全策略和加密、“斷路”等以限制對慢響應實例的請求、負載平衡等。
毋庸置疑大多數服務網格實際上都需要像Kubernetes這樣的編排系統,提供擴展功能而不是替代Kubernetes。
?
服務網格 VS API網關
?
每個微服務將提供一個應用程序編程接口(API),作為其他服務與其通信的方式,這引發了服務網格與其他更傳統的API網關之間的差異問題。正如IBM所解釋的,API網關位于一組微服務和“外部”世界之間,根據需要路由服務請求,以便請求者避免知道它正在處理的微服務應用程序;另一方面服務網格在微服務應用程序“內部”協調請求,各個組件完全了解它們的環境。
?
還有一種解釋,正如Justin Warren在《福布斯》中所寫的,服務網格用于集群內的東西流量,而API網關用于集群內外的南北流量。但是整個服務網格的概念還處于早期階段,而且還在不斷變化之中。許多服務網格,包括Linkerd和Istio現在也提供南北功能。
?
究竟哪種服務網格更適合?目前還沒有辦法給出定論。但值得注意的是,以上提出的所有產品都已經在大型場合和高標準的環境中得到了驗證。其中Linkerd和Istio擁有最廣泛的特性集,都在快速發展;另外在這個新的領域,新的競爭者隨時可能出現。
福利掃描添加小編微信,備注“姓名+公司職位”,加入【云計算學習交流群】,和志同道合的朋友們共同打卡學習!
推薦閱讀:
- 漫畫:程序員戰力圖鑒
- 我們到底該如何看待6G?
- 漫畫:什么是插入排序?
- 從七個方面,面試大廠高級工程師
- 為什么說邊緣計算的發展比5G更重要?
記一道字節跳動的算法面試題? ? ??? ? ? ? ? ? ? ? ? ? ? ? ??
總結
以上是生活随笔為你收集整理的科普帖:什么是服务网格?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么样bios解决黑屏 BIOS如何解决
- 下一篇: 恩施水上浮桥在哪里