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

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

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

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

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