天穹-gateway網(wǎng)關(guān)系列1:Tesla網(wǎng)關(guān)整體介紹
開源地址
https://github.com/XiaoMi/mone/tree/master/gateway-all 歡迎對云原生技術(shù)/研發(fā)效能感興趣的小伙伴加入(Fork、Star)我們。
一.背景
在微服務(wù)時代,服務(wù)拆分粒度越來越細(xì),每個微服務(wù)各自負(fù)責(zé)自己的核心功能并對外提供一系列的api接口。但隨著業(yè)務(wù)的拓展,接口越來越多,也就誕生了一些問題??梢栽谝粋€地方去統(tǒng)一的管理這些接口嗎?在涉及到鑒權(quán)這個普遍的問題時,難道需要每個微服務(wù)都實現(xiàn)一次嗎?每個微服務(wù)都有自己的協(xié)議和代碼書寫風(fēng)格,比如駝峰和下劃線,能統(tǒng)一嗎?
這種情況下,我們就需要api gateway來解決這些問題。
二.什么是gateway網(wǎng)關(guān)
API網(wǎng)關(guān)是一種服務(wù),是系統(tǒng)的統(tǒng)一入口。我們可以將各個微服務(wù)公共非業(yè)務(wù)功能放在API Gateway中實現(xiàn),如身份驗證、監(jiān)控、負(fù)載均衡、緩存等,以盡可能減少各服務(wù)的職責(zé)。API 網(wǎng)關(guān)將各系統(tǒng)對外暴露的服務(wù)聚合起來,所有要調(diào)用這些服務(wù)的系統(tǒng)都需要通過 API 網(wǎng)關(guān)進(jìn)行訪問,基于這種方式網(wǎng)關(guān)可以對 API 進(jìn)行統(tǒng)一管控。
三. Tesla網(wǎng)關(guān)
Tesla是由小米效能團隊開源的基于JDK19的一款高性能、易擴展的優(yōu)秀的API網(wǎng)關(guān)平臺,是小米效能團隊結(jié)合小米多年大促經(jīng)驗沉淀而成,目前已經(jīng)經(jīng)歷過十余次小米大促的考驗,并在其中承擔(dān)了流量治理的核心角色,是小米業(yè)務(wù)鏈中不可或缺的一環(huán)。
說到基于Java的API網(wǎng)關(guān),可能很多人第一反應(yīng)就是SpringCloud Gateway或者Zuul,但是Tesla網(wǎng)關(guān)無論在易用性、擴展性和性能方面都有非常明顯的優(yōu)勢:
易用性:Tesla擁有可視化操作界面,同時支持配置實時更新,實時生效,極大簡化學(xué)習(xí)使用成本,優(yōu)化操作體驗。
多協(xié)議:支持HTTP、Dubbo、gRPC等協(xié)議轉(zhuǎn)發(fā)
擴展性:Tesla通過對自定義Filter支持,尤其是Sidecar模式的動態(tài)Filter支持,給Tesla提供了強大的擴展性支持,可以滿足大多數(shù)業(yè)務(wù)和項目的需求。
高性能:Tesla網(wǎng)關(guān)自身是基于Netty進(jìn)行開發(fā),在性能上已經(jīng)擁有非常亮眼的表現(xiàn)。同時全面支持JDK19 的 Virtual Thread,使Tesla網(wǎng)關(guān)的性能和資源分配上都得到了較大的提升。
1、技術(shù)架構(gòu)
Tesla 網(wǎng)關(guān)主要由兩個部分組成:控制臺 + 網(wǎng)關(guān)。其中控制臺主要是維護API數(shù)據(jù)和Filter數(shù)據(jù),同時還可以對不同網(wǎng)關(guān)集群的域名進(jìn)行管理。Tesla網(wǎng)關(guān)集權(quán)是該產(chǎn)品的核心組成部分,負(fù)責(zé)整個流量治理、安全防護、Filter執(zhí)行、協(xié)議轉(zhuǎn)換和流量轉(zhuǎn)發(fā)等內(nèi)容。
2、核心能力
2.1、動態(tài)發(fā)現(xiàn),負(fù)載均衡
當(dāng)下微服務(wù)和容器化的流行,使得業(yè)務(wù)服務(wù)的節(jié)點數(shù)量、ip地址等隨時可能發(fā)生變化。Tesla網(wǎng)關(guān)打通了服務(wù)注冊中心,訂閱相關(guān)服務(wù)信息,在業(yè)務(wù)服務(wù)側(cè)發(fā)生變化時能做到實時感知。并且在處理實際的請求時,支持多種負(fù)載均衡策略,比如輪詢、哈希等。這樣,業(yè)務(wù)服務(wù)做擴縮容,或者故障恢復(fù)、熱備、切換時,配合業(yè)務(wù)服務(wù)的優(yōu)雅退出,已經(jīng)基本能做到調(diào)用方無感知了。
2.2、統(tǒng)一管理 api,動態(tài)秒級更新
我們按“租戶->集群->接口分組->接口”對api接口進(jìn)行組織。你能在Tesla控制臺查看到你有權(quán)限查看的api接口,并對他們進(jìn)行一系列操作,比如開啟鑒權(quán),接口mock等。Tesla控制臺統(tǒng)一管理了所有的api接口,在你新增或者更新了一個接口時,網(wǎng)關(guān)集群也能實時感知到接口的變化,實現(xiàn)了運行時配置更新機制。
2.3、用戶自定義插件,實時上傳,動態(tài)插拔
在Tesla網(wǎng)關(guān)發(fā)展的過程中,我們發(fā)現(xiàn)讓用戶能參與進(jìn)來貢獻(xiàn)filter插件是一件很棒的事情,每個filter是一個功能,大家可以盡情發(fā)揮創(chuàng)造力貢獻(xiàn)自己的filter,實現(xiàn)多種功能,像是鑒權(quán)、灰度、限流等。Tesla網(wǎng)關(guān)允許用戶實時上傳自己的filter代碼,網(wǎng)關(guān)集群動態(tài)加載,無需重啟,每個用戶都可以復(fù)用別人的filter。
2.4、多種協(xié)議轉(zhuǎn)換
網(wǎng)關(guān)作為統(tǒng)一的api入口,對外提供的是restful風(fēng)格的http接口。但后端的微服務(wù)使用的協(xié)議是多種多樣的,你可以是dubbo,是grpc,是http,在這里,網(wǎng)關(guān)封裝了后端的不同協(xié)議,暴露給前端統(tǒng)一的接口風(fēng)格。
2.5、流量管理
流量安全:流量安全是每一個網(wǎng)關(guān)產(chǎn)品都繞不開的話題,如何應(yīng)對DDoS等安全問題、如何進(jìn)行請求鑒權(quán)、如何進(jìn)行數(shù)據(jù)脫敏等。Tesla網(wǎng)關(guān)對這一系列安全問題都有完善的,并且經(jīng)過多次大促驗證的解決方案。
流量控制:網(wǎng)關(guān)產(chǎn)品無論在日常運行,或是大促等特殊時間,都有一套完整的限流熔斷措施,可以極大程度上保護后端業(yè)務(wù)系統(tǒng)的健壯性和可用性。但是Tesla網(wǎng)關(guān)不止?jié)M足于此,還額外擴展了很多實用的功能更好的幫助業(yè)務(wù)系統(tǒng)。其中就包括結(jié)果緩存、流量記錄回放等功能,從而給業(yè)務(wù)系統(tǒng)提供更多的便利和幫助。
資源隔離:Tesla網(wǎng)關(guān)承載了比較多的業(yè)務(wù)系統(tǒng)。其中有流量大的,有安全要求高的,有業(yè)務(wù)復(fù)雜的。可以說幾乎每個業(yè)務(wù)系統(tǒng)都有自己特殊的要求,那么做到每個業(yè)務(wù)系統(tǒng)互不干擾對Tesla網(wǎng)關(guān)就尤其重要。比如A系統(tǒng)業(yè)務(wù)非常復(fù)雜,導(dǎo)致請求返回比較慢,如果不做資源隔離,單一系統(tǒng)就可以搶占更多的系統(tǒng)資源,從而影響其他業(yè)務(wù)系統(tǒng)。Tesla網(wǎng)關(guān)目前已經(jīng)可以做到系統(tǒng)資源隔離、業(yè)務(wù)資源隔離。每個業(yè)務(wù)都有自己獨立的資源池,保障“專款專用”,給業(yè)務(wù)保駕護航。
3、設(shè)計難點
網(wǎng)關(guān)作為流量的統(tǒng)一入口,其穩(wěn)定性、性能、伸縮性和可擴展性是其設(shè)計的重點。
為了保障穩(wěn)定性,我們對集群做了隔離,像交易鏈路這樣的核心服務(wù)就可以申請自己的獨立集群。集群里每個接口分組也都有獨立線程池來處理請求的接收、分發(fā)和返回,以此保障不同分組互不影響。
對于性能,網(wǎng)關(guān)引入了netty自研了一個web_server保證高吞吐,網(wǎng)關(guān)集群對核心元數(shù)據(jù)會在內(nèi)存里有一份緩存,靠同步機制保證實時性;此外,對慢請求實現(xiàn)了打斷機制,避免資源被占用,最后我們還對dubbo版本做了一些優(yōu)化,比如,dubbo的泛化調(diào)用一開始是不支持設(shè)置超時時間的。
對于伸縮性的話,作為流量入口的網(wǎng)關(guān)是要能支持隨時擴縮容以應(yīng)對突發(fā)流量的,所以網(wǎng)關(guān)集群里的每臺機器本身不具備狀態(tài),都由admin管理平臺來控制數(shù)據(jù)的同步。
最后是擴展性,網(wǎng)關(guān)鼓勵大家提交自己的filter,互惠互助。
4、設(shè)計腦圖

四. 關(guān)于未來的發(fā)展方向
目前我們的網(wǎng)關(guān)架構(gòu)是中心化網(wǎng)關(guān),提供通用能力如鑒權(quán)、限流等處理請求,并根據(jù)服務(wù)標(biāo)識將請求路由到正確的后端服務(wù);服務(wù)處理完請求,響應(yīng)原路返回。
作為流量的統(tǒng)一入口,面對多樣的業(yè)務(wù)形態(tài)和復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),中心化網(wǎng)關(guān)架構(gòu)在實際場景中遇到了一些困難。第一、隨著業(yè)務(wù)發(fā)展壯大,網(wǎng)關(guān)集群機器數(shù)不斷增長。這加劇了運維層面的復(fù)雜性,IT成本也面臨不能承受之重。第二,一些核心鏈路的業(yè)務(wù)迫切需要與其他業(yè)務(wù)隔離,避免不可預(yù)知的突發(fā)流量影響到這些高保業(yè)務(wù)的可用性。
所以這里開始建設(shè)和推廣網(wǎng)關(guān)的去中心化。Mesh 網(wǎng)關(guān)與后端服務(wù)同一個 Pod 部署,即 Mesh 網(wǎng)關(guān)與業(yè)務(wù)系統(tǒng)同服務(wù)器、不同進(jìn)程,具備網(wǎng)關(guān)的全量能力。這是我們目前在探索的一個方向。