隨著云繼續(xù)成為現(xiàn)代企業(yè)的主要特征,人們重新開始關注確定您的工作負載以及整個組織是否已準備好在云原生環(huán)境中運行。由于其中涉及各種考慮因素,組織需要仔細分析從供應商到編排工具的所有內(nèi)容。在這里,我們將深入研究其中一個考慮因素的細節(jié):云原生 API 網(wǎng)關。由于我們已經(jīng)在“DevOps 云原生工具格局的完整概述”中介紹了 API 網(wǎng)關,本文將更深入地研究它們的工作原理。
什么是 API 網(wǎng)關?
API 網(wǎng)關的確切定義很難確定;人們使用各種術(shù)語來定義其影響,例如單點入口、接口和反向代理。盡管如此,這個想法仍然是一樣的——API 網(wǎng)關作為一個層將您的客戶端和服務分開。雖然傳統(tǒng)方法意味著客戶端將他們的請求直接定向到微服務,但現(xiàn)在請求由網(wǎng)關處理,然后網(wǎng)關將請求傳遞到適當?shù)姆铡PI網(wǎng)關作為事實上的客戶端請求協(xié)調(diào)器和編排器,簡化了分布式系統(tǒng)的實現(xiàn)。它對于試圖從單片系統(tǒng)架構(gòu)轉(zhuǎn)向微服務的組織特別有用。
API網(wǎng)關有什么用?
API 網(wǎng)關越來越受歡迎的主要原因之一是微服務軟件的使用同時增加。與獨立的整體設計相反,微服務將整個應用程序劃分為各種松散連接的服務。這些微服務中的每一個都是自給自足的,并且具有獨特的功能。然而,正是這一重要特性激發(fā)了對 API 網(wǎng)關的需求。
不要誤會我們的意思——微服務提供了大量的好處,因為它們使開發(fā)、部署和維護變得異常容易。但是當涉及到請求處理時,擁有多個微服務會使客戶端很難快速訪問特定服務。
這就是 API 網(wǎng)關的用武之地;通過充當反向代理,它解決了客戶端問題并允許輕松訪問各種微服務。使用 API 服務器,客戶端只需發(fā)送一個單獨的請求。
它還包含一個 HTTP 服務器,該服務器具有與每個微服務關聯(lián)的路由。收到請求后,網(wǎng)關立即映射整個請求并識別傳遞請求所需的相關服務。
事實上,它甚至可以將請求參數(shù)映射到特定微服務所需的輸入?yún)?shù)。其中一些要求輸入?yún)?shù)驗證作為處理請求的必要先決條件,API 網(wǎng)關可以確保此步驟不需要人工干預。
路由到此結(jié)束——API 網(wǎng)關的主要功能。
API 網(wǎng)關還可以執(zhí)行哪些其他功能?
盡管 API 對現(xiàn)代組織應用程序的重要性怎么強調(diào)都不為過,但太多會證明是管理上的一個難題。API 網(wǎng)關為用戶提供了大量管理功能,有助于完成安全等核心任務。這是一個廣泛的功能列表:
驗證
API 身份驗證是一項重要的安全檢查,通常在訪問每個單獨的微服務時都需要進行。有了 API 網(wǎng)關,就可以在網(wǎng)關本身對調(diào)用進行身份驗證。
這樣,即使客戶端請求多個微服務訪問,網(wǎng)關也會保證 API 調(diào)用只認證一次。這大大減少了延遲問題,并在整個應用程序中提供了一致的身份驗證檢查。
指標收集
開發(fā)人員長期以來一直希望在請求匯集的地方收集分析,因為這提供了處理所有請求的完美位置。有了 API 網(wǎng)關,您將獲得一個全面的“網(wǎng)關”,所有流程都將不可避免地通過該網(wǎng)關。
利用這種分析能力可以為用戶提供更深入的洞察力,并最終實現(xiàn)更多的控制。例如,您可以分析特定用戶轉(zhuǎn)發(fā)的請求數(shù)或通過網(wǎng)關中繼到各個微服務的請求數(shù)。作為回報,您可以使用此信息來實施速率限制。這使您可以拒絕發(fā)出過多請求的用戶,以免使微服務負擔過重。
響應轉(zhuǎn)換
訪問現(xiàn)代應用程序的設備多種多樣,從功能強大的計算機到智能手機和平板電腦——因此,每個用戶都需要訪問不同的信息并滿足不同的要求。例如,移動用戶需要的數(shù)據(jù)少于來自桌面系統(tǒng)的客戶端請求。由于 API 網(wǎng)關是唯一的入口來源,它知道哪個客戶端需要什么。此信息隨后可用于進行內(nèi)部調(diào)用,并根據(jù)不同客戶的要求將數(shù)據(jù)提供給他們。
輸入驗證
API 網(wǎng)關還具備處理簡單邏輯的能力。以輸入驗證為例,網(wǎng)關在將請求發(fā)送到微服務之前驗證請求是否包含所有必要的數(shù)據(jù)。此外,它還會檢查請求的格式和代碼是否正確,以便它以準備執(zhí)行狀態(tài)到達服務。
負載均衡
您需要確保沒有節(jié)點因請求而負擔過重,以便您的應用程序繼續(xù)平穩(wěn)運行。API 網(wǎng)關可以被編程為足夠智能,以平衡特定微服務中存在的不同節(jié)點之間的負載。通過監(jiān)控整個負載,它可以作為一個高效的負載平衡器。
服務發(fā)現(xiàn)和請求調(diào)度
這是另一個特性,源于 API 網(wǎng)關充當客戶端訪問微服務的反向代理。在一個典型的過程中,它會收到一個請求并將其傳遞給所有需要的微服務。一旦他們用答案做出回應,網(wǎng)關就會在結(jié)果到達客戶端之前組合這些結(jié)果。
在此過程中,網(wǎng)關會記錄特定微服務的每個節(jié)點所用的基本響應時間——這在根據(jù)優(yōu)先級對 API 調(diào)用進行分段時會派上用場。對于高優(yōu)先級調(diào)用,請求可以路由到響應最快的節(jié)點。
斷路器
就像傳統(tǒng)的斷路器一樣,這個隱喻斷路器也會關閉受影響的電路,直到問題得到解決。這是您需要知道的;在應用程序中,數(shù)據(jù)加載或由于任何其他問題導致的組件故障并不罕見。為了處理這種情況,API 網(wǎng)關使用“斷路器”方法。
一旦達到特定的請求閾值,發(fā)生故障的組件將停止從網(wǎng)關接收更多數(shù)據(jù)。這不僅為分析日志和通過更新推送修復贏得了時間,還有效地關閉了整個電路,直到核心問題得到解決。
API 網(wǎng)關有什么好處?
如果 API 網(wǎng)關提供的附加功能不足以讓您信服,那么讓我們告訴您它們還具有其他各種好處。從長遠來看,這些功能允許您將松散耦合的微服務打包到一個簡潔的應用程序中。以下是 API 網(wǎng)關提供的好處:
更簡潔的客戶端代碼
隨著客戶端和后端服務的分離,客戶端不需要知道每個微服務是如何組成的。通過 API 網(wǎng)關處理所有請求,代碼維護變得更加簡單。這也不需要單獨的微服務來跟蹤端點或處理請求失敗。這節(jié)省了時間,因為開發(fā)人員不需要在他們的應用程序中編寫“邏輯”代碼,從而增強消費者體驗。
減少延遲
即使來自客戶端應用程序的單個請求也可能需要同時調(diào)用多個微服務的 API。以亞馬遜為例;一個簡單的搜索可能會返回各種產(chǎn)品的列表、它們的庫存情況和評論。如果不是 API 網(wǎng)關,客戶端請求將多次訪問每個微服務。結(jié)果是延遲顯著增加,從而導致用戶體驗不佳。
增強的應用程序安全性
如果開發(fā)人員選擇不包含 API 網(wǎng)關,那么他們必須讓每個微服務能夠?qū)λ麄冇龅降目蛻舳苏埱筮M行自己的安全相關分析。對于開發(fā)人員而言,這意味著需要花費數(shù)小時的額外編碼時間才能將這種復雜的決策制定技能添加到代碼中。這是必要的,因為在沒有單一入口點的情況下,每個微服務都必須回答以下問題:
- 請求是否被授權(quán)?
- 溝通渠道安全嗎?
- 請求是否包含所有必需的參數(shù)?
- 客戶端是否發(fā)出了太多請求?
回答所有這些問題不可避免地會使代碼更加復雜。因此,它越復雜,出現(xiàn)“錯誤”的可能性就越大。從操作員的角度來看,復雜的代碼需要增加維護和停機時間。這不僅會嚴重影響用戶體驗,還會增加不良行為者可用的總體攻擊面。所有這些問題都可以通過集中的入口點來避免。API 網(wǎng)關確保所有身份驗證和安全檢查都在一個地方處理,使后端微服務不受影響,從而提供流暢的用戶體驗并提高安全性。
流行的 API 網(wǎng)關
市場上有各種開源 API 網(wǎng)關。以下是全球數(shù)以千計的開發(fā)人員正在使用的最受歡迎的列表:
Kong
作為最早的云原生 API 網(wǎng)關之一,Kong是該領域的熱門平臺。網(wǎng)關主要用 Lua 編寫,由開源和專有插件增強。與列表中的其他工具類似,Kong 帶有一個集成的、同一供應商的 API 管理服務——Kong 服務控制平臺。
Tyk
Tyk是一個開源 API 網(wǎng)關,它是用 Go 開發(fā)的,允許它與用不同編碼語言編寫的插件兼容。Tyk 的不同之處在于他們的管理服務;該公司以兩種不同的方式提供其專有的 API 管理平臺——本地安裝或收費的托管服務。
Ambassador
又一個 API 網(wǎng)關,Ambassador是 Kubernetes 原生的。它建立在充當入口控制器的 Envoy 服務器之上。如果您的微服務結(jié)構(gòu)是基于 Kubernetes 集群的,那么使用 Ambassador 是一個明智的選擇,因為它具有固有的集成性和高效運行 YAML 配置文件的能力。
快速網(wǎng)關
Express Gateway基于 Node.js,完全構(gòu)建在 Express 和 Express 中間件平臺上。其簡單的配置過程和支持 JavaScript 插件的能力是它區(qū)別于其他網(wǎng)關的獨特之處之一。它還可以重用現(xiàn)有的 Express 中間件功能以獲得更大的效果。
結(jié)論
總而言之,API 網(wǎng)關是一個反向代理,允許將微服務作為 API 提供。這樣做的最大優(yōu)勢在于,它通過將后端微服務暴露給客戶的請求,有助于消除安全漏洞的可能性。
作為中央接口,它不僅可以讓開發(fā)人員保持代碼相對簡單,還可以減少延遲問題。借助更具凝聚力和安全性的微服務結(jié)構(gòu),您能夠為客戶端提供增強的用戶體驗。有了廣泛的可用選項,最好的 API 網(wǎng)關平臺最終取決于您的系統(tǒng)架構(gòu)和工作負載的性質(zhì)。