API網(wǎng)關(guān):Apache APISIX

我們先了解一下 網(wǎng)關(guān) (Gateway) 的作用和價(jià)值。

網(wǎng)關(guān)是什么

傳統(tǒng)架構(gòu)的通用功能
在傳統(tǒng)的架構(gòu)中,沒有網(wǎng)關(guān),那么通用功能該怎么復(fù)用起來呢?這里的通用功能指業(yè)務(wù)無關(guān)的一些特性,比如:

安全性:身份驗(yàn)證、授權(quán)、防重放、防篡改、對(duì)抗 DDos 等

可靠性:服務(wù)降級(jí)、熔斷、限流等

這些功能在傳統(tǒng)架構(gòu)下,最常見的處理方法就是將其放入服務(wù)框架當(dāng)中,通過 AOP 的方式去實(shí)現(xiàn),類似下圖:



模塊:

Backend: 后端服務(wù)

AOP: 框架攜帶的 AOP 分層

SD: 服務(wù)中心,用于服務(wù)間發(fā)現(xiàn),此組件在云原生環(huán)境下經(jīng)常用 Service 替代

LB: 負(fù)載均衡器,放置于網(wǎng)絡(luò)邊界上,作為外部流量的入口

這種架構(gòu)在早些年的設(shè)計(jì)中非常常見,由此誕生了很多大而全的服務(wù)框架,比如 Dubbo, SpringCloud 等。如果我們?nèi)フJ(rèn)真去研究它們的功能介紹,我們會(huì)發(fā)現(xiàn)這些功能點(diǎn)它們大多都有。

這種架構(gòu)的優(yōu)點(diǎn)在于上下游關(guān)系簡(jiǎn)單,網(wǎng)絡(luò)傳輸中也少了一次轉(zhuǎn)發(fā)。但是她們的缺點(diǎn)也很明顯:

通用功能的迭代會(huì)迫使業(yè)務(wù)服務(wù)更新:由于采用的是代碼引用,因此需要業(yè)務(wù)服務(wù)重新編譯才能使功能生效。對(duì)一些沒有實(shí)現(xiàn)平滑發(fā)布的團(tuán)隊(duì),由于服務(wù)會(huì)中斷,因此還得挑業(yè)務(wù)的空閑期發(fā)布。

版本難以管理:由于我們不可能每次發(fā)布都讓所有業(yè)務(wù)服務(wù)升級(jí)最新版,長(zhǎng)此以往,各個(gè)服務(wù)的版本將會(huì)不一致。

那么我們是否可以將這些通用功能下沉到一個(gè)獨(dú)立的服務(wù),它可以單獨(dú)迭代且業(yè)務(wù)無關(guān)?



從上圖中,我們可以看到傳統(tǒng)架構(gòu)的大部分內(nèi)容都沒有變化,只是在后端服務(wù)與 LB(負(fù)載均衡器) 之間多出了一個(gè)角色:網(wǎng)關(guān)。

(這里需要澄清的是,本文討論的網(wǎng)關(guān)特指 ApiGateway ,即針對(duì)后臺(tái)服務(wù)以 API 提供服務(wù)的場(chǎng)景。)

在上面的這個(gè)圖中,有時(shí) LB 同時(shí)也起到網(wǎng)關(guān)的作用,比如 k8s 的 Ingress 組件。

有了網(wǎng)關(guān)這個(gè)組件后,我們就可以將傳統(tǒng)架構(gòu)的通用功能下沉到網(wǎng)關(guān),這樣一來我們獲得了很多的好處:

1、網(wǎng)關(guān)可以獨(dú)立迭代,不再需要業(yè)務(wù)服務(wù)配合

2、與語言無關(guān),可以配置專門的團(tuán)隊(duì)維護(hù)

網(wǎng)關(guān)模式的缺點(diǎn):

1、多了一次轉(zhuǎn)發(fā),延遲變高,排查問題復(fù)雜度變高

2、網(wǎng)關(guān)如果不能正常工作,可能會(huì)成為整個(gè)平臺(tái)的瓶頸

API網(wǎng)關(guān):Apache APISIX

Apache APISIX是一個(gè)動(dòng)態(tài)、實(shí)時(shí)、高性能的API網(wǎng)關(guān)。提供了豐富的流量管理功能,如負(fù)載均衡、動(dòng)態(tài)上游、canary釋放、斷路、認(rèn)證、可觀察性等。您可以使用Apache APISIX來處理傳統(tǒng)的南北向流量,以及服務(wù)之間的東西向流量。它也可以用作k8s的ingress控制器。


Apache APISIX架構(gòu)圖

可以使用Apache APISIX作為流量入口來處理所有業(yè)務(wù)數(shù)據(jù),包括動(dòng)態(tài)路由、動(dòng)態(tài)上游、動(dòng)態(tài)證書、A/B測(cè)試、金絲雀發(fā)布、藍(lán)綠色部署、限速、惡意攻擊防御、指標(biāo)、監(jiān)控告警、服務(wù)可觀測(cè)性、服務(wù)治理等。

所有平臺(tái)可用

  • 原生云:平臺(tái)無關(guān),沒有廠商鎖定,APISIX可以運(yùn)行從裸機(jī)到Kubernetes。
  • 運(yùn)行環(huán)境:支持OpenResty和tenengine。
  • 支持ARM64:不要擔(dān)心基礎(chǔ)技術(shù)的鎖定。

多協(xié)議支持

  • TCP/UDP Proxy:動(dòng)態(tài)TCP/UDP代理。
  • Dubbo代理:動(dòng)態(tài)HTTP到Dubbo代理。
  • 動(dòng)態(tài)MQTT代理:支持通過client_id負(fù)載均衡MQTT,支持MQTT 3.1.* 5.0。
  • gRPC代理:代理gRPC流量。
  • gRPC轉(zhuǎn)碼:支持協(xié)議轉(zhuǎn)碼,客戶端可以通過HTTP/JSON訪問gRPC API。
  • 代理Websocket
  • Dubbo代理:基于Tengine的Dubbo代理。
  • HTTP (S)轉(zhuǎn)發(fā)代理
  • SSL:動(dòng)態(tài)加載SSL證書。

參考資料:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容