【翻譯】對于API網關的一些質疑和思考

翻譯:Eolinker——國內流行的高效API網關
來源:Medium
這些年來,API網關正在經歷一些有關他們是否真的起到作用的質疑。
? 它們是否集中、共享了資源,從而促進了API對于外部調用的管理?
? 它們是否集群入口(ingress)的控制器,從而可以嚴格管理用戶進入或離開集群嗎?
? 或者它們是否某種API的鏈接器,從而讓API在指定的客戶端上更方便使用?

背景

隨著技術發展日新月異,整個行業通過技術和架構模式的推陳出新進行快速洗牌,如果你說“所有這些都使我頭大”,也可以理解。在本文中,我希望總結出“ API網關”的不同身份,闡明日常使用中,哪些群體可以使用API網關(或許一部人正碰到并在嘗試解決這個問題),并再次強調那些基本原則。

在深入探討之前,讓我們先明確API一詞的含義。
我對API的定義:
一個有著明確定義并且最終目的清晰的接口,通過網絡調用,使軟件開發人員能夠方便安全的對目標數據和功能進行程序訪問。

這些接口抽象了實現它們的技術架構細節。對于這些設計好了的網絡節點,我們希望獲得一定程度的使用指引、以及成熟的向下兼容性。
相反,如果僅僅是可以通過網絡與另一軟件進行交互,并不一定意味著那些遠程節點就是符合此定義的API。許多系統相互交互,但是這些交互比較隨意,并且因為系統之間耦合性和其他一些因素的關系,往往在即時性方面會受到影響。
我們創建API來為業務的各個部分提供完善的抽象服務,以實現新的業務功能以及偶然發現一兩個創新之舉。
在談論API網關時,首先要提到的是API管理。

API管理

許多人從API管理的角度考慮API網關。這是合理的。但是,讓我們先快速看一下此類網關的功能。
通過API 管理,我們嘗試去解決“如何控制給其他人使用當前有的API”的問題,例如,如何跟蹤誰在使用這些API、對誰能使用這些API進行權限控制、建立一套完善的管理措施進行使用授權和認證,同時創建一個服務目錄,可以在設計時使用,提升對API的理解并為以后的有效治理奠定基礎。
我們想解決“我們有一些優秀的API,并且我們希望別人來使用這些API,但是希望他們按照我們的規則去使用”的問題。
API管理當然也起到一些很好的用處,例如,它允許用戶(潛在的API使用者)進行自助服務,簽署不同的API使用計劃(請考慮:在給定時間范圍內,在指定價格點上,每個端點每個用戶的調用次數)。有能力完成這些管理功能的基礎架構就是網關(API流量所經過的)。在網關層,我們可以執行身份驗證,速率限制,指標收集,其它策略執行等一系列操作。


在這個層級,我們考慮的是API(如上定義)是如何最好地管理和允許對其進行訪問。我們沒有考慮其他角度,例如服務器、主機、端口、容器甚至服務(這是另一個很難定義清楚的詞!)。
API管理(以及它們相應的網關),通常會被嚴格把控,并作為一種“平臺組件”、“一體化組件”和API的其他基礎組件一起生效。
需要注意的一件事:我們要小心千萬別讓任何業務邏輯進入這一層。
如前一段所述,API管理是共享的基礎架構,但是由于我們的API流量經過了它,因此它傾向于重新創建“大包大攬的全能型”(認為是企業服務總線)網關,這會導致我們必須與之協調來更改我們的服務。從理論上講,這聽起來不錯。實際上,這最終可能成為組織的瓶頸。

集群入口

為了構建和實現API,我們將重點放在代碼、數據、生產力框架等方面。但是,要想使這些事情中的任何一個產生價值,就必須對其進行測試,部署到生產中并進行監控。當我們開始部署到云平臺時,我們開始考慮部署、容器、服務、主機、端口等,并構建可在此環境中運行的應用程序。我們可能正在設計工作流(CI)和管道(CD),以利用云平臺快速遷移、更改的特點,將其快速展示在客戶面前等等。
在這種環境中,我們可能會構建和維護多個集群來承載我們的應用程序,并且需要某種方式直接來訪問這些集群中的應用程序和服務。以Kubernetes為例思考。我們可能會通過一個Kubernetes 入口控制器來訪問Kubernetes集群(集群中的其它所有內容都無法從外部訪問)。這樣,我們就可以通過定義明確的規則(例如域/虛擬主機、端口、協議等),嚴格控制哪些內容可以進入(甚至離開)我們的集群。
在這個層級,我們可能希望某種“入口網關”成為允許請求和消息進入集群的流量監控人。在這個層級,思考更多的是“我的集群中有此服務,我需要集群外的人能夠調用它”。這可能是服務(公開API)、現有的整體組件、gRPC服務,緩存、消息隊列、數據庫等。有些人選擇將其稱為API網關,而且實際上可能會做比控制流量進/出而言更多的事情,但重點是這個層級的問題是屬于集群操作級別的。


此層級的集群入口控制器由平臺組件操作,但是,這部分基礎架構通常與更加分布式、自助服務的工作流相關聯(正如您對云平臺所期望的那樣)。

API網關模式

關于“ API網關”一詞的另一種擴展是我在聽到該術語時通常想到的,它是與API網關模式最相似的。簡而言之,API網關模式是針對不同類別的使用者來優化API的使用。這個優化涉及一個API間接訪問。您可能會聽到另一個代表API網關模式的術語是“前端的后端”,其中“前端”可以是字符終端(UI)、移動客戶端、IoT客戶端甚至其它服務/應用程序開發人員。
在API網關模式中,我們明顯簡化了對一組API的調用,以模擬針對特定用戶、客戶端或使用者的“應用程序”內聚API?;叵胍幌?,當我們使用微服務構建系統時,“應用程序”的概念就消失了。API網關模式有助于恢復此概念。這里的關鍵是API網關,一旦實現,它將成為客戶端和應用程序的API,并負責與任何后端API和其他應用程序網絡節點(不滿足上述API定義的節點)進行通信交互。
與上一節中的入口控制器不同,此API網關更接近開發人員的視角,而較少關注哪些端口或服務會公開以供集群外使用。此“ API網關”也不同于我們管理現有API的API管理視角。此API網關將對后端的調用聚合在一起,這可能會公開API,但也可能會涉及到一些API描述較少的東西,例如對舊系統的RPC調用,使用不符合“ REST”的協議的調用(如通過HTTP但不使用JSON),gRPC,SOAP,GraphQL、websockets和消息隊列。這種類型的網關也可用來進行消息級轉換、復雜的路由、網絡彈性/回退以及響應的聚合。
如果您熟悉REST API的Richardson Maturity模型,就會發現相比Level 1–3,實現了API網關模式的API網關集成了更多的Level 0請求(及其之間的所有內容)。


這些類型的網關實現仍需要解決速率限制、身份驗證/授權、電路斷路、度量收集、流量路由等問題。這些類型的網關可以在集群邊緣用作集群入口控制器,也可以在集群內部用作應用程序網關。


由于這種類型的API網關與應用和服務的開發緊密相關,因此我們希望開發人員能夠參與幫助指定API網關公開的API,了解所涉及的任何聚合邏輯以及能夠快速測試和更改此API基礎架構的能力。我們還希望運維人員或工程師對API網關的安全性、彈性和可觀察性配置有一些想法。這種層級的基礎架構還必須適應不斷發展的、按需的、自主服務開發人員的工作流??梢酝ㄟ^查看GitOps模型獲取更多這方面信息。

進入服務網格(Service Mesh)

在云基礎架構上運行服務架構的一部分難點是,如何在網絡中構建正確級別的可觀察性和控制。在解決此問題的先前迭代中,我們使用了應用程序庫和一些專業的開發人員治理來實現此目的。但是,在大規模和多種開發語言環境下,服務網格技術的出現提供了更好的解決方案。服務網格通過透明地實現為平臺及其組成服務帶來以下功能:
? 服務到服務(即東西向流量)的彈性
? 安全性包括最終用戶身份驗證、相互TLS、服務到服務RBAC / ABAC
? 黑盒服務的可觀察性(專注于網絡通信),例如請求/秒、請求延遲、請求失敗、熔斷事件、分布式跟蹤等
? 服務到服務速率限制,配額執行等
精明的讀者會認識到,API網關和服務網格在功能上似乎有所重疊。服務網格的目的是通過在L7透明地解決所有服務/應用程序的這些問題。換句話說,服務網格希望融合到服務中(實際上它的代碼并沒有嵌入到服務中)。另一方面,API網關位于服務網格之上,和應用程序一起(L8?)。服務網格為服務、主機、端口、協議等(東西向流量)之間的請求流帶來了價值。它們還可以提供基本的集群入口功能,以將某些此功能引入南北向。但是,這不應與API網關可以帶來北/南流量的功能相混淆。(一個在集群的南北向和一個是在一組應用程序的南北向)
服務網格和API網關在某些方面在功能上重疊,但是在它們在不同層面互補,分別負責解決不同的問題。理想的解決方案是將每個組件(API管理、API網關、服務網格)合適的安置到您的解決方案中,并根據需要在各組件間建立良好的邊界(或在不需要時排除它們)。同樣重要的是找到適合的辦法去分布式的處理這些組件,給到相應的開發人員和運營工作流。即使這些不同組件的術語和標識存在混淆,我們也應該依靠基本原理,并了解這些組件在我們的體系結構中帶來的價值,從而來確定它們如何獨立存在和互補并存。


?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,530評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,407評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,759評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,204評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,415評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,955評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,675評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374

推薦閱讀更多精彩內容