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

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

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

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

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