0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Service Mesh是什么?

jf_78858299 ? 來源:無敵碼農 ? 作者:無敵碼農 ? 2023-03-23 14:07 ? 次閱讀

和大部分吃瓜碼農一樣,剛開始小碼農對此也是一頭霧水。什么是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模式還是需要好好考慮考慮,因為畢竟這會帶來很大的運維成本。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 軟件系統(tǒng)

    關注

    0

    文章

    61

    瀏覽量

    9478
  • SmartMesh
    +關注

    關注

    1

    文章

    29

    瀏覽量

    15115
  • 微服務架構
    +關注

    關注

    0

    文章

    23

    瀏覽量

    2948
收藏 人收藏

    評論

    相關推薦

    什么是Service Mesh?Service Mesh的演化形態(tài)

    Service Mesh作為下一代微服務技術的代名詞,初出茅廬卻深得人心一鳴驚人,大有一統(tǒng)微服務時代的趨勢。
    發(fā)表于 03-04 11:01 ?1589次閱讀
    什么是<b class='flag-5'>Service</b> <b class='flag-5'>Mesh</b>?<b class='flag-5'>Service</b> <b class='flag-5'>Mesh</b>的演化形態(tài)

    淺談Service Mesh體系中的Envoy

    摘要: 提到Envoy就不得不提Service Mesh,說到Service Mesh就一定要談及微服務了,那么我們就先放下Envoy,簡單了解下微服務、
    發(fā)表于 07-12 17:25

    如何在Arm上利用Istio搭建一個基于Kubernetes的Service Mesh平臺

    應用拆分成多個微服務,實現各個微服務之間的松耦合,高內聚,如何實現各個微服務的通信,同步等。Service Mesh技術很好的解決了這些問題,Service Mesh通過代理技術,使各
    發(fā)表于 03-30 10:59

    搭建基于Arm的kubernetes+Istio開發(fā)環(huán)境

    1、如何在Arm平臺上利用Istio搭建一個基于Kubernetes的Service Mesh平臺隨著云計算的普及,越來越多的公司、組織及個人開發(fā)者開始將業(yè)務轉移至云服務提供商(如Ali,GKE
    發(fā)表于 07-12 15:39

    Service Mesh服務網格新生代

    服務網格 Service Mesh,服務網格,也有人翻譯為服務嚙合層。這貌似是今年才出來的新名詞?在2017年之前沒有聽過,雖然類似的產品已經存在挺長時間。 什么是Service Mesh
    發(fā)表于 09-27 11:15 ?0次下載
    <b class='flag-5'>Service</b> <b class='flag-5'>Mesh</b>服務網格新生代

    阿里云Kubernetes Service Mesh實踐進行時(1): Istio初體驗

    or nottrueglobal.refreshIntervalSpecifies the mesh discovery refresh interval10sglobal.arch.amd64Specifies
    發(fā)表于 07-24 17:14 ?246次閱讀

    Service Mesh 初體驗

    整個控制面的配置管理中心, 除了繼續(xù)提供配置驗證功能外, Galley還負責配置的管理和分發(fā), Galley 使用 網格配置協(xié)議(Mesh Configuration Protocol) 和其他組件進行
    發(fā)表于 11-14 23:06 ?441次閱讀

    Service Mesh框架的對比:Linkerd vs. Istio

    各個細分行業(yè)和領域的組織機構正在持續(xù)的加速采用微服務架構。隨之而來的是容器的使用以及端點和服務通信的爆炸式增長。企業(yè)內部的復雜性和不確定性正在不斷增加。
    的頭像 發(fā)表于 12-25 17:49 ?995次閱讀

    Conduit基于Kubernetes的Service Mesh開源解決方案

    ./oschina_soft/conduit.zip
    發(fā)表于 05-11 10:40 ?0次下載
    Conduit基于Kubernetes的<b class='flag-5'>Service</b> <b class='flag-5'>Mesh</b>開源解決方案

    Service Mesh和API網關正在逐步融合

    1 原本清晰的界限:定位和職責 2 哲學問題:網關訪問內部服務,算東西向還是南北向? 3 Sidecar:真正的重合點 4 BFF:把融合進行到底 5 總結 關于 Service Mesh
    的頭像 發(fā)表于 10-10 16:39 ?1160次閱讀

    王者榮耀為什么不使用微服務架構?

    微服務為了把業(yè)務完美拆解,把原來的同一個進程里的模塊拆分成不同的服務,顯著增加額外的網絡開銷。更別說什么service mesh,各種gateway,proxy,sidecar,簡直就是擔心延遲太低。
    的頭像 發(fā)表于 12-12 15:46 ?456次閱讀

    哪種Service Mesh最契合企業(yè)的組織需求?

    Service Mesh是什么?這波熱潮又為何發(fā)生在當下? 首先,微服務是一種便捷的開發(fā)方法。但隨著分布式微服務架構的持續(xù)擴張,部署與可擴展性往往給開發(fā)者帶來新的難題
    的頭像 發(fā)表于 03-23 14:15 ?436次閱讀

    微服務架構面臨的各服務間的通信問題如何解決

    Istio 采用與應用容器并行的方式,部署使用 Sidecar 這種可編程的代理機制。Sidecar 最大的亮點就是業(yè)務無侵入,應用程序無需接受大幅改造,也沒有額外的關聯(lián)成本,也正是這個優(yōu)點,讓 Service Mesh 的理念深入人心。
    發(fā)表于 06-02 10:34 ?494次閱讀
    微服務架構面臨的各服務間的通信問題如何解決

    Service Mesh:探索分布式系統(tǒng)的幻覺與未來

    在 Kubernetes 中,流量管理由 Kubernetes 網絡代理(kube-proxy)負責。kube-proxy 在每個節(jié)點上運行,并與 Kubernetes API 服務器通信,獲取關于 Kubernetes 服務的信息。
    的頭像 發(fā)表于 08-02 16:00 ?472次閱讀
    <b class='flag-5'>Service</b> <b class='flag-5'>Mesh</b>:探索分布式系統(tǒng)的幻覺與未來

    服務網格DPU卸載解決方案

    服務網格(Service Mesh)是微服務架構中的一種重要技術,它主要處理服務之間的通信,為服務間的信息交換提供更安全、更快速且更可靠的基礎設施層。服務網格將服務治理從業(yè)務邏輯中剝離出來,拆解為獨立的進程,實現異構系統(tǒng)的統(tǒng)一治理和增強網絡安全。
    的頭像 發(fā)表于 09-20 16:25 ?231次閱讀
    服務網格DPU卸載解決方案