在微服務(wù)架構(gòu)中進(jìn)行開(kāi)發(fā)時(shí),需要配置許多單獨(dú)的組件。為了使微服務(wù)協(xié)同工作,它們需要建立用于信息共享和數(shù)據(jù)傳輸?shù)耐ㄐ徘馈9芾砗捅O(jiān)控服務(wù)之間通信的一種方法是使用服務(wù)網(wǎng)格。
什么是服務(wù)網(wǎng)格?
服務(wù)網(wǎng)格 是添加到微服務(wù)架構(gòu)中的專用基礎(chǔ)設(shè)施層。 它的主要作用是確保快速和安全的服務(wù)到服務(wù)通信。這種低延遲工具管理和監(jiān)控服務(wù)間通信和數(shù)據(jù)共享。
它由一個(gè) 控制平面 組成,開(kāi)發(fā)人員從該控制平面向網(wǎng)絡(luò)層實(shí)施特定的規(guī)則和策略。控制平面直接與數(shù)據(jù)平面一起工作,數(shù)據(jù)平面是與服務(wù)一起運(yùn)行的邊車代理的集合。這些代理負(fù)責(zé)服務(wù)之間的所有通信。此外,它們還可以監(jiān)控并提供對(duì)整體應(yīng)用程序性能的寶貴見(jiàn)解,并幫助發(fā)現(xiàn)潛在問(wèn)題并避免停機(jī)。
代理提供有價(jià)值的功能,包括:
- 動(dòng)態(tài)服務(wù)發(fā)現(xiàn)
- 負(fù)載均衡
- 健康檢查
- 加密
- 可觀察性
- 斷路器
- 基于百分比的流量拆分的分階段部署
- 驗(yàn)證
- 豐富的指標(biāo)
- 授權(quán)
服務(wù)網(wǎng)格架構(gòu)的興起
為了完全理解服務(wù)網(wǎng)格是如何工作的,我們需要研究為什么要開(kāi)發(fā)這樣的工具。服務(wù)網(wǎng)格架構(gòu)的興起是解決與微服務(wù)相關(guān)的許多問(wèn)題的方法。
許多開(kāi)發(fā)團(tuán)隊(duì) 從開(kāi)發(fā)單體應(yīng)用程序轉(zhuǎn)向微服務(wù)架構(gòu)。這將應(yīng)用程序從單一單元?jiǎng)澐譃閰f(xié)同工作的單個(gè)服務(wù)系統(tǒng)。該應(yīng)用程序由具有各自功能的多個(gè)自治服務(wù)組成。
開(kāi)發(fā)此類應(yīng)用程序的困難在于配置這些服務(wù)相互通信的最佳方式。應(yīng)用程序性能取決于協(xié)同工作和共享數(shù)據(jù)以提供最佳用戶體驗(yàn)的服務(wù)。例如,一個(gè)網(wǎng)絡(luò)商店可能包含一個(gè) 登錄服務(wù),該服務(wù) 與需要來(lái)自 庫(kù)存數(shù)據(jù)庫(kù)等信息的購(gòu)買服務(wù) 進(jìn)行通信 。
由于微服務(wù)通過(guò) API 進(jìn)行通信,因此找到解決 發(fā)現(xiàn) 和 路由的最佳解決方案 非常重要。此外,開(kāi)發(fā)人員需要確保系統(tǒng)內(nèi)的通信是 安全的。雖然 防火墻 保護(hù)應(yīng)用程序免受外部攻擊,但微服務(wù)架構(gòu)中有一個(gè)平坦、開(kāi)放的網(wǎng)絡(luò)。
在網(wǎng)格服務(wù)架構(gòu)之前,此任務(wù)由 負(fù)載均衡器處理。但是,由于部署和成本問(wèn)題,這不是一個(gè)實(shí)用的解決方案,尤其是在更大規(guī)模的情況下。服務(wù)網(wǎng)格是作為上述所有問(wèn)題的最終解決方案而開(kāi)發(fā)的。它提供了一個(gè)網(wǎng)絡(luò)層,帶有一個(gè)集中的注冊(cè)表(控制平面),通過(guò)它的 sidecar 代理管理所有服務(wù)。與負(fù)載均衡器相比,它們更容易配置和擴(kuò)展。開(kāi)發(fā)人員可以根據(jù)需要向上和向下擴(kuò)展代理并更改路由規(guī)則,而無(wú)需修改服務(wù)。
服務(wù)網(wǎng)格的好處
服務(wù)網(wǎng)格最顯著的好處是:
- 提高安全性——在微服務(wù)架構(gòu)中實(shí)施服務(wù)網(wǎng)格可以提高整體安全性。該網(wǎng)絡(luò)層引入了自動(dòng) 授權(quán)、 身份驗(yàn)證、 加密和 策略執(zhí)行。它使用 相互傳輸層安全 (mTLS) 來(lái)確保所有服務(wù)到服務(wù)的通信都是安全的。服務(wù)使用其 TLS 證書(shū)標(biāo)識(shí)自己以建立連接。一旦他們驗(yàn)證了自己的身份,他們就會(huì)建立一個(gè)用于數(shù)據(jù)共享的加密通道。
- 流量控制和可見(jiàn)性——服務(wù)網(wǎng)格的主要功能之一是提供流量控制。它管理東西流量,以及服務(wù)之間的流量。所有通信都是通過(guò)由控制平面管理的邊車代理完成的。流量是透明路由的,讓開(kāi)發(fā)人員更好地了解所有數(shù)據(jù)交換。通過(guò)更清晰地了解應(yīng)用程序性能,更容易發(fā)現(xiàn)系統(tǒng)中的潛在問(wèn)題。
- 可觀察性——由于平臺(tái)管理所有流量,它收集有關(guān)流量行為和用戶交互的寶貴見(jiàn)解。有了如此大量的數(shù)據(jù),業(yè)務(wù)分析師可以制定改進(jìn)應(yīng)用程序的策略。
- 開(kāi)發(fā)人員專注于應(yīng)用程序開(kāi)發(fā)而不是網(wǎng)絡(luò)——他們可以在架構(gòu)中實(shí)現(xiàn)服務(wù)網(wǎng)格,而不是開(kāi)發(fā)團(tuán)隊(duì)設(shè)置和管理整個(gè)網(wǎng)絡(luò)層。雖然該平臺(tái)確實(shí)需要初始配置,但它可以自動(dòng)執(zhí)行與網(wǎng)絡(luò)管理相關(guān)的耗時(shí)任務(wù)。這使開(kāi)發(fā)人員可以專注于微服務(wù)。讓服務(wù)網(wǎng)格來(lái)管理服務(wù)到服務(wù)的交互可以節(jié)省時(shí)間和金錢,同時(shí)還可以提高生產(chǎn)力。
- 彈性——服務(wù)網(wǎng)格提供有助于創(chuàng)建彈性微服務(wù)應(yīng)用程序的功能。其中一項(xiàng)功能是斷路器模式,它有助于檢測(cè)故障和延遲峰值。此外,服務(wù)網(wǎng)格使用負(fù)載平衡來(lái)進(jìn)行服務(wù)發(fā)現(xiàn)和跨微服務(wù)網(wǎng)絡(luò)路由流量。增加其彈性的其他功能包括重試、超時(shí)和截止日期。
- 更快的測(cè)試和部署周期——使用 sidecar 代理進(jìn)行 pod 到 pod 的通信更加簡(jiǎn)單和快速的設(shè)置。他們沒(méi)有將冗余功能編碼到每個(gè)服務(wù)中,而是部署代理并將它們連接到服務(wù)。這加快了整體開(kāi)發(fā)和測(cè)試周期。
開(kāi)源服務(wù)網(wǎng)格列表
有許多可用的開(kāi)源服務(wù)網(wǎng)格。Istio、Linkerd 和 Consul 使用最廣泛。
您將在下面找到有關(guān)每個(gè)平臺(tái)的更多詳細(xì)信息。
Istio
Istio 是由 Google、IBM 和 Lyft 設(shè)計(jì)的開(kāi)源基礎(chǔ)架構(gòu)。它是最早的服務(wù)網(wǎng)格平臺(tái)之一。它使用 Istiod,一個(gè)由多個(gè)組件(Pilot、 Citadel和 Mixer)組成的控制平面來(lái)操作和配置服務(wù)網(wǎng)格。數(shù)據(jù)平面由 使用C++開(kāi)發(fā)的Envoy 代理 組成。HTTP/TCP 連接由 Istio 的負(fù)載均衡器Gateway管理。VirtualService和 DestinationRules 定義路由規(guī)則和策略。
鏈接器
Linkerd 是由云原生計(jì)算基金會(huì) (CNCF) 項(xiàng)目開(kāi)發(fā)的輕量級(jí)開(kāi)源服務(wù)網(wǎng)格。無(wú)需額外配置即可輕松安裝在 任何平臺(tái)之上的Kubernetes集群中。在使用較小的集群時(shí),沒(méi)有配置是有益的。但是,大型項(xiàng)目需要配置的可能性才能成功管理集群中的所有服務(wù)。
它的 sidecar 代理是用 Rust編寫的。Linkerd 將 Controller 用于控制平面,將 Web Deployment 用于儀表板。此外,它利用 Prometheus 探索和存儲(chǔ)指標(biāo),利用 Grafana 渲染和顯示儀表板。
領(lǐng)事連接
Consul 最初被設(shè)計(jì)為服務(wù)發(fā)現(xiàn)工具,后來(lái)演變?yōu)榉?wù)網(wǎng)格。與 Linkerd 不同,Consul Connect 包含大量配置,讓您可以更好地控制網(wǎng)絡(luò)環(huán)境。因此,它比 Linkerd 更難使用。這種開(kāi)源服務(wù)網(wǎng)格與平臺(tái)無(wú)關(guān),這意味著它不需要 Kubernetes 或 Nomad。盡管如此, Nomad 確實(shí)簡(jiǎn)化了通過(guò) Consul 管理微服務(wù)通信的過(guò)程。
微軟的開(kāi)放服務(wù)網(wǎng)格
Open 服務(wù)網(wǎng)格 (OSM) 是一個(gè) CNCF Envoy 項(xiàng)目 ,它實(shí)現(xiàn)了一個(gè)服務(wù)網(wǎng)格接口來(lái)管理和保護(hù)動(dòng)態(tài)微服務(wù)應(yīng)用程序。它使用 Envoy xDS 作為 sidecar 容器。它的主要功能包括流量轉(zhuǎn)移、證書(shū)管理、啟用 mTLS、自動(dòng)邊車注入和訪問(wèn)控制策略。
Kuma
Kuma 是一個(gè)開(kāi)源控制平面,用于在服務(wù)網(wǎng)格中運(yùn)行的 Kubernetes 和 VM。它具有 L4+L7 策略架構(gòu) ,可實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)、路由、 零信任安全 和可觀察性等功能。該平臺(tái)具有高度可擴(kuò)展性且易于設(shè)置。
OpenShift 服務(wù)網(wǎng)格紅帽
紅帽開(kāi)發(fā)了用于管理微服務(wù)應(yīng)用程序的 OpenShift 服務(wù)網(wǎng)格。它通過(guò)Security Context Constraint為網(wǎng)絡(luò)提供多個(gè)接口并提高安全性 。它使用Jager測(cè)量性能, 并使用Kiali 觀察服務(wù)之間的交互 。此外,OpenShift 包括 Red Hat 3scale Istio Mixer Adapter 以提高 API 安全性。
AWS 應(yīng)用網(wǎng)格
亞馬遜開(kāi)發(fā)了 App Mesh,這是一款免費(fèi)的服務(wù)網(wǎng)格軟件,可在微服務(wù)架構(gòu)中管理您的所有服務(wù)。它為您的微服務(wù)應(yīng)用程序提供高可用性和端到端的可見(jiàn)性。AWS App Mesh 與 AWS Fargate、 Amazon ECS、 Amazon EC2、 Amazon EKS、 Kubernetes和 AWS Outposts 集成。借助其 監(jiān)控工具,它會(huì)自動(dòng)導(dǎo)出監(jiān)控?cái)?shù)據(jù)。
網(wǎng)絡(luò)服務(wù)網(wǎng)格
Network 服務(wù)網(wǎng)格是一個(gè)開(kāi)源 CNCF 沙盒項(xiàng)目。它是一個(gè)混合/多云 IP 服務(wù)網(wǎng)格,使用一組簡(jiǎn)單的 API 來(lái)促進(jìn)連接。它在容器內(nèi)運(yùn)行的服務(wù)與外部端點(diǎn)之間建立連接。實(shí)施后,它需要對(duì) Kubernetes 進(jìn)行最小的更改。
綜上所述
服務(wù)網(wǎng)格簡(jiǎn)化了使用微服務(wù)架構(gòu)開(kāi)發(fā)的應(yīng)用程序的管理和維護(hù)。它提高了微服務(wù)架構(gòu)內(nèi)的整體安全性,并確保流量的可見(jiàn)性和可觀察性。總體而言,服務(wù)網(wǎng)格功能增強(qiáng)了性能并加快了開(kāi)發(fā)周期。借助各種可用的開(kāi)源解決方案,找到最適合您的應(yīng)用程序需求的解決方案。