我們先了解一下 網(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作為流量入口來處理所有業(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證書。