不只有簡單性和穩(wěn)定性,API網(wǎng)關(guān)還有這些好處
譯文【51CTO.com快譯】API網(wǎng)關(guān)是對微服務(wù)體系結(jié)構(gòu)樣式的一個關(guān)鍵結(jié)果的響應(yīng):服務(wù)及其接口的激增。API網(wǎng)關(guān)的核心目的是簡化和穩(wěn)定暴露給客戶端的接口。
除此之外,由于API網(wǎng)關(guān)在體系結(jié)構(gòu)中的獨特位置,因此可以實現(xiàn)多種附加功能,例如監(jiān)視,日志記錄,安全性,負載平衡和流量操縱。
API網(wǎng)關(guān)類似于Facade設(shè)計模式,但應(yīng)用于網(wǎng)絡(luò)級別。這兩種情況的目標都是提供一個簡化的接口配置文件,以隱藏系統(tǒng)的復雜性??梢栽谙聢D中看到簡單的API網(wǎng)關(guān)思路。
簡化的界面
API網(wǎng)關(guān)的作用是將客戶端與服務(wù)解耦,并在此過程中為入站和出站流量提供單點聯(lián)系。
微服務(wù)后端可能涉及許多交互服務(wù),這些服務(wù)的URL和協(xié)議可能是異構(gòu)的。API網(wǎng)關(guān)可以為客戶端提供一個簡化的交互界面。在某種意義上,這就像一個簡化代理。
此外,API網(wǎng)關(guān)可能更復雜,能夠接受單個請求,檢索必要的資源,并將它們組合成單個響應(yīng)。例如,對用戶概要文件的請求可能檢索用戶詳細信息、最近的消息和興趣。網(wǎng)關(guān)可以接收單個請求,從每個必要的服務(wù)請求數(shù)據(jù),然后將它們統(tǒng)一為單個響應(yīng)。
這種功能需要在架構(gòu)級別上進行編排,并對其他微服務(wù)組件(如斷路器和服務(wù)網(wǎng))產(chǎn)生影響。
因為API網(wǎng)關(guān)能夠轉(zhuǎn)換后端使用的協(xié)議和URL,所以它很適合幫助遷移服務(wù)。也就是說,API網(wǎng)關(guān)在某種程度上可以隱藏后端發(fā)生的更改。
API穩(wěn)定性
API網(wǎng)關(guān)還可以提高客戶端與服務(wù)進行交互的API的穩(wěn)定性。網(wǎng)關(guān)可以平滑那些可能破壞客戶端或要求客戶端進行更改的細微變化,開發(fā)人員可以使用網(wǎng)關(guān)將一些流量導向服務(wù)的新版本來測試它們。
通常,API網(wǎng)關(guān)為客戶端提供單點聯(lián)系點,這有助于將更改對后端服務(wù)的影響最小化。服務(wù)越復雜,更改越頻繁,網(wǎng)關(guān)的功能就越有價值。
請注意,API網(wǎng)關(guān)還可以簡化API表層,甚至對于內(nèi)部客戶端也是如此。也就是說,可以使用網(wǎng)關(guān)使微服務(wù)體系結(jié)構(gòu)本身中的拓撲更容易管理。
監(jiān)控方式
API網(wǎng)關(guān)在體系結(jié)構(gòu)中的作用也使其非常適合進行某些類型的監(jiān)視,警報和跟蹤。同樣,在網(wǎng)關(guān)處收集統(tǒng)計信息對于流量和使用情況的廣泛分析也很有用。帶有日志記錄的API網(wǎng)關(guān)如下圖所示。
有多種方法可以處理API網(wǎng)關(guān)日志記錄的分析,比如使用Amazon Elasticsearch Service。
安全
由于網(wǎng)關(guān)是系統(tǒng)的單點入口,因此在系統(tǒng)加固中首當其沖。這類似于系統(tǒng)管理最佳實踐中跳轉(zhuǎn)主機的角色。
這樣服務(wù)就能夠主要關(guān)注與單個API網(wǎng)關(guān)的通信的安全,這比處理多個面向公共的API簡單得多。
以上內(nèi)容適用于基礎(chǔ)設(shè)施級安全性。然而,網(wǎng)關(guān)也可以在業(yè)務(wù)級別上承擔身份驗證和授權(quán)的工作。這需要對所涉及的后端服務(wù)進行編排,但可以通過將安全邏輯集中在一個地方來簡化事情。這自然與速率限制或使用付費聯(lián)系在一起,因為網(wǎng)關(guān)將擁有用于計費的客戶端帳戶。
API網(wǎng)關(guān)解決方案
API網(wǎng)關(guān)解決方案分為兩大類:托管的和自行開發(fā)的。在托管解決方案領(lǐng)域,每個云供應(yīng)商都提供一個產(chǎn)品。這些可以通過搜索找到,因為它們被(毫無想象力地)命名為“Amazon API網(wǎng)關(guān)”、“Azure應(yīng)用網(wǎng)關(guān)”和“谷歌云API網(wǎng)關(guān)”。
在開發(fā)自己的框架時,最好從一個能夠幫助完成大量繁重工作的框架開始。例如,在Java生態(tài)系統(tǒng)中,Spring Cloud提供了Spring Cloud Gateway。而Nginx是另一個不錯的選擇。
API網(wǎng)關(guān)的實際應(yīng)用
我們已經(jīng)討論了API網(wǎng)關(guān)可以提供的許多好處。但是,一定要記住這種權(quán)衡:網(wǎng)關(guān)也是需要維護的基礎(chǔ)設(shè)施的另一部分。特別是,API網(wǎng)關(guān)必須與對后端和客戶端的更改保持同步。也就是說,如果你的體系結(jié)構(gòu)復雜性或業(yè)務(wù)需要它,API網(wǎng)關(guān)可能是不錯的解決方案。
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】