天天看點

服務網格——什麼是服務網格?(概念原理1)什麼是服務網格?

目錄

什麼是服務網格?

服務網格的特點

了解服務網格

服務網格如何工作?

為何使用服務網格?

服務網格全景圖

參考

什麼是服務網格?

Service mesh 又譯作 “服務網格”,作為服務間通信的基礎設施層。Buoyant 公司的 CEO Willian Morgan 在他的這篇文章 WHAT’S A SERVICE MESH? AND WHY DO I NEED ONE? 中解釋了什麼是 Service Mesh,為什麼雲原生應用需要 Service Mesh。

服務網格是用于處理服務間通信的專用基礎設施層。它負責通過包含現代雲原生應用程式的複雜服務拓撲來可靠地傳遞請求。實際上,服務網格通常通過一組輕量級網絡代理來實作,這些代理與應用程式代碼一起部署,而不需要感覺應用程式本身。—— Willian Morgan Buoyant CEO

服務網格(Service Mesh)這個術語通常用于描述構成這些應用程式的微服務網絡以及應用之間的互動。随着規模和複雜性的增長,服務網格越來越難以了解和管理。它的需求包括服務發現、負載均衡、故障恢複、名額收集和監控以及通常更加複雜的運維需求,例如 A/B 測試、金絲雀釋出、限流、通路控制和端到端認證等。

服務網格的特點

服務網格有如下幾個特點:

  • 應用程式間通訊的中間層
  • 輕量級網絡代理
  • 應用程式無感覺
  • 解耦應用程式的重試/逾時、監控、追蹤和服務發現

目前兩款流行的服務網格開源軟體 Linkerd 和 Istio 都可以直接在 kubernetes 中內建,其中 Linkerd 已經成為 CNCF 成員,Istio 在 2018年7月31日宣布 1.0。

了解服務網格

如果用一句話來解釋什麼是服務網格,可以将它比作是應用程式或者說微服務間的 TCP/IP,負責服務之間的網絡調用、限流、熔斷和監控。對于編寫應用程式來說一般無須關心 TCP/IP 這一層(比如通過 HTTP 協定的 RESTful 應用),同樣使用服務網格也就無須關系服務之間的那些原來是通過應用程式或者其他架構實作的事情,比如 Spring Cloud、OSS,現在隻要交給服務網格就可以了。

Phil Calçado 在他的這篇部落格 Pattern: Service Mesh 中詳細解釋了服務網格的來龍去脈:

  1. 從最原始的主機之間直接使用網線相連
  2. 網絡層的出現
  3. 內建到應用程式内部的控制流
  4. 分解到應用程式外部的控制流
  5. 應用程式的中內建服務發現和斷路器
  6. 出現了專門用于服務發現和斷路器的軟體包/庫,如 Twitter 的 Finagle 和 Facebook 的 Proxygen,這時候還是內建在應用程式内部
  7. 出現了專門用于服務發現和斷路器的開源軟體,如 Netflix OSS、Airbnb 的 synapse 和 nerve
  8. 最後作為微服務的中間層服務網格出現

服務網格的架構如下圖所示:

服務網格——什麼是服務網格?(概念原理1)什麼是服務網格?

圖檔 - Service Mesh 架構圖

圖檔來自:Pattern: Service Mesh

服務網格作為 sidecar 運作,對應用程式來說是透明,所有應用程式間的流量都會通過它,是以對應用程式流量的控制都可以在 serivce mesh 中實作。

服務網格如何工作?

下面以 Istio 為例講解服務網格如何在 Kubernetes 中工作。

  1. Istio 将服務請求路由到目的位址,根據中的參數判斷是到生産環境、測試環境還是 staging 環境中的服務(服務可能同時部署在這三個環境中),是路由到本地環境還是公有雲環境?所有的這些路由資訊可以動态配置,可以是全局配置也可以為某些服務單獨配置。
  2. 當 Istio 确認了目的位址後,将流量發送到相應服務發現端點,在 Kubernetes 中是 service,然後 service 會将服務轉發給後端的執行個體。
  3. Istio 根據它觀測到最近請求的延遲時間,選擇出所有應用程式的執行個體中響應最快的執行個體。
  4. Istio 将請求發送給該執行個體,同時記錄響應類型和延遲資料。
  5. 如果該執行個體挂了、不響應了或者程序不工作了,Istio 将把請求發送到其他執行個體上重試。
  6. 如果該執行個體持續傳回 error,Istio 會将該執行個體從負載均衡池中移除,稍後再周期性得重試。
  7. 如果請求的截止時間已過,Istio 主動失敗該請求,而不是再次嘗試添加負載。
  8. Istio 以 metric 和分布式追蹤的形式捕獲上述行為的各個方面,這些追蹤資訊将發送到集中 metric 系統。

為何使用服務網格?

服務網格并沒有給我們帶來新功能,它是用于解決其他工具已經解決過的問題,隻不過這次是在雲原生的 Kubernetes 環境下的實作。

在傳統的 MVC 三層 Web 應用程式架構下,服務之間的通訊并不複雜,在應用程式内部自己管理即可,但是在現今的複雜的大型網站情況下,單體應用被分解為衆多的微服務,服務之間的依賴和通訊十分複雜,出現了 twitter 開發的 Finagle、Netflix 開發的 Hystrix 和 Google 的 Stubby 這樣的 “胖用戶端” 庫,這些就是早期的服務網格,但是它們都近适用于特定的環境和特定的開發語言,并不能作為平台級的服務網格支援。

在雲原生架構下,容器的使用給予了異構應用程式的更多可行性,Kubernetes 增強的應用的橫向擴容能力,使用者可以快速的編排出複雜環境、複雜依賴關系的應用程式,同時開發者又無須過分關心應用程式的監控、擴充性、服務發現和分布式追蹤這些繁瑣的事情而專注于程式開發,賦予開發者更多的創造性。

服務網格全景圖

Service Mesh 的概念于 2016 年誕生至今仍在蓬勃發展,下面是由于 ServiceMesher 社群維護的Service Mesh 清單,如您發現該清單中有所遺漏歡迎到 servicemesher/awesome-servicemesh 上送出 PR。

  • amalgam8 - 用于異構微服務的基于版本的路由網格
  • ambassador - 開源的基于 Envoy proxy 建構的用于微服務的 Kubernetes 原生 API 網關 https://www.getambassador.io
  • aspen-mesh - 隸屬于 F5 的公司開發的 Service Mesh
  • conduit - 适用于 Kubernetes 的輕量級 Service Mesh https://conduit.io
  • consul - Consul 一種分布式、高可用的和資料中心感覺解決方案,用于跨動态分布式基礎架構連接配接和配置應用程式。https://www.consul.io/
  • dubbo - Apache Dubbo™ (incubating)是一款高性能Java RPC架構。http://dubbo.incubator.apache.org
  • envoy - C++ 前端/服務代理 https://www.envoyproxy.io
  • istio - 用于連接配接、保護、控制和觀測服務。
  • kong - 雲原生 API 網關 https://konghq.com/install
  • linkerd - 雲原生應用的開源 Service Mesh https://linkerd.io
  • mesher - 華為開源的基于輕量級基于 go chassis 的 Service Mesh。
  • nginmesh - 基于 Nginx 的 Service Mesh
  • nginx-unit - NGINX Unit is a new, lightweight, open source application server built to meet the demands of today’s dynamic and distributed applications.
  • servicecomb - ServiceComb 是華為開源的微服務架構,提供便捷的在雲中開發和部署應用的方式。
  • sofa-mesh - SOFAMesh 是螞蟻金服開源的基于 Istio 的大規模服務網格解決方案。 http://www.sofastack.tech/
  • sofa-mosn - SOFAMosn 是由螞蟻金服開源的一個子產品化可觀測的智能網絡,可用作為 sidecar 部署在 Service Mesh 中。http://www.sofastack.tech
  • tars - Tars 是騰訊開源的基于名稱服務的高性能 RPC 架構。使用 tars 協定并提供半自動化運維平台。

參考

  • WHAT’S A SERVICE MESH? AND WHY DO I NEED ONE? - buoyant.io
  • Istio: A service mesh for AWS ECS - medium.com
  • 初次了解 Istio - istio.io
  • Application Network Functions With ESBs, API Management, and Now.. Service Mesh? - blog.christianposta.com
  • Pattern: Service Mesh - philcalcado.com
  • Envoy 官方文檔中文版 - servicemesher.com
  • Istio 官方文檔 - istio.io
  • servicemesher/awesome-servicemesh - github.com

繼續閱讀