和大部分吃瓜碼農一樣,剛開始小碼農對此也是一頭霧水。什么是Service Mesh?它與SpringCloud相比有什么優(yōu)勢呢?在接下來的內容中,就和大家一起初步了解下Service Mesh吧!
微服務的核心問題
在了解Service Mesh之前,我們先來討論下這樣一個問題:“微服務架構的核心技術問題是什么?“。
我們知道在將整個軟件系統(tǒng)架構升級為微服務模式以后,服務(這里是指獨立對外提供服務的進程實體)的規(guī)模會越來越大,少則幾個到十幾個,多則上百個。而這,還只是從應用拆分本身的數量上看的,在實際的生產部署中,單個微服務進程也不會以單節(jié)點的方式部署,而多是以集群的方式進行部署。
此時自然就會產生兩個核心的問題:一是服務發(fā)現,即服務的消費方(Consumer)如何發(fā)現服務的提供方(Provider)的問 題? **二是負載均衡,即我們的微服務在以集群方式部署后,服務的消費方如何以某種負載均衡策略訪問集群中的微服務實例?
**
在回答以上兩個問題時,我們先來回顧下目前業(yè)界經歷過的三種服務發(fā)現及負載模式:
模式一:傳統(tǒng)集中式代理
這種模式在微服務架構模式興起之前,是業(yè)界非常主流的模式,目前大部分公司的架構模型依然采用的是這種模式。
在集中式處理方式中,應用系統(tǒng)根據各自需要進行模塊化設計與拆分,雖然呈現了一定分布式的特性,但是在服務間調用時,仍然需要通過F5或Nginx這類軟硬件負載均衡器來進行通信,從而保證高可用。
并且這種方式的服務注冊更多的是一種 依賴于運維人員、手工配置、明確調用的方式 。在實踐中一般是通過DNS域名解析服務的方式配合實現,通過在Nginx或F5上建立服務域名和服務IP/端口之間的映射關系,來實現消費端通過請求服務域名,域名指向代理(Nginx/F5),代理通過解析目標IP地址并最終進行負載均衡和服務調用。
這種架構模式,目前依然是最為普遍的一種方式,即便很多互聯(lián)網公司最終會轉向微服務時代的模式二、模式三,但是在其初創(chuàng)期仍然會選擇這種方式進行過渡。
模式二:客戶端嵌入式代理
這種方式就是目前以SpringCloud框架為代表的微服務架構模式所使用的方式,包括在此之前比較著名的Dubbo框架采用的也這樣的方式。在這種模式下, 服務發(fā)現和負載均衡邏輯都是以本地庫的方式嵌在具體的應用中 。
這種模式一般需要獨立的服務中心注冊組件配合,服務啟動時自動注冊到服務中心并定期上報心跳,客戶端代理則通過注冊中心進行服務發(fā)現并進行負載均衡。
在之前的文章中(推薦閱讀有鏈接)我們介紹的基于SpringCloud的微服務架構就是通過采用Consul作為注冊中心, 客戶端通過集成SpringCloud提供的相關本地組件(@EnableDiscoveryClient),進行服務調用時通過FeignClient(底層采用Ribbon)實現了服務的發(fā)現與負載均衡 。
客戶端嵌入的模式,在應用本身嵌入了服務發(fā)現&負載均衡的邏輯,雖然像SpringCloud這樣的框架提供了很方便快捷的開發(fā)集成,但因為應用本身的業(yè)務邏輯與底層通信邏輯耦合在了一起,從架構角度看會顯得讓人有點不是很爽的感覺,當然這種缺陷,也在某些層面的確限制了很多的能力,在我們具體討論Service Mesh時再和大家討論。
從目前的實踐看,因為微服務架構的概念最近幾年才開始流行,加上SpringCloud的熱度,以及之前Dubbo等框架的助推,目前很多互聯(lián)網公司的微服務架構體系都是基于這種模式進行的。作者所在的公司,目前也主要是基于SpringCloud框架進行的一些實踐,當然,因為最近Service Mesh的火熱,也在逐步開始進行新的架構嘗試。
在這里,還需要特別澄清一下,這種模式也并非完全是對模式一的替代,這種架構方式的 主要關注點在于內部服務的治理 ,對于需要通過互聯(lián)網訪問的服務,我們依然需要通過F5/Nginx之類軟硬件負載均衡器進行負載均衡,例如在這種模式下 ApiGateway在向外提供公網服務時,仍然是通過DNS+Nginx進行的擴展 。
模式三:獨立式進程代理
這種模式其實上面兩種模式的一種折中方案,用于實現服務發(fā)現和負載均衡的代理(Proxy)既不是獨立集中部署(像F5/Nginx),也不是嵌入在客戶應用程序中(像Ribbon)。而是 作為一個獨立的進程部署在每一臺主機上,主機上的多個消費者(Consumer)應用可以共用這個代理來實現服務發(fā)現和負載均衡 。
這種模式相比較于模式二而言,也需要獨立的服務注冊中心組件配合。只是將負責服務發(fā)現、負載均衡、熔斷限流等相關邏輯從原有的消費客戶端進程拆分到單獨的代理進程中了,由這個獨立部署的代理來負責服務發(fā)現、路由分流(負載均衡)、熔斷限流、安全控制、監(jiān)控等功能。
**Service Mesh(服務網格)
**
在了解完以上三種模式后,我們再來一起探討下什么是Service Mesh?Service Mesh又稱為 服務網格 ,本質上就是我們前面介紹過的模式三。之所為稱之為服務網格是因為按照模式三的結構,每個主機上同時運行了業(yè)務邏輯代碼和代理,此時這個代理被形象地稱之為 SideCar (業(yè)務代碼進程相當于主駕駛,共享一個代理相當于邊車),服務之間通過SideCar發(fā)現和調用目標服務,從而形成服務之間的一種網絡狀依賴關系,然后通過獨立部署的一種稱之為 控制平面(ControlPlane) 的獨立組件來集中配置這種依賴調用關系以及進行路由流量調撥等操作,如果此時我們把主機和業(yè)務邏輯從視覺圖上剝離,就會出現一種網絡狀的架構,服務網格由此得名。
在新一代的Service Mesh架構中服務消費方和提供方的主機(或容器)兩邊都會部署代理SideCar,此時SideCar與服務所在的主機又稱之為 數據平面(DataPlane), 與我們前面說到的用于依賴關系配置和流量調撥操作的控制平面相對應**。**
Istio
通過上述的內容,我們從概念上應該是大概理解了什么是Service Mesh。而具體要落地Service Mesh只有概念是遠遠不夠的,相反,如果沒有一種可落地執(zhí)行的開源框架,這個概念也不會這么快被大家所接受。
Istio就是目前受Google/IBM 等大廠支持和推進的一個 ServiceMesh開源框架組合。它解決了開發(fā)人員和運維人員在整體應用程序向分布式微服務體系結構過渡時所面臨的挑戰(zhàn)。我們知道無論是基于SpringCloud的微服務架構體系還是目前我們說到的Service Mesh,隨著微服務規(guī)模的增長會帶來很多的復雜性,如服務發(fā)現、負載均衡、故障恢復、監(jiān)控,甚至A/B測試、訪問控制等。而要對涉及這些問題的微服務架構體系進行管理,如果沒有成熟的組件的話,就會需要耗費很多的精力去開發(fā)一些運維工具,而這個成本是非常高的。
而Istio則提供了一個完整的解決方案來滿足微服務應用程序的各種需求。下圖是Istio官網(https://istio.io)所展示的關于Istio的一張架構圖:
在這張架構圖中Istio服務網格在邏輯上還是分為數據平面和 控制平面 。數據平面中的SideCar代理是由一款叫做Envoy的組件來承擔的,它是一款用C++開發(fā)的高性能代理,用于協(xié)調服務網格中所有服務的入站和出站流量。
Envoy提供了很多內在的特性如:
- 動態(tài)服務發(fā)現
- 負載均衡
- TLS終止
- HTTP/2和gRPC代理
- 熔斷器
- 健康檢查
- 基于百分比的流量分割
- 故障注入
- 豐富的指標
從上面的特性上看實際上Envoy已經提供了很完備的SideCar的功能,只是由于其采用的是C++開發(fā)的,目前在國內的落地實踐中會有不同的取舍和選擇,如螞蟻金服內部在實踐的過程中就沒有使用Istio默認集成的Envoy,而是用 Golang 開發(fā)了新的 Sidecar,已經 開源的SOFAMosn ,來替代 Envoy。
在Istio控制平面中的各個組件的作用如下:
- Mixer :負責收集代理上采集的度量數據,進行集中監(jiān)控;
- Pilot :主要為SideCar提供服務發(fā)現、智能路由(如A/B測試)、彈性(超時、重試、斷路器)的流量管理功能;
-
Citadel :負責安全控制數據的管理和下發(fā);
以上就是關于Istio及其組件的一些介紹,具體如何使用Istio進行服務開發(fā)及安裝操作,大家可以看看Istio的官網 , 另外需要強調的是kubernetes是目前 Isito 主力支持的容器云環(huán)境。
Service Mesh的優(yōu)勢
事實上Service Mesh這種架構模式并不新鮮,很早就有公司進行過嘗試,之所以最近又火起來的原因,主要還是因為模式一、模式二的確有一些固有的缺陷,模式一相對比較重,有 單點問題和性能問題 。
而模式二則有客戶端復雜,支持多語言困難,路由、熔斷、限流等服務操作無法集中治理的問題。而Service Mesh則正好彌補了二者的不足,它是純分布式的,沒有單點的問題,性能也比較優(yōu)秀并且與開發(fā)語言無關,還可以集中進行治理。
此外,隨著微服務化、多語言和容器化的發(fā)展趨勢,很多公司也迫切需要一種 輕量級的服務發(fā)現機制 ,加上一些大廠如Google/IBM的助推(如kubernetes與Docker的容器之爭),正好Service Mesh迎合了這種趨勢,所以才有今天火熱的局面。
實踐案例
目前國內如阿里、微博、摩拜等公司都在積極探索Service Mesh的架構模式,只是在實踐中一般具備一定開發(fā)能力的公司都會選擇基于Istio進行二次開發(fā),如目前阿里開源的SOFAMesh/SOFAMosn兩個項目。
而對于開發(fā)及運維能力不強的公司,是否有必要將自己的架構體系立刻升級為Service Mesh模式還是需要好好考慮考慮,因為畢竟這會帶來很大的運維成本。
-
軟件系統(tǒng)
+關注
關注
0文章
61瀏覽量
9478 -
SmartMesh
+關注
關注
1文章
29瀏覽量
15115 -
微服務架構
+關注
關注
0文章
23瀏覽量
2948
發(fā)布評論請先 登錄
相關推薦
評論