初識 Service Mesh
1. 介紹
Service Mesh 概念
Service Mesh又譯作“服務網(wǎng)格”壹若,作為服務間通信的基礎設施層进萄。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 通常是由一系列輕量級的網(wǎng)絡代理組成的啊研,它們與應用程序部署在一起御滩,但應用程序不需要知道它們的存在。
Service Mesh 實際上就是處于 TCP/IP 之上的一個抽象層党远,它假設底層的 L3/L4 網(wǎng)絡能夠點對點地傳輸字節(jié)(當然削解,它也假設網(wǎng)絡環(huán)境是不可靠的,所以 Service Mesh 必須具備處理網(wǎng)絡故障的能力)沟娱。
Service mesh 有如下幾個特點:
- 應用程序間通訊的中間層氛驮;
- 輕量級網(wǎng)絡代理;
- 應用程序無感知花沉;
- 解耦應用程序的重試柳爽、超時、監(jiān)控碱屁、追蹤和服務發(fā)現(xiàn);
2. 原理
Service Mesh 基本原理
如果用一句話來解釋什么是 Service Mesh蛾找,可以將它比作是應用程序或者說微服務間的 TCP/IP娩脾,負責服務之間的網(wǎng)絡調用、限流打毛、熔斷和監(jiān)控柿赊。對于編寫應用程序來說一般無須關心 TCP/IP 這一層(比如通過 HTTP 協(xié)議的 RESTful 應用),同樣使用 Service Mesh 也就無須關系服務之間的那些原來是通過應用程序或者其他框架實現(xiàn)的事情幻枉,比如 Spring Cloud碰声、OSS,現(xiàn)在只要交給 Service Mesh 就可以了熬甫。
Phil Cal?ado 在他的這篇博客 Pattern: Service Mesh 中詳細解釋了 Service Mesh 的來龍去脈:
- 從最原始的主機之間直接使用網(wǎng)線相連
- 網(wǎng)絡層的出現(xiàn)
- 集成到應用程序內部的控制流
- 分解到應用程序外部的控制流
- 應用程序的中集成服務發(fā)現(xiàn)和斷路器
- 出現(xiàn)了專門用于服務發(fā)現(xiàn)和斷路器的軟件包/庫胰挑,Twitter’s Finagle和 Facebook’s Proxygen。這時候還是集成在應用程序內部
- 出現(xiàn)了專門用于服務發(fā)現(xiàn)和斷路器的開源軟件,如:NetflixOSS ecosystem
- 最后作為微服務的中間層Service Mesh出現(xiàn)
Service Mesh 的架構如下圖所示
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架構分為控制層和數(shù)據(jù)層。
- 數(shù)據(jù)層:由一組智能代理(Envoy)作為sidecar部署喜爷,協(xié)調和控制所有microservices之間的網(wǎng)絡通信冗疮。
- 控制層:負責管理和配置代理路由流量,以及在運行時執(zhí)行的政策檩帐。
Istio架構各個組成部分术幔。
- Envoy:Istio使用Envoy代理的擴展版本,該代理是以C++開發(fā)的高性能代理湃密,用于調解service mesh中所有服務的所有入站和出站流量诅挑。
- Mixer:Mixer負責在service mesh上執(zhí)行訪問控制和使用策略,并收集Envoy代理和其他服務的遙測數(shù)據(jù)泛源。
- Istio Manager:Istio-Manager用作用戶和Istio之間的接口拔妥,收集和驗證配置,并將其傳播到各種Istio組件达箍。
- Istio-auth:Istio-Auth提供強大的服務間和最終用戶認證没龙,使用相互TLS,內置身份和憑據(jù)管理缎玫。
3.2 Linkerd 介紹
Linkerd 是開源網(wǎng)絡代理硬纤,設計為以服務網(wǎng)格部署:用于管理,控制和監(jiān)控應用程序內的服務與服務間通訊的專用層赃磨。
Linkerd 架構圖
Linkerd 基本功能 原文鏈接
- Load balancing:負載均衡算法筝家,它們使用實時性能指標來分配負載并減少整個應用程序的尾部延遲。
- Circuit breaking:自動熔斷邻辉,將停止將流量發(fā)送到被認為不健康的實例溪王,從而使他們有機會恢復并避免連鎖反應故障腮鞍。
- Service discovery:服務發(fā)現(xiàn)后端集成,通過刪除特定的(ad-hoc)服務發(fā)現(xiàn)實現(xiàn)來幫助您降低代碼的復雜性在扰。
- Dynamic request routing:動態(tài)請求路由和重新路由缕减,允許您使用最少量的配置來設置分段服務(staging service),金絲雀(canaries)芒珠,藍綠部署(blue-green deploy)桥狡,跨DC故障切換和黑暗流量(dark traffic)。
- Retries and deadlines:在某些故障時自動重試請求皱卓,并且可以在指定的時間段之后讓請求超時裹芝。
- TLS:可以配置為使用 TLS 發(fā)送和接收請求,您可以使用它來加密跨主機邊界的通信娜汁,而不用修改現(xiàn)有的應用程序代碼嫂易。
- HTTP proxy integration:可以作為 HTTP 代理,幾乎所有現(xiàn)代 HTTP 客戶端都廣泛支持掐禁,使其易于集成到現(xiàn)有應用程序中怜械。
- Transparent Proxying:在主機上使用 iptables 規(guī)則,設置通過 linkerd 的透明代理
- gRPC: 支持 HTTP/2 和 TLS傅事,允許它路由 gRPC 請求缕允,支持高級 RPC 機制,如雙向流蹭越,流程控制和結構化數(shù)據(jù)負載障本。
- Distributed tracing:分布式跟蹤和度量儀器,可以提供跨越所有服務的統(tǒng)一的可觀察性响鹃。
- Instrumentation:支持分布式跟蹤和度量儀器驾霜,可以提供跨越所有服務的統(tǒng)一的可觀察性。
4. 擴展閱讀
- 極客時間:什么是Service Mesh
- 極客時間:Service Mesh深度解析
- 極客時間:解讀2017之Service Mesh:群雄逐鹿烽煙起
- kubernetes-handbook
- Jimmy Song
- Service Mesh 在華為公有云的實踐