衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Service Mesh和API網關正在逐步融合

jf_ro2CN3Fa ? 2022-10-10 16:39 ? 次閱讀

1 原本清晰的界限:定位和職責

2 哲學問題:網關訪問內部服務,算東西向還是南北向?

3 Sidecar:真正的重合點

4 BFF:把融合進行到底

5 總結

關于 Service Mesh 和 API Gateway 之間的關系,這個問題過去兩年間經常被問起,社區也有不少文章和資料給出解答。其中不乏 Christian Posta 這樣的網紅給出過深度介紹。我在這里做一個資料的整理和匯總,結合個人的理解給出一些看法。另外在本文最后,介紹螞蟻金服在 Service Mesh 和 API Gateway 融合的這個最新領域的一些開創性的實踐和探索,希望給大家一個更有體感的認知。

為了節約篇幅,我們將直奔主題,假定讀者對 Service Mesh 和 API Gateway 已有基本的了解。

1 原本清晰的界限:定位和職責

首先,Service Mesh 和 API Gateway 在功能定位和承擔的職責上有非常清晰的界限:

Service Mesh:微服務的網絡通信基礎設施,負責(系統內部的)服務間的通訊;

API Gateway:負責將服務以 API 的形式暴露(給系統外部),以實現業務功能;

如下圖所示:

cb9a7992-3bb3-11ed-9e49-dac502259ad0.png

從功能和職責上說:

位于最底層的是拆分好的原子微服務,以服務的形式提供各種能力;

在原子微服務上是(可選的)組合服務,某些場景下需要將若干微服務的能力組合起來形成新的服務;

原子微服務和組合服務部署于 系統內部,在采用 Service Mesh 的情況下,由 Service Mesh 提供服務間通訊的能力;

API Gateway 用于將系統內部的這些服務暴露給 系統外部,以 API 的形式接受外部請求。

從部署上說:

Service Mesh 部署在系統內部:因為原子微服務和組合服務通常不會直接暴露給外部系統;

API Gateway 部署在系統的邊緣:一方面暴露在系統之外,對外提供 API 供外部系統訪問;一方面部署在系統內部,以訪問內部的各種服務。

在這里引入兩個使用非常廣泛的術語:

cbd718fc-3bb3-11ed-9e49-dac502259ad0.png

東西向通訊:指服務間的相互訪問,其通訊流量在服務間流轉,流量都位于系統內部;

南北向通訊:指服務對外部提供訪問,通常是通過 API Gateway 提供的 API 對外部保羅,其通訊流量是從系統外部進入系統內部。

解釋一下“東西南北”的由來:如上圖所示,通常在地圖上習慣性的遵循“上北下南,左西右東”的原則。

總結:Service Mesh 和 API Gateway 在功能和職責上分工明確,界限清晰。但如果事情就這么結束,也就不會出現 Service Mesh 和 API Gateway 關系的討論了,自然也不會有本文。

問題的根源在哪里?

2 哲學問題:網關訪問內部服務,算東西向還是南北向?

如下圖所示,圖中黃色的線條表示的是 API Gateway 訪問內部服務:

cb9a7992-3bb3-11ed-9e49-dac502259ad0.png

問題來了,從流量走向看:這是外部流量進入系統后,開始訪問對外暴露的服務,應該屬于“南北向”通訊,典型如上圖的畫法。但從另外一個角度,如果我們將 API Gateway 邏輯上拆分為兩個部分,先忽略對外暴露的部分,單獨只看 API Gateway 訪問內部服務的部分,這時可以視 API Gateway 為一個普通的客戶端服務,它和內部服務的通訊更像是“東西向”通訊:

cbfe1754-3bb3-11ed-9e49-dac502259ad0.png

所以,API Gateway 作為一個客戶端訪問內部服務時,到底算南北向還是東西向,就成為一個哲學問題:完全取決于我們如何看待 API Gateway ,是作為一個整體,還是邏輯上分拆為對內對外兩個部分。

這個哲學問題并非無厘頭,在 API Gateway 的各種產品中,關于如何實現 “API Gateway 作為一個客戶端訪問內部服務” ,就通常分成兩個流派:

涇渭分明:視 API Gateway 和內部服務為兩個獨立事物,API Gateway 訪問內部服務的通訊機制自行實現,獨立于服務間通訊的機制;

兼容并濟:視 API Gateway 為一個普通的內部服務的客戶端,重用其內部服務間通訊的機制。

而最終決策通常也和產品的定位有關:如果希望維持 API Gateway 的獨立產品定位,希望可以在不同的服務間通訊方案下都可以使用,則通常選擇前者,典型如 Kong;如果和服務間通訊方案有非常深的淵源,則通常選擇后者,典型如 Spring Cloud 生態下的 Zuul 和 Spring Cloud Gateway。

但無論選擇哪個流派,都改變不了一個事實,當 “API Gateway 作為一個客戶端訪問內部服務” 時,它的確和一個普通內部服務作為客戶端去訪問其他服務沒有本質差異:服務發現、負載均衡、流量路由、熔斷、限流、服務降級、故障注入、日志、監控、鏈路追蹤、訪問控制、加密、身份認證…… 當我們把網關訪問內部服務的功能一一列出來時,發現幾乎所有的這些功能都是和服務間調用重復。

這也就造成了一個普遍現象:如果已有一個成熟的服務間通訊框架,再去考慮實現 API Gateway,重用這些重復的能力就成為自然而然的選擇。典型如前面提到的 Spring Cloud 生態下的 Zuul 以及后面開發的 Spring Cloud Gateway,就是以重用類庫的方式實現了這些能力的重用。

這里又是一個類似的哲學問題:當 “API Gateway 作為一個客戶端訪問內部服務” 時,它以重用類庫的方式實現了代碼級別的能力重用,相當于自行實現了一個和普通服務間通訊方案完全一樣的客戶端,那這個“客戶端”發出來的流量算東西向還是南北向?

答案不重要。

3 Sidecar:真正的重合點

在進入 Service Mesh 時代之后,Service Mesh 和 API Gateway 的關系開始是這樣:

功能和職責清晰劃分;

客戶端訪問服務的功能高度重疊。

此時兩者的關系很清晰,而且由于當時 Service Mesh 和 API Gateway 是不同的產品,兩者的重合點只是在功能上。

而隨著時間的推移,當 Service Mesh 產品和 API Gateway 產品開始出現相互滲透時,兩者的關系就開始變得曖昧。

在 Service Mesh 出現之后,如何為基于 Service Mesh 的服務選擇合適的 API Gateway 方案,就慢慢開始提上日程,而其中選擇重用 Service Mesh 的能力也自然成為一個探索的方向,并逐步出現新式 API Gateway 產品,其想法很直接:

如何融合東西向和南北向的通訊方案?

其中的一個做法就是基于 Service Mesh 的 Sidecar 來實現 API Gateway,從而在南北向通訊中引入 Service Mesh 這種東西向通訊的方案。這里我們不展開細節,我這里援引一個圖片(鳴謝趙化冰同學)來解釋這個方案的思路:

cc0b3cfe-3bb3-11ed-9e49-dac502259ad0.png

這個時候 Service Mesh 和 API Gateway 的關系就變得有意思了,因為 Service Mesh 中 Sidecar 的引入,所以前面的“哲學問題”又有了一個新的解法:API Gateway 這次真的可以分拆為兩個獨立部署的物理實體,而不是邏輯上的兩個部分:

API Gateway 本體:實現 API Gateway 除了訪問內部服務之外的功能;

Sidecar:按照 Service Mesh 的標準做法, 我們視 API Gateway 為一個部署于 Service Mesh 中的普通服務,為這個服務 1:1 的部署 Sidecar。

cc33536a-3bb3-11ed-9e49-dac502259ad0.png

在這個方案中,原來用于 Service Mesh 的 Sidecar,被用在了 API Gateway 中,替代了 API Gateway 中原有的客戶端訪問的各種功能。這個方案讓 API Gateway 的實現簡化了很多,也實現了東西向和南北向通訊能力的重用和融合,而 API Gateway 可以更專注于 “API Management” 的核心功能。

此時 Service Mesh 和 API Gateway 的關系就從“涇渭分明”變成了“兼容并濟”。

而采用這個方案的公司,通常都是先有 Service Mesh 產品,再基于 Service Mesh 產品規劃(或者重新規劃) API Gateway 方案,典型如螞蟻金服的 SOFA Gateway 產品是基于 MOSN,而社區開源產品 Ambassador 和 Gloo 都是基于 Envoy。

上述方案的優勢在于 API Gateway 和 Sidecar 獨立部署,職責明確,架構清晰。但是,和 Service Mesh 使用Sidecar 被質疑多一跳會造成性能開銷影響效率一樣,API Gateway 使用 Sidecar 也被同樣的質疑:多了一跳……

解決“多一跳”問題的方法簡單而粗暴,基于 Sidecar,將 API Gateway 的功能加進來。這樣 API Gateway 本體和 Sidecar 再次合二為一:

cc4220de-3bb3-11ed-9e49-dac502259ad0.png

至于走到這一步之后,Service Mesh 和 API Gateway 是什么關系:這到底算是 Service Mesh/Sidecar 融合了 API Gateway,還是 API Gateway 融合了 Service Mesh/Sidecar?這個問題就像斑馬到底是白底黑紋還是黑底白紋一樣,見仁見智。

4 BFF:把融合進行到底

BFF(Backend For Frontend)的引入會讓 Service Mesh 和 API Gateway 走到一個更加親密的地步。

先來看看常規的 BFF 的玩法:

ccceb328-3bb3-11ed-9e49-dac502259ad0.png

在這里,多增加了一個 BFF 層,介于 API Gateway 和內部服務(包括組合服務和原子微服務)之間。注意 BFF 的工作模式和組合服務很類似,都是組合多個服務。但差別在于:

組合服務還屬于服務的范疇,只是實現機制上組合了多個服務,對外暴露的依然是一個完整和規范的服務;

BFF 不同,BFF 如名字所示,Backend For Frontend,完全是為了前端而存在,核心目標之一是簡化前端的訪問;

對我們今天的話題而言,最關鍵的一點:BFF 完全收口了從外部進入的流量,而組合服務沒有,API Gateway 是可以直接訪問原子微服務的。

“BFF 完全收口外部流量”,這一點在 API Gateway 和 Sidecar 融合之后,會變得很有想象空間,我們先看按照前面的融合方式,在有 BFF 的情況下,API Gateway 和 Sidecar 融合后的情景:

ccda6c04-3bb3-11ed-9e49-dac502259ad0.png

放大一點,單獨看 API Gateway 和 BFF:

ccfbaf4a-3bb3-11ed-9e49-dac502259ad0.png

注意到,流量從被 API Gateway 接收,到進入 BFF 在這個流程中,這個請求路徑中有兩個 Sidecar:

和 BFF 部署在一起的,是沒有 API Gateway 功能的普通 Sidecar;

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

所以,問題來了:為什么要放兩個 Sidecar 在流程中,縮減到一個會怎么樣?我們嘗試將兩個 Sidecar 合二為一,去掉 BFF 自帶的 Sidecar,直接把扮演 API Gateway 的 Sidecar 給 BFF 用:

cd04fa96-3bb3-11ed-9e49-dac502259ad0.png

此時的場景是這樣:

流量直接打到 BFF 上(BFF 前面可能會掛其他的網絡組件提供負載均衡等功能);

BFF 的 Sidecar 接收流量,完成 API Gateway 的功能,然后將流量轉給 BFF;

BFF 通過 Sidecar 調用內部服務(和沒有合并時一致)。

cd269232-3bb3-11ed-9e49-dac502259ad0.png

注意這里有一個關鍵點,在前面時特意注明的:“BFF 完全收口外部流量”。這是前提條件,因為原有的 API Gateway 集群已經不再存在,如果 BFF 沒能收口全部流量,則這些未能收口的流量會找不到 API Gateway。當然,如果愿意稍微麻煩一點,在部署時清晰的劃定需要暴露給外界的服務,直接在這些服務上部署帶 API Gateway 功能的 Sidecar,也是可行的,只是管理上會比 BFF 模式要復雜一些。

另外,在部署上,按照上面的方案,我們會發現:API Gateway“消失”了 —— 不再有一個明確物理部署的 API Gateway 的集群,常規的中心化的網關在這個方案中被融合到每一個 BFF 的實例中,從而實現另外一個重要特性:去中心化。

上述 Service Mesh 和 API Gateway 融合的方案,并未停留在紙面上。

在螞蟻金服內部,我們基于 Service Mesh 和 API Gateway 融合 + 去中心化的思路,進行過開創性的實踐和探索。以支付寶移動網關為例,在過去十年間,網關經歷了從單體到微服務,從中心化到去中心化,從共享的 gateway.jar 包到利用 MOSN 實現網關 Mesh 化/ Sidecar 化,最終演變成了這樣一個方案:

cd34f17e-3bb3-11ed-9e49-dac502259ad0.png

5 總結

本文總結了 Service Mesh 和 API Gateway 的關系,整體上說兩者的定位和職責“涇渭分明”,但在具體實現上,開始出現融合的趨勢:早期傳統方式是類庫級別的代碼復用,最新趨勢是 API Gateway 和 Sidecar 合二為一。

后者的發展才剛剛起步,包括在螞蟻金服我們也是才開始探索這個方向,但是相信在未來一兩年間,社區可能會有更多的類似產品形態出現。

補充介紹一下文中多次提到的“MOSN”:

MOSN 是 Modular Open Smart Network 的簡稱, 是一款使用 Go 語言開發的網絡代理軟件,由螞蟻金服開源并經過幾十萬容器的生產級驗證。MOSN 作為云原生的網絡數據平面,旨在為服務提供多協議、模塊化、智能化、安全的代理能力。MOSN 可以與任何支持 xDS API 的 Service Mesh 集成,亦可以作為獨立的四、七層負載均衡,API Gateway、云原生 Ingress 等使用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 網關
    +關注

    關注

    9

    文章

    4586

    瀏覽量

    51493
  • API
    API
    +關注

    關注

    2

    文章

    1510

    瀏覽量

    62394
  • Mesh
    +關注

    關注

    5

    文章

    204

    瀏覽量

    29907
  • Service
    +關注

    關注

    0

    文章

    30

    瀏覽量

    13813
  • 云原生
    +關注

    關注

    0

    文章

    252

    瀏覽量

    7985

原文標題:觀點:Service Mesh和API網關正在逐步融合

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    什么是Service MeshService Mesh的演化形態

    Service Mesh作為下一代微服務技術的代名詞,初出茅廬卻深得人心一鳴驚人,大有一統微服務時代的趨勢。
    發表于 03-04 11:01 ?1636次閱讀
    什么是<b class='flag-5'>Service</b> <b class='flag-5'>Mesh</b>?<b class='flag-5'>Service</b> <b class='flag-5'>Mesh</b>的演化形態

    淺談Service Mesh體系中的Envoy

    摘要: 提到Envoy就不得不提Service Mesh,說到Service Mesh就一定要談及微服務了,那么我們就先放下Envoy,簡單了解下微服務、
    發表于 07-12 17:25

    【平頭哥藍牙Mesh網關開發套件試用體驗】藍牙mesh網關接入網絡

    ://living.aliyun.com/在生活物聯網平臺創建項目:打開項目,創建產品:最后添加測試設備:藍牙mesh網關配網后重啟:藍牙mesh網關已經接入生活物聯網,已經能看到在線
    發表于 09-22 12:04

    ble mesh provisioner disable后無法控制node怎么解決?

    我們正在做 ble mesh網關,基于 ble_mesh_provisioner,驗證了一下能將設備匹配進來,并能控制設備。疑惑: 當調用如下的
    發表于 03-09 08:35

    Service Mesh服務網格新生代

    服務網格 Service Mesh,服務網格,也有人翻譯為服務嚙合層。這貌似是今年才出來的新名詞?在2017年之前沒有聽過,雖然類似的產品已經存在挺長時間。 什么是Service Mesh
    發表于 09-27 11:15 ?0次下載
    <b class='flag-5'>Service</b> <b class='flag-5'>Mesh</b>服務網格新生代

    什么是API網關為什么需要API網關

    API網關可以看做系統與外界聯通的入口,我們可以在網關進行處理一些非業務邏輯的邏輯,比如權限驗證,監控,緩存,請求路由等等。
    發表于 12-23 09:57 ?1.3w次閱讀
    什么是<b class='flag-5'>API</b><b class='flag-5'>網關</b>為什么需要<b class='flag-5'>API</b><b class='flag-5'>網關</b>

    智能Mesh Web HART Mote Serial API指南

    智能Mesh Web HART Mote Serial API指南
    發表于 05-09 18:36 ?2次下載
    智能<b class='flag-5'>Mesh</b> Web HART Mote Serial <b class='flag-5'>API</b>指南

    智能Mesh IP V經理API指南

    智能Mesh IP V經理API指南
    發表于 05-18 17:35 ?1次下載
    智能<b class='flag-5'>Mesh</b> IP V經理<b class='flag-5'>API</b>指南

    智能Mesh Web HART經理API指南

    智能Mesh Web HART經理API指南
    發表于 05-25 10:14 ?2次下載
    智能<b class='flag-5'>Mesh</b> Web HART經理<b class='flag-5'>API</b>指南

    藍牙網關與藍牙Mesh之間的區別

    1、藍牙網關的定義 藍牙網關是一個集成藍牙 BLE、WiFi 和以太網的網關設備,藍牙 BLE 與 WiFi之間通過串口實現通信,可靈活應用于各種物聯網場景。 2、藍牙網關與藍牙
    的頭像 發表于 07-10 14:32 ?3.9w次閱讀

    Service Mesh是什么?

    在了解Service Mesh之前,我們先來討論下這樣一個問題:“微服務架構的核心技術問題是什么?“。 我們知道在將整個軟件系統架構升級為微服務模式以后,服務(這里是指獨立對外提供服務的進程
    的頭像 發表于 03-23 14:07 ?794次閱讀
    <b class='flag-5'>Service</b> <b class='flag-5'>Mesh</b>是什么?

    為什么需要 API 網關

    API 網關API 全生命周期管理的關鍵基礎組件,負責生產環境中 API 的配置、發布、版本回滾、安全、負載均衡等。API
    的頭像 發表于 05-04 17:47 ?831次閱讀
    為什么需要 <b class='flag-5'>API</b> <b class='flag-5'>網關</b>?

    企業怎么選擇API網關

    ? 一、API網關的用處 API網關我的分析中會用到以下三種場景。 1、Open API 企業需要將自身數據、能力等作為開發平臺向外開放,通
    的頭像 發表于 05-23 11:05 ?706次閱讀
    企業怎么選擇<b class='flag-5'>API</b><b class='flag-5'>網關</b>

    藍牙網關和藍牙mesh網關區別

    藍牙網關和藍牙Mesh網關是兩種不同的技術,它們在物聯網(IoT)領域中扮演著重要的角色。 藍牙網關和藍牙Mesh
    的頭像 發表于 10-18 10:33 ?3584次閱讀

    OpenAI宣布API恢復運行,ChatGPT正在逐步回歸

    近日,OpenAI官方發布了一則重要更新說明,宣布其API系統現已全面恢復運行,同時確認ChatGPT服務正在逐步恢復中。這一消息對于眾多依賴OpenAI服務的用戶來說,無疑是一個好消息。 早些時候
    的頭像 發表于 12-28 14:41 ?436次閱讀
    大玩家百家乐现金网| 神娱乐百家乐官网的玩法技巧和规则| 百家乐官网注册开户送现金| 优博百家乐娱乐城| 百家乐官网磁力录| 牌九百家乐的玩法技巧和规则| 百家乐官网赢率| 大发888什么赢钱快| 旅百家乐官网赢钱律| 百家乐官网技巧大全| 大发888娱乐免费试玩| 百家乐技巧微笑心法| 狮威百家乐官网的玩法技巧和规则| 关于百家乐官网切入点| 优博代理| 威尼斯人娱乐城极好| 百家乐二游戏机| 百家乐官网游戏什么时间容易出| 百家乐官网街机游戏下载| 棋牌游戏平台开发| 百家乐是娱乐场最不公平的游戏| 网上百家乐赢钱公式| 百家乐官网娱乐官网| 永利高百家乐官网会员| 天天乐娱乐城| 大发888游戏平台黄埔网| 百家乐娱乐平台会员注册| 百家乐最低压多少| 康莱德百家乐官网的玩法技巧和规则 | 百家乐官网高手长胜攻略| 大发888娱乐总代理qq| 上海百家乐的玩法技巧和规则| 百家乐玩法与规则| 金都百家乐官网的玩法技巧和规则| 真人百家乐官网什么平台| 开原市| 豪门网上娱乐| 大发888娱乐城在线客服| 威尼斯人娱乐城代理注册| 利都百家乐国际娱乐场开户注册| 澳门百家乐娱乐城打不开|