初識 Service Mesh

初識 Service Mesh

1. 介紹

Service Mesh 概念

Service Mesh又譯作“服務網格”,作為服務間通信的基礎設施層。Willian Morgan(Linkerd的CEO)如下定義Service Mesh。

A service mesh is a dedicated infrastructure layer for handling service-to-service communication. It’s responsible for the reliable delivery of requests through the complex topology of services that comprise a modern, cloud native application. In practice, the service mesh is typically implemented as an array of lightweight network proxies that are deployed alongside application code, without the application needing to be aware. (But there are variations to this idea, as we’ll see.)

Service Mesh 是一個基礎設施層,用于處理服務間通信。云原生應用有著復雜的服務拓撲,Service Mesh 保證請求可以在這些拓撲中可靠地穿梭。在實際應用當中,Service Mesh 通常是由一系列輕量級的網絡代理組成的,它們與應用程序部署在一起,但應用程序不需要知道它們的存在。

Service Mesh 實際上就是處于 TCP/IP 之上的一個抽象層,它假設底層的 L3/L4 網絡能夠點對點地傳輸字節(jié)(當然,它也假設網絡環(huán)境是不可靠的,所以 Service Mesh 必須具備處理網絡故障的能力)。

Service mesh 有如下幾個特點:

  1. 應用程序間通訊的中間層;
  2. 輕量級網絡代理;
  3. 應用程序無感知;
  4. 解耦應用程序的重試、超時、監(jiān)控、追蹤和服務發(fā)現;

2. 原理

Service Mesh 基本原理

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

Phil Cal?ado 在他的這篇博客 Pattern: Service Mesh 中詳細解釋了 Service Mesh 的來龍去脈:

  1. 從最原始的主機之間直接使用網線相連
  2. 網絡層的出現
  3. 集成到應用程序內部的控制流
  4. 分解到應用程序外部的控制流
  5. 應用程序的中集成服務發(fā)現和斷路器
  6. 出現了專門用于服務發(fā)現和斷路器的軟件包/庫,Twitter’s Finagle和 Facebook’s Proxygen。這時候還是集成在應用程序內部
  7. 出現了專門用于服務發(fā)現和斷路器的開源軟件,如:NetflixOSS ecosystem
  8. 最后作為微服務的中間層Service Mesh出現

Service Mesh 的架構如下圖所示

serivce-mesh-control-plane

3. 方案

目前社區(qū)Service Mesh的開源解決方案有:Buoyant 公司推出的 Linkerd 和 Google、IBM 等廠商牽頭的 Istio。Linkerd 更加成熟穩(wěn)定些,Istio 功能更加豐富、設計上更為強大,社區(qū)相對也更加強大一些。所以普遍認為 Istio 的前景會更好,但是畢竟還處于項目的早期,問題還很多。

3.1 Istio 介紹

Istio是由Google、IBM和Lyft開源的微服務管理、保護和監(jiān)控框架。Istio為希臘語,意思是”起航“。官方中文文檔地址:https://istio.doczh.cn

Istio架構圖

istio-arch

Istio架構分為控制層和數據層。

  1. 數據層:由一組智能代理(Envoy)作為sidecar部署,協(xié)調和控制所有microservices之間的網絡通信。
  2. 控制層:負責管理和配置代理路由流量,以及在運行時執(zhí)行的政策。

Istio架構各個組成部分。

  • Envoy:Istio使用Envoy代理的擴展版本,該代理是以C++開發(fā)的高性能代理,用于調解service mesh中所有服務的所有入站和出站流量。
  • Mixer:Mixer負責在service mesh上執(zhí)行訪問控制和使用策略,并收集Envoy代理和其他服務的遙測數據。
  • Istio Manager:Istio-Manager用作用戶和Istio之間的接口,收集和驗證配置,并將其傳播到各種Istio組件。
  • Istio-auth:Istio-Auth提供強大的服務間和最終用戶認證,使用相互TLS,內置身份和憑據管理。

3.2 Linkerd 介紹

Linkerd 是開源網絡代理,設計為以服務網格部署:用于管理,控制和監(jiān)控應用程序內的服務與服務間通訊的專用層。

Linkerd 架構圖

what_it_does
why_is_it_necessary

Linkerd 基本功能 原文鏈接

  1. Load balancing:負載均衡算法,它們使用實時性能指標來分配負載并減少整個應用程序的尾部延遲。
  2. Circuit breaking:自動熔斷,將停止將流量發(fā)送到被認為不健康的實例,從而使他們有機會恢復并避免連鎖反應故障。
  3. Service discovery:服務發(fā)現后端集成,通過刪除特定的(ad-hoc)服務發(fā)現實現來幫助您降低代碼的復雜性。
  4. Dynamic request routing:動態(tài)請求路由和重新路由,允許您使用最少量的配置來設置分段服務(staging service),金絲雀(canaries),藍綠部署(blue-green deploy),跨DC故障切換和黑暗流量(dark traffic)。
  5. Retries and deadlines:在某些故障時自動重試請求,并且可以在指定的時間段之后讓請求超時。
  6. TLS:可以配置為使用 TLS 發(fā)送和接收請求,您可以使用它來加密跨主機邊界的通信,而不用修改現有的應用程序代碼。
  7. HTTP proxy integration:可以作為 HTTP 代理,幾乎所有現代 HTTP 客戶端都廣泛支持,使其易于集成到現有應用程序中。
  8. Transparent Proxying:在主機上使用 iptables 規(guī)則,設置通過 linkerd 的透明代理
  9. gRPC: 支持 HTTP/2 和 TLS,允許它路由 gRPC 請求,支持高級 RPC 機制,如雙向流,流程控制和結構化數據負載。
  10. Distributed tracing:分布式跟蹤和度量儀器,可以提供跨越所有服務的統(tǒng)一的可觀察性。
  11. Instrumentation:支持分布式跟蹤和度量儀器,可以提供跨越所有服務的統(tǒng)一的可觀察性。

4. 擴展閱讀

5. 參考資料

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容