Service Mesh 和 API Gateway 關系深度探討
# 前言
備注1:為了節(jié)約篇幅,我們將直奔主題,假定讀者對 Service Mesh 和 API Gateway 已有基本的了解。 備注2:? 這邊文章更關注于梳理整個脈絡,內(nèi)容不會展開的特別細,尤其是其他文章已經(jīng)詳細闡述的部分。如果您在瀏覽本文之后,還想更深入的了解細節(jié),請繼續(xù)閱讀文章最后的參考資料和推薦閱讀。
# 原本清晰的界限:定位和職責
Service Mesh:微服務的網(wǎng)絡通信基礎設施,負責(系統(tǒng)內(nèi)部的)服務間的通訊; API Gateway:負責將服務以 API 的形式暴露(給系統(tǒng)外部),以實現(xiàn)業(yè)務功能;

位于最底層的是拆分好的原子微服務,以服務的形式提供各種能力; 在原子微服務上是(可選的)組合服務,某些場景下需要將若干微服務的能力組合起來形成新的服務; 原子微服務和組合服務部署于?系統(tǒng)內(nèi)部,在采用 Service Mesh 的情況下,由 Service Mesh 提供服務間通訊的能力; API Gateway 用于將系統(tǒng)內(nèi)部的這些服務暴露給?系統(tǒng)外部,以 API 的形式接受外部請求;
Service Mesh 部署在系統(tǒng)內(nèi)部:因為原子微服務和組合服務通常不會直接暴露給外部系統(tǒng); API Gateway 部署在系統(tǒng)的邊緣:一方面暴露在系統(tǒng)之外,對外提供 API 供外部系統(tǒng)訪問;一方面部署在系統(tǒng)內(nèi)部,以訪問內(nèi)部的各種服務;

東西向通訊:指服務間的相互訪問,其通訊流量在服務間流轉,流量都位于系統(tǒng)內(nèi)部; 南北向通訊:指服務對外部提供訪問,通常是通過 API Gateway 提供的 API 對外部暴露,其通訊流量是從系統(tǒng)外部進入系統(tǒng)內(nèi)部;
解釋一下“東西南北”的由來:如上圖所示,通常在地圖上習慣性的遵循“上北下南,左東右西”的原則。
# 哲學問題:網(wǎng)關訪問內(nèi)部服務,算東西向還是南北向?


# Sidecar:真正的重合點

這個時候 Service Mesh 和 API Gateway 的關系就變得有意思了,因為 Service Mesh 中 Sidecar 的引入,所以前面的“哲學問題”又有了一個新的解法:API Gateway 這次真的可以分拆為兩個獨立部署的物理實體,而不是邏輯上的兩個部分:
API Gateway 本體:實現(xiàn) API Gateway 除了訪問內(nèi)部服務之外的功能; Sidecar:按照 Service Mesh 的標準做法, 我們視 API Gateway 為一個部署于 Service Mesh 中的普通服務,為這個服務 1:1 的部署 Sidecar;


# BFF:把融合進行到底

組合服務還屬于服務的范疇,只是實現(xiàn)機制上組合了多個服務,對外暴露的依然是一個完整和規(guī)范的服務; BFF 不同,BFF 如名字所示,Backend For Frontend,完全是為了前端而存在,核心目標之一是簡化前端的訪問; 對我們今天的話題而言,最關鍵的一點:BFF 完全收口了從外部進入的流量,而組合服務沒有,API Gateway 是可以直接訪問原子微服務的;


和 BFF 部署在一起的,是沒有 API Gateway 功能的普通 Sidecar; API Gateway 和 Sidecar 融合之后,這就是一個“有 API Gateway 功能的大 Sidecar”(或者是“有 Sidecar 功能的特殊 API Gateway”):雖然扮演了 API Gateway 的角色,但本質上依然包含一個完整功能的 Sidecar,和 BFF 自帶的 Sidecar 是等同的;

流量直接打到 BFF 上(BFF 前面可能會掛其他的網(wǎng)絡組件提供負載均衡等功能); BFF 的 Sidecar 接收流量,完成 API Gateway 的功能,然后將流量轉給 BFF; BFF 通過 Sidecar 調(diào)用內(nèi)部服務(和沒有合并時一致);

# 總結
作者:敖小劍
來源:金融級分布式架構
版權申明:內(nèi)容來源網(wǎng)絡,僅供分享學習,版權歸原創(chuàng)者所有。除非無法確認,我們都會標明作者及出處,如有侵權煩請告知,我們會立即刪除并表示歉意。謝謝!
END
推薦閱讀 一鍵生成Springboot & Vue項目!【畢設神器】
Java可視化編程工具系列(一)
Java可視化編程工具系列(二)
順便給大家推薦一個GitHub項目,這個 GitHub 整理了上千本常用技術PDF,絕大部分核心的技術書籍都可以在這里找到,
GitHub地址:https://github.com/javadevbooks/books
電子書已經(jīng)更新好了,你們需要的可以自行下載了,記得點一個star,持續(xù)更新中..
評論
圖片
表情

