一篇聊透云原生中的服務網(wǎng)格
服務網(wǎng)格
服務網(wǎng)格是一種軟件架構模式,用于管理和連接微服務架構中的服務。它提供了一種方法,使得微服務之間的通信變得更加可靠、安全和靈活。服務網(wǎng)格通常由一組輕量級的代理程序組成,這些代理程序負責處理服務之間的通信,管理流量、安全性、監(jiān)控和其他相關的任務。它們還可以提供諸如負載均衡、故障轉(zhuǎn)移和自動伸縮等功能,從而幫助確保整個微服務架構的可靠性和可伸縮性。Istio 和 Linkerd 是兩個常見的服務網(wǎng)格實現(xiàn)。
圖片
特點
作為應用程序間通信的中間層
- 服務網(wǎng)格充當了應用程序之間通信的中間層。它們位于微服務架構中服務之間的通信路徑上,負責管理和控制所有的通信流量。
- 這種中間層的存在使得服務之間的通信變得更加可靠,因為它們可以處理通信中的許多復雜性,例如負載均衡、故障轉(zhuǎn)移和安全性等。
輕量級網(wǎng)絡代理
- 服務網(wǎng)格通常由輕量級的網(wǎng)絡代理組成,這些代理直接嵌入到應用程序或者與應用程序運行在同一主機上。
- 這些代理負責攔截和處理服務之間的所有通信,執(zhí)行所需的功能,例如流量管理、安全性、監(jiān)控等。
應用程序無感知
- 服務網(wǎng)格的設計目標之一是使得應用程序無需感知網(wǎng)格的存在。應用程序可以專注于自己的業(yè)務邏輯,而無需處理底層的通信細節(jié)。
- 這種無感知性意味著在將應用程序部署到服務網(wǎng)格中時,不需要對應用程序進行任何修改。
解耦應用程序的重試/超時、監(jiān)控、追蹤和服務發(fā)現(xiàn)
- 服務網(wǎng)格解耦了與通信相關的許多關注點,包括重試、超時、監(jiān)控、追蹤和服務發(fā)現(xiàn)等。
- 通過將這些功能從應用程序中抽象出來并集中管理,服務網(wǎng)格可以提供統(tǒng)一的解決方案來處理這些問題,從而降低了應用程序開發(fā)人員的負擔,并提高了整個架構的可維護性和可靠性。
功能
服務發(fā)現(xiàn)
- 服務網(wǎng)格可以自動發(fā)現(xiàn)和注冊微服務實例,并將它們的位置信息存儲在服務注冊表中。這使得其他服務能夠動態(tài)地找到并與所需的服務進行通信,而無需硬編碼服務的位置信息。
負載均衡
- 服務網(wǎng)格可以根據(jù)預先定義的負載均衡策略,將請求均勻地分配到可用的服務實例上。這有助于提高系統(tǒng)的性能和可伸縮性,確保每個服務實例都能夠有效地處理流量。
加密通信
- 通過加密通信功能,服務網(wǎng)格可以確保微服務之間的通信是安全的。它可以使用諸如TLS(傳輸層安全性)等加密協(xié)議來加密通信流量,以防止敏感數(shù)據(jù)在傳輸過程中被竊取或篡改。
觀察與追蹤微服務之間的拓撲
- 服務網(wǎng)格可以提供觀察和追蹤微服務之間通信拓撲的功能。這包括監(jiān)控服務之間的通信模式、識別潛在的性能瓶頸和故障點,并提供實時的監(jiān)控指標和分析報告。
服務之間訪問的鑒權與授權
- 通過鑒權與授權功能,服務網(wǎng)格可以確保只有經(jīng)過授權的服務和用戶才能夠訪問特定的服務。它可以實施訪問控制策略,例如基于角色的訪問控制(RBAC)或令牌驗證,以確保服務之間的安全通信。
熔斷機制
- 熔斷機制是服務網(wǎng)格提供的一種故障處理機制,用于防止故障的傳播和影響系統(tǒng)的穩(wěn)定性。當檢測到某個服務出現(xiàn)故障或響應時間超過閾值時,熔斷機制可以暫時停止將流量發(fā)送到該服務,以避免對整個系統(tǒng)產(chǎn)生負面影響。
數(shù)據(jù)平面
通過接收控制面發(fā)送的路由與控制信息來定向轉(zhuǎn)發(fā)或處理數(shù)據(jù)。
當談到服務網(wǎng)格時,這些特點是其核心功能之一,它們通過數(shù)據(jù)面和控制面的配合來實現(xiàn)。
服務發(fā)現(xiàn)
- 服務網(wǎng)格通過服務發(fā)現(xiàn)功能來發(fā)現(xiàn)后端服務實例中哪些是可用的。這意味著當新的服務實例被部署或舊的實例被移除時,服務網(wǎng)格能夠自動檢測到這些變化并更新服務發(fā)現(xiàn)的信息。
健康檢查
- 健康檢查功能允許服務網(wǎng)格定期向服務發(fā)送心跳,以檢測服務實例是否存活。如果服務實例未能及時響應健康檢查請求,服務網(wǎng)格將其標記為不可用,并停止將流量發(fā)送到該實例。
鑒權
- 通過鑒權功能,服務網(wǎng)格可以對訪問請求進行加解密驗證,以確保只有經(jīng)過授權的請求才能夠訪問服務。這有助于保護服務免受未經(jīng)授權的訪問或攻擊。
負載均衡
- 負載均衡功能使服務網(wǎng)格能夠?qū)Χ鄠€下游服務進行流量的均衡分配。這確保了在負載增加時,流量能夠被有效地分發(fā)到各個服務實例上,從而提高了系統(tǒng)的性能和可用性。
流量統(tǒng)計
- 通過流量統(tǒng)計功能,服務網(wǎng)格可以對每個請求的流量進行統(tǒng)計,并生成相應的監(jiān)控數(shù)據(jù)和追蹤信息。這些統(tǒng)計數(shù)據(jù)可以用于分析系統(tǒng)的性能、診斷問題和優(yōu)化服務架構。
熔斷限流
- 熔斷限流功能允許服務網(wǎng)格確定最大的查詢率(QPS)、最大并發(fā)數(shù)等限制,并在達到這些限制時拒絕新的請求。這有助于保護后端服務免受過載的影響,并提高整個系統(tǒng)的穩(wěn)定性和可靠性。
數(shù)據(jù)面和控制面的配合
- 數(shù)據(jù)面主要負責接收系統(tǒng)中的每個請求和包,并根據(jù)預先配置的規(guī)則和策略來處理流量。常見的數(shù)據(jù)面包括Envoy、HAProxy、Nginx等。
- 控制面則負責管理和配置數(shù)據(jù)面,包括配置服務發(fā)現(xiàn)、健康檢查、鑒權規(guī)則、負載均衡策略等。常見的控制面包括Istio、SmartStack等??刂泼媾c數(shù)據(jù)面的配合使得服務網(wǎng)格能夠靈活地管理和控制服務之間的通信,實現(xiàn)高度可靠和可擴展的微服務架構。
控制面
服務網(wǎng)格的控制面是指服務網(wǎng)格架構中負責管理和配置數(shù)據(jù)面的部分。它通常由一組組件組成,這些組件負責實現(xiàn)服務發(fā)現(xiàn)、流量管理、安全控制、監(jiān)控、故障處理等功能??刂泼娴闹饕蝿帐菫閿?shù)據(jù)面提供所需的配置信息,以確保服務網(wǎng)格能夠按照預期的方式運行,并滿足各種業(yè)務需求和運維要求。
圖片
服務發(fā)現(xiàn)
管理和維護服務注冊表,跟蹤服務實例的可用性和位置,以便數(shù)據(jù)面能夠?qū)⒘髁空_地路由到目標服務。
流量管理
配置負載均衡、路由規(guī)則、限流策略等,以確保流量能夠按照預期的方式在服務之間進行傳輸,并保證服務的可用性和性能。
安全控制
實施安全策略,例如認證、授權、加密解密等,以保護服務之間的通信安全,并防止未經(jīng)授權的訪問和數(shù)據(jù)泄露。
監(jiān)控和指標收集
收集和分析服務之間的通信數(shù)據(jù)、性能指標和錯誤信息,以便進行故障診斷、性能優(yōu)化和資源規(guī)劃。
故障處理
實施故障檢測、熔斷、重試等機制,以確保在服務發(fā)生故障或不可用時能夠及時地進行處理,保障整個系統(tǒng)的穩(wěn)定性和可靠性。
常見的服務網(wǎng)格控制面包括 Istio、Linkerd 控制平面等。這些控制面組件通常以集群部署方式運行,與數(shù)據(jù)面組件(如 Envoy、HAProxy 等)協(xié)同工作,共同構建出高度可靠和高度可擴展的服務網(wǎng)格架構。
服務網(wǎng)格的優(yōu)點
解耦微服務業(yè)務架構和服務控制
服務網(wǎng)格實現(xiàn)了微服務業(yè)務邏輯與底層服務控制的解耦。微服務只需專注于實現(xiàn)自己的業(yè)務邏輯,而不必在代碼中繁瑣配置與服務通信相關的依賴庫和配置項。這種解耦使得微服務開發(fā)更加簡潔和高效。
抽象共性需求,統(tǒng)一實現(xiàn)
服務網(wǎng)格將微服務中常見的共性需求(如流量統(tǒng)計、trace埋點、限流控制等)抽象出來,作為統(tǒng)一的實現(xiàn)層。這些功能由基礎架構團隊負責實現(xiàn),并通過服務網(wǎng)格的統(tǒng)一部署方式,為所有微服務提供支持。這樣一來,不同微服務間不再需要重復編碼這些通用功能,極大地提高了開發(fā)效率和代碼復用性。
業(yè)務開發(fā)者專注于業(yè)務邏輯
有了服務網(wǎng)格,業(yè)務開發(fā)者不再需要分心關注微服務的共性需求和底層服務控制,可以更專注地投入到業(yè)務邏輯的實現(xiàn)上。這使得開發(fā)人員能夠更快速、高效地迭代業(yè)務功能,加速產(chǎn)品上線和迭代。
統(tǒng)一升級和維護
服務網(wǎng)格的統(tǒng)一實現(xiàn)層由基礎架構團隊負責升級和維護,業(yè)務開發(fā)者無需擔心底層服務控制的變化和更新。這降低了微服務的維護成本,同時保證了整個微服務架構的穩(wěn)定性和可靠性。
提升組織效率
通過將共性需求抽象為服務網(wǎng)格的統(tǒng)一實現(xiàn)層,并由基礎架構團隊統(tǒng)一維護,服務網(wǎng)格提高了組織的整體效率。業(yè)務開發(fā)者能夠更專注于業(yè)務功能的實現(xiàn),基礎架構團隊則負責提供穩(wěn)定可靠的底層服務控制,使得整個組織能夠更快速、高效地實現(xiàn)業(yè)務目標。
服務網(wǎng)格的技術棧
服務網(wǎng)格的技術棧通常包括以下幾個方面的技術和工具
代理和數(shù)據(jù)面
- 代理和數(shù)據(jù)面組件負責處理服務之間的通信流量,執(zhí)行負載均衡、安全性、監(jiān)控等功能。
Envoy
HAProxy
NGINX
控制面
- 控制面負責管理和配置數(shù)據(jù)面,實現(xiàn)服務發(fā)現(xiàn)、流量管理、安全控制、監(jiān)控等功能。
Istio
Linkerd
Consul
監(jiān)控和指標收集
- 監(jiān)控和指標收集組件用于收集和分析服務之間的通信數(shù)據(jù)、性能指標和錯誤信息。
Prometheus
Grafana
Zipkin
Jaeger
安全性和鑒權
- 安全性和鑒權組件用于實現(xiàn)對服務之間通信的加密、認證和授權。
JWT(JSON Web Token)
OAuth2
SPIFFE(Secure Production Identity Framework for Everyone)
服務發(fā)現(xiàn)
- 服務發(fā)現(xiàn)組件用于發(fā)現(xiàn)和注冊微服務實例,以便其他服務能夠動態(tài)地找到并與它們進行通信。常見的服務發(fā)現(xiàn)工具包括
Consul
etcd
ZooKeeper
流量管理
- 流量管理組件用于配置負載均衡、路由規(guī)則、限流策略等,以確保流量能夠按照預期的方式在服務之間進行傳輸。
Kong
Traefik
Ambassador
熔斷和故障處理
- 熔斷和故障處理組件用于實現(xiàn)故障檢測、熔斷、重試等機制,以確保在服務出現(xiàn)故障或不可用時能夠進行適當?shù)奶幚怼?/li>
Hystrix
Istio Circuit Breaker
我們來總結一下,服務網(wǎng)格的技術棧涵蓋了代理和數(shù)據(jù)面、控制面、監(jiān)控和指標收集、安全性和鑒權、服務發(fā)現(xiàn)、流量管理以及熔斷和故障處理等方面的技術和工具。
技術棧圖
我們可以使用plantuml畫出對應的用例圖
@startuml
left to right direction
actor 用戶 as User
package "服務網(wǎng)格技術棧" {
usecase "代理和數(shù)據(jù)面" as Proxy
usecase "控制面" as ControlPlane
usecase "監(jiān)控和指標收集" as Monitoring
usecase "安全性和鑒權" as Security
usecase "服務發(fā)現(xiàn)" as ServiceDiscovery
usecase "流量管理" as TrafficManagement
usecase "熔斷和故障處理" as CircuitBreaker
User --> Proxy : 發(fā)送請求
User --> ControlPlane : 配置服務規(guī)則
User --> Monitoring : 查看監(jiān)控數(shù)據(jù)
User --> Security : 進行認證和授權
User --> ServiceDiscovery : 發(fā)現(xiàn)可用服務
User --> TrafficManagement : 配置負載均衡
User --> CircuitBreaker : 設置故障處理策略
ControlPlane --> Proxy : 下發(fā)配置
ControlPlane --> Monitoring : 收集指標
ControlPlane --> Security : 實施安全策略
ControlPlane --> ServiceDiscovery : 更新服務列表
ControlPlane --> TrafficManagement : 配置路由規(guī)則
ControlPlane --> CircuitBreaker : 觸發(fā)熔斷
Proxy --> ControlPlane : 上報狀態(tài)
Proxy --> Monitoring : 發(fā)送監(jiān)控數(shù)據(jù)
Proxy --> Security : 執(zhí)行安全操作
Proxy --> ServiceDiscovery : 查詢服務列表
Proxy --> TrafficManagement : 處理流量策略
Proxy --> CircuitBreaker : 進行故障檢測
Monitoring --> ControlPlane : 提供監(jiān)控數(shù)據(jù)
Monitoring --> Proxy : 收集代理狀態(tài)
Monitoring --> Security : 記錄安全事件
Monitoring --> ServiceDiscovery : 分析服務拓撲
Monitoring --> TrafficManagement : 分析流量分布
Monitoring --> CircuitBreaker : 監(jiān)控故障情況
}
@enduml
圖片
這個用例圖描述了服務網(wǎng)格技術棧中各個組件之間的交互關系以及用戶如何使用這些技術來實現(xiàn)不同的功能。
用戶
表示使用服務網(wǎng)格的終端用戶或系統(tǒng)用戶,他們通過與不同的技術組件進行交互,來達到他們的目標。
代理和數(shù)據(jù)面
代表了處理服務之間通信流量的組件。它們與用戶交互,處理用戶發(fā)送的請求,并向控制面報告狀態(tài)。同時,它們也與控制面、監(jiān)控和指標收集、安全性和鑒權、服務發(fā)現(xiàn)、流量管理以及熔斷和故障處理等組件進行交互,以執(zhí)行相應的功能。
控制面
負責管理和配置數(shù)據(jù)面,實現(xiàn)服務發(fā)現(xiàn)、流量管理、安全控制、監(jiān)控等功能。它接收來自用戶的配置請求,并將配置信息下發(fā)到數(shù)據(jù)面,同時收集來自數(shù)據(jù)面的狀態(tài)和監(jiān)控信息,以便進行相應的調(diào)整和優(yōu)化。
監(jiān)控和指標收集
負責收集和分析服務之間的通信數(shù)據(jù)、性能指標和錯誤信息。它與用戶交互,提供監(jiān)控數(shù)據(jù)給用戶查看,并與控制面、代理和數(shù)據(jù)面等組件進行交互,以實現(xiàn)監(jiān)控和診斷功能。
安全性和鑒權
實施對服務之間通信的加密、認證和授權。它與用戶進行交互,執(zhí)行安全操作,并與控制面、代理和數(shù)據(jù)面等組件進行交互,以保護服務之間的通信安全。
服務發(fā)現(xiàn)
負責發(fā)現(xiàn)和注冊微服務實例,以便其他服務能夠動態(tài)地找到并與它們進行通信。它與用戶交互,提供服務發(fā)現(xiàn)功能,并與控制面、代理和數(shù)據(jù)面等組件進行交互,以更新服務列表和服務拓撲。
流量管理
負責配置負載均衡、路由規(guī)則、限流策略等,以確保流量能夠按照預期的方式在服務之間進行傳輸。它與用戶進行交互,提供流量管理功能,并與控制面、代理和數(shù)據(jù)面等組件進行交互,以配置和調(diào)整流量策略。
熔斷和故障處理
負責實施故障檢測、熔斷、重試等機制,以確保在服務出現(xiàn)故障或不可用時能夠進行適當?shù)奶幚怼Kc用戶進行交互,提供熔斷和故障處理功能,并與控制面、代理和數(shù)據(jù)面等組件進行交互,以監(jiān)控和處理故障情況。