服務網(wǎng)格和API網(wǎng)關在微服務架構中的作用
以及如何充分利用兩者

如果您從事微服務,那么您可能已經(jīng)多次聽說過這兩個術語。 人們常常在兩者之間感到困惑。 在本文中,我將詳細討論服務網(wǎng)格和API網(wǎng)關,并討論何時使用。
網(wǎng)絡層刷新
在深入研究服務網(wǎng)格和API網(wǎng)關之前,讓我們重新訪問網(wǎng)絡層。 以下是OSI網(wǎng)絡層模型:

進行此更新的原因是,我們將在下一部分中討論其中的一些層。
服務網(wǎng)格
服務網(wǎng)格是一種管理分布式軟件系統(tǒng)中服務到服務通信的技術。 服務網(wǎng)格管理東西向的網(wǎng)絡通信。 東西向流量表示數(shù)據(jù)中心,Kubernetes集群或分布式系統(tǒng)內部的流量。
服務網(wǎng)格包含兩個重要組件:
- 控制平面
- 數(shù)據(jù)平面
駐留在應用程序旁邊的代理稱為數(shù)據(jù)平面,而協(xié)調代理行為的管理組件稱為控制平面。

服務網(wǎng)格使您可以將應用程序的業(yè)務邏輯與網(wǎng)絡,可靠性,安全性和可觀察性分開。
網(wǎng)絡和流量管理
服務網(wǎng)格允許您執(zhí)行動態(tài)服務發(fā)現(xiàn)。 Sidecar代理可以幫助您進行負載平衡和速率限制。 它可以幫助您進行流量拆分,以執(zhí)行A / B類型的測試,這對于發(fā)布Canary版本很有幫助。
可觀察性和可靠性
服務網(wǎng)格支持分布式跟蹤,可幫助您進行高級監(jiān)視(請求數(shù),成功率和響應延遲)和調試。 它甚至具有利用服務間通信來更好地理解通信的能力。
由于服務網(wǎng)格提供了運行狀況檢查,重試,超時和電路中斷,因此可以提高應用程序的基準可靠性。
安全
服務網(wǎng)格允許服務之間的相互TLS,這有助于提高服務到服務通信的安全性。 您還可以將訪問控制列表(ACL)實施為安全策略。
真正的服務網(wǎng)格/邊車代理支持廣泛的服務,并實現(xiàn)L4 / L7流量策略。
市場上有許多可用的服務網(wǎng)格。 以下是其中一些:
- Istio
- Linkerd
- uma
- consul
您可以在互聯(lián)網(wǎng)上找到許多比較上面列出的服務網(wǎng)格的文章。
API網(wǎng)關
API網(wǎng)關充當進入集群,數(shù)據(jù)中心或一組分布式服務的單個入口點。 在網(wǎng)絡拓撲中,通常稱為南北向流量。 通常,移動客戶端屬于這種類型的網(wǎng)絡流量。
人們最終很有可能最終會使用API網(wǎng)關在同一數(shù)據(jù)中心內部署的兩種產(chǎn)品之間進行通信。 在這種情況下,交通類型可以是東西向。
API網(wǎng)關接收來自客戶端的調用,并將其路由到適當?shù)姆铡?在這樣做的同時,它也可以翻譯協(xié)議。

使用API網(wǎng)關有很多好處:
- 抽象:API網(wǎng)關可以抽象其下的微服務的復雜性,并為客戶端創(chuàng)建統(tǒng)一的體驗
- 身份驗證:API網(wǎng)關可以處理身份驗證并將令牌信息傳遞給服務
- 流量控制:API網(wǎng)關可以限制入站和出站API流量
- API監(jiān)控/獲利:如果您打算通過API獲利,API網(wǎng)關可以通過提供監(jiān)視客戶端的API請求/響應的功能來幫助您做到這一點
- 轉換:API網(wǎng)關可以幫助轉換/轉換API請求/響應。 它還可以幫助協(xié)議翻譯。
API網(wǎng)關通常僅關注L7策略。
API網(wǎng)關的類型
從部署的角度來看,可以使用兩種方式使用API網(wǎng)關:
- 內部API網(wǎng)關:充當一組服務或產(chǎn)品范圍的網(wǎng)關
- Edge API網(wǎng)關:充當外部組織的消費者或移動客戶端的網(wǎng)關
市場上有許多API網(wǎng)關。 以下是其中一些:
- Apigee
- NGINX的API網(wǎng)關
- Software AG的API網(wǎng)關
何時使用什么
現(xiàn)在您已經(jīng)了解了什么是服務網(wǎng)格和API網(wǎng)關,讓我們嘗試了解何時使用什么。
何時使用服務網(wǎng)格
- 當您需要在同一產(chǎn)品范圍內通過安全性和監(jiān)視來實現(xiàn)L4 / L7服務通信時
- 何時可以為每個單個服務實例及其副本部署Sidecar代理
- 當服務可以共享相同的CA證書以建立安全的通信時(跨各種產(chǎn)品可能無法實現(xiàn))
何時使用API網(wǎng)關
- 當您需要通過各種產(chǎn)品的安全性和監(jiān)視來實現(xiàn)L7服務通信時
- 當您希望通過/不通過貨幣化將API公開為產(chǎn)品時
- 當您想向開發(fā)人員提供完整的API生命周期管理時
- 當您需要翻譯服務通信協(xié)議時
服務網(wǎng)格和API網(wǎng)關一起
服務網(wǎng)格和API網(wǎng)關很可能可以共存。 下圖展示了服務網(wǎng)格和API網(wǎng)關共存的場景:
