服務(wù)網(wǎng)格成熟度不斷提升,云原生環(huán)境下流量處理愈發(fā)重要, Envoy Gateway 項(xiàng)目于近日宣布開源,“旨在大幅降低將 Envoy 作為 API 網(wǎng)關(guān)的使用門檻”,引發(fā)了業(yè)界關(guān)注。2018 年 11 月,Envoy 成為 CNCF 畢業(yè)項(xiàng)目,開始作為一款高性能數(shù)據(jù)和服務(wù)代理軟件為從業(yè)者所知,但此后兩三年,國內(nèi) API 網(wǎng)關(guān)實(shí)踐中,選型 Envoy 仍是一條較為孤獨(dú)的道路。
作為國內(nèi)云原生實(shí)踐的先行者,網(wǎng)易數(shù)帆輕舟云原生團(tuán)隊(duì)早在 2017 年就探索基于 Istio 和 Envoy 實(shí)現(xiàn)服務(wù)網(wǎng)格平臺(tái)及 API 網(wǎng)關(guān),并于 2019 年完成該體系在嚴(yán)選電商業(yè)務(wù)的成熟應(yīng)用。踐行及今 6 載, 在企業(yè)側(cè),網(wǎng)易數(shù)帆 Envoy Gateway 承載了互聯(lián)網(wǎng)、銀行、證券、能源等多行業(yè)頭部企業(yè)核心業(yè)務(wù)流量,經(jīng)受了百億級(jí)日流量的考驗(yàn);在社區(qū)側(cè),團(tuán)隊(duì)于 2021 年開源了基于 Istio 和 Envoy 研發(fā)的 Hango Gateway,2022 年誕生了國內(nèi)唯一的 Envoy Maintainer。
在此過程中,網(wǎng)易數(shù)帆也多次分享了 Envoy Gateway 相關(guān)實(shí)踐,并曾于 2020 年就網(wǎng)關(guān)技術(shù)路線展開討論,力陳 Envoy Gateway 的優(yōu)勢,與社區(qū)同道共同推動(dòng)并見證 Envoy 不斷成熟。網(wǎng)易數(shù)帆認(rèn)為, Envoy Gateway 的開源,為 Envoy 成為標(biāo)準(zhǔn)數(shù)據(jù)面組件帶來了一個(gè)良好的開端。
網(wǎng)易數(shù)帆云原生架構(gòu)選定 Envoy
在云原生技術(shù)體系建設(shè)中,網(wǎng)易數(shù)帆非常重視統(tǒng)一技術(shù)棧,認(rèn)為這樣才能降低研發(fā)成本,真正發(fā)揮云原生的優(yōu)勢。網(wǎng)格網(wǎng)關(guān)體系之所以選擇 Envoy,不僅僅是因?yàn)?Envoy 是 Istio 數(shù)據(jù)面默認(rèn)的 Sidecar,更因?yàn)樗?功能與性能都非常優(yōu)秀的 “雙優(yōu)生”?。此后在網(wǎng)易嚴(yán)選業(yè)務(wù)的實(shí)踐,驗(yàn)證了這一選擇的正確性。
網(wǎng)格側(cè),網(wǎng)易數(shù)帆認(rèn)為,Istio + Envoy 對(duì)微服務(wù)流量和服務(wù)治理的良好抽象,帶來了統(tǒng)一服務(wù)化層技術(shù)棧的曙光。同時(shí) Envoy 擁有不低于 Nginx 的轉(zhuǎn)發(fā)性能,但在治理能力和控制能力(UDPA)方面,卻比 Nginx 靈活得多。在網(wǎng)易嚴(yán)選當(dāng)時(shí)的測試中,采用 eBPF/xDP (sockops),優(yōu)化路徑為 SVC <-> Envoy,延遲性能提升 10-20%
網(wǎng)易嚴(yán)選網(wǎng)關(guān)的升級(jí),則考慮輕舟微服務(wù)體系的無縫融合以及主流的產(chǎn)品實(shí)現(xiàn),同樣采用 Envoy 數(shù)據(jù)面組件,負(fù)責(zé)南北向數(shù)據(jù)流量的代理、路由、治理、遙測等;通過 filterchain 進(jìn)行擴(kuò)展,支持基于 Lua、C++ 語言編寫插件,WASM 落地后支持多語言方式擴(kuò)展;并通過 xDS 與控制面組件進(jìn)行配置下發(fā)等動(dòng)態(tài)控制??刂泼鎰t以 Istio Pilot 作為基本控制面組件,同時(shí)提供 API 層、控制臺(tái)供用戶或第三方平臺(tái)接入。
基于輕舟 Envoy Gateway 網(wǎng)易嚴(yán)選實(shí)現(xiàn)了:
網(wǎng)關(guān)管理平臺(tái)復(fù)用,保證用戶習(xí)慣一致性。
LUA 插件復(fù)用,方便擴(kuò)展功能的無縫遷移。
函數(shù)級(jí)別路由能力的支持,為后續(xù) FaaS 的引流鋪平了道路。
經(jīng)過大規(guī)模業(yè)務(wù)生產(chǎn)落地,網(wǎng)易數(shù)帆更加體會(huì)到 Envoy 的先天優(yōu)勢,并堅(jiān)信 Envoy Gateway 是云原生業(yè)務(wù)流量入口的標(biāo)準(zhǔn)技術(shù)方案:
較 HAProxy、Nginx 更豐富的功能
與 Nginx 相當(dāng),遠(yuǎn)高于傳統(tǒng) API 網(wǎng)關(guān)的性能
動(dòng)態(tài)管控能力強(qiáng),具備數(shù)據(jù)面標(biāo)準(zhǔn) xDS 協(xié)議
天然親和容器環(huán)境
多語言擴(kuò)展沙箱 ——WASM
性能方面,在網(wǎng)易數(shù)帆的測試中,Envoy 的 TPS 可以達(dá)到 12W 左右,而基于 Nginx 的 Kong,TPS 為 5W 左右。
到 2020 年,網(wǎng)易數(shù)帆成功推動(dòng)輕舟 Envoy Gateway 在網(wǎng)易多個(gè)核心業(yè)務(wù)大規(guī)模落地:
網(wǎng)易傳媒(新聞)已經(jīng)實(shí)現(xiàn)全站流量通過輕舟 Envoy Gateway 暴露
網(wǎng)易嚴(yán)選已經(jīng)實(shí)現(xiàn)上云服務(wù)全部流量通過輕舟 Envoy Gateway 暴露
網(wǎng)易有道、云信、Lofter 等網(wǎng)易核心互聯(lián)網(wǎng)業(yè)務(wù)流量通過輕舟 Envoy Gateway 暴露
Hango 開源,進(jìn)入 CNCF Landscape
2021 年 8 月,網(wǎng)易數(shù)帆開源了高性能、可擴(kuò)展、功能豐富的云原生 API 網(wǎng)關(guān) Hango,并在之后再次從功能、性能、行業(yè)影響、技術(shù)趨勢和最佳實(shí)踐等方面全面解讀了 Envoy 技術(shù)路線的優(yōu)勢,以及 Hango 的擴(kuò)展設(shè)計(jì)和落地實(shí)踐。
簡而言之,Hango 數(shù)據(jù)面基于 Envoy 擴(kuò)展,增強(qiáng)插件鏈,控制面基于 Istio 進(jìn)行擴(kuò)展,完成了微服務(wù)網(wǎng)關(guān)、七層負(fù)載均衡、Kubernetes Ingress 等多場景能力支持。如下是 Hango 網(wǎng)關(guān)插件鏈的數(shù)據(jù)流,通過創(chuàng)建 EnvoyPlugin CR,Slime 動(dòng)態(tài)監(jiān)聽聚合生成對(duì)應(yīng)的 EnvoyFilter,完成對(duì) Envoy filter chain 的動(dòng)態(tài)擴(kuò)展。
而 Hango 也獲得了云原生從業(yè)者的認(rèn)可,進(jìn)入了 CNCF Landscape。
展望未來, 網(wǎng)易數(shù)帆 致力于 擴(kuò)大 輕舟云原生體系“出圈”規(guī)模融入產(chǎn)業(yè)數(shù)字化,作為一個(gè)核心模塊的輕舟 Envoy Gateway 也會(huì)?加碼產(chǎn)業(yè) 應(yīng)用 場景落地能力?,如多集群高可用、協(xié)議轉(zhuǎn)換 等 金融場景 剛需能力的增強(qiáng)。同時(shí), 輕 舟 Envoy Ga te way 的更多能力也會(huì)通過 Hango Gateway 開源出來。
持續(xù)貢獻(xiàn),國內(nèi)唯一 Maintainer 出爐
目前網(wǎng)易數(shù)帆輕舟團(tuán)隊(duì)已累計(jì)向 Envoy 社區(qū)貢獻(xiàn) 60+ PR,超過 14,000+ 新增代碼,覆蓋了 Envoy 的有狀態(tài)會(huì)話保持、Tracing 能力增強(qiáng)、Lua script 的支持和 Dubbo 治理能力增強(qiáng)等核心功能。
2022 年 3 月 ,Envoy 社區(qū)邀請(qǐng)網(wǎng)易數(shù)帆云原生專家、資深架構(gòu)師王佰平成為社區(qū) Maintainer—— 這是國內(nèi)首位且唯一的 Envoy Maintainer,同時(shí)也是 Dubbo Extension Senior Maintainer,表明了社區(qū)對(duì)網(wǎng)易數(shù)帆持續(xù)貢獻(xiàn)的認(rèn)可