网易基于 Envoy 的云原生网关实践
簡(jiǎn)介:Envoy 是由 Lyft 開(kāi)源的高性能網(wǎng)絡(luò)代理軟件。相比于 Nginx、HAProxy 等經(jīng)典代理軟件,Envoy 具備豐富的可觀察性和靈活的可擴(kuò)展性,并且引入了基于 xDS API 的動(dòng)態(tài)配置方案。目前,Envoy 被廣泛應(yīng)用于新興微服務(wù)網(wǎng)關(guān)與服務(wù)網(wǎng)格之中作為核心數(shù)據(jù)面。而本次分享將從網(wǎng)易數(shù)帆實(shí)踐出發(fā),介紹網(wǎng)易數(shù)帆是如何基于開(kāi)源 Envoy 構(gòu)建高性能、易擴(kuò)展、可觀察的云原生微服務(wù)網(wǎng)關(guān)?函谷?(Hango)的。
函谷開(kāi)源地址:
github.com/hango-io/hango-gateway
1 云原生微服務(wù)網(wǎng)關(guān)
微服務(wù)網(wǎng)關(guān)是微服務(wù)架構(gòu)中最為核心和關(guān)鍵的組件之一,負(fù)責(zé)微服務(wù)集群中服務(wù) API 統(tǒng)一暴露和出入口流量管理。舉一個(gè)具體的例子,在微服務(wù)集群中可能同時(shí)存在上百個(gè)微服務(wù),其中有些是內(nèi)部依賴,有些則需要對(duì)外暴露 API,為外部客戶端提供服務(wù)。如果讓各個(gè)微服務(wù)自身負(fù)責(zé) API 的暴露,那一個(gè)微服務(wù)集群可能會(huì)同時(shí)有幾十個(gè)流量出入口,大大提高流量安全和流量管理的成本,同時(shí)對(duì)客戶端也非常不友好。所以引入一個(gè)集中組件來(lái)統(tǒng)一控制 API 暴露,并負(fù)責(zé)流量的均衡和分發(fā)就是一個(gè)自然而然的選擇了(事實(shí)上,服務(wù)暴露還涉及一個(gè)網(wǎng)絡(luò)隔離的問(wèn)題,不過(guò)本文主要介紹的是七層 API 網(wǎng)關(guān),網(wǎng)絡(luò)問(wèn)題暫且忽略)。
相比于傳統(tǒng)的反向代理,微服務(wù)網(wǎng)關(guān)有了一個(gè)職能的增強(qiáng)。傳統(tǒng)的反向代理更加注重基礎(chǔ)的路由轉(zhuǎn)發(fā)和負(fù)載均衡,而 API 網(wǎng)關(guān)除此以外,更多的還要關(guān)注流量的治理能力和流量的觀察能力。
在構(gòu)建函谷網(wǎng)關(guān)之前,集團(tuán)內(nèi)部實(shí)際上已經(jīng)有了一些其他的 API 網(wǎng)關(guān)方案。比如網(wǎng)易傳媒、嚴(yán)選使用的是 Kong,還有一些業(yè)務(wù)使用基于 Spring Gateway 的技術(shù)方案。但是這些 API 網(wǎng)關(guān)都有一些局限性,比如它們的容器化支撐能力,再比如它們的性能,又或者它們的治理能力。網(wǎng)易數(shù)帆最初的動(dòng)機(jī)就是準(zhǔn)備構(gòu)建一個(gè)具備豐富能力、覆蓋多種場(chǎng)景需求并兼具高性能的新 API 網(wǎng)關(guān)統(tǒng)一和替代網(wǎng)易集團(tuán)內(nèi)部的這些技術(shù)方案。
2 如何做好微服務(wù)網(wǎng)關(guān)?
在對(duì)微服務(wù)網(wǎng)關(guān)本身有了基礎(chǔ)的了解之后。第二個(gè)問(wèn)題就是,如何才能做好一個(gè)微服務(wù)網(wǎng)關(guān)呢?只有先明確目標(biāo),確立一個(gè)好的微服務(wù)網(wǎng)關(guān)需要解決的問(wèn)題,才能為后續(xù)的技術(shù)選型、以及具體實(shí)踐方向提供指導(dǎo)。在梳理了集團(tuán)內(nèi)已有的各種網(wǎng)關(guān)解決方案以及各個(gè)業(yè)務(wù)方的需求和場(chǎng)景之后,團(tuán)隊(duì)總結(jié)了一下六條微服務(wù)網(wǎng)關(guān)需要具備的關(guān)鍵特性(一家之言,僅作參考)。
- 高性能:作為集群流量入口,性能是必須保證的。包括吞吐量和延遲,都是衡量一個(gè)高性能網(wǎng)關(guān)的關(guān)鍵要素。作為一個(gè)通用的解決方案,網(wǎng)易數(shù)帆的輕舟微服務(wù)網(wǎng)關(guān)設(shè)計(jì)之初,就希望盡可能覆蓋未來(lái)更多的場(chǎng)景和業(yè)務(wù)方需求。所以性能自然要求越高越好,要滿足對(duì)性能要求最苛刻的那一個(gè)業(yè)務(wù)方的需求。但是,如果各位希望自研微服務(wù)網(wǎng)關(guān),那所謂高性能,不一定是吞吐量和延遲達(dá)到某個(gè)固定標(biāo)準(zhǔn),只要滿足業(yè)務(wù)方的實(shí)際需求就是高性能網(wǎng)關(guān),沒(méi)有必要過(guò)早優(yōu)化。很多時(shí)候,網(wǎng)關(guān)的開(kāi)銷只有幾 ms,而業(yè)務(wù)本身開(kāi)銷幾十 ms,瓶頸不在網(wǎng)關(guān)。
- 可觀察:可觀察性在微服務(wù)架構(gòu)當(dāng)中非常重要。因?yàn)闃I(yè)務(wù)不再是單體,為排障監(jiān)控帶來(lái)了新的復(fù)雜度,所以需要可觀察性的支持。
- 自證清白:實(shí)踐得來(lái)的一個(gè)經(jīng)驗(yàn)是,一旦集群內(nèi)流量產(chǎn)生了一些業(yè)務(wù)層面的波動(dòng),作為入口的微服務(wù)網(wǎng)關(guān)幾乎總是第一個(gè)被懷疑的對(duì)象。明確的可觀察數(shù)據(jù)比如說(shuō)日志、指標(biāo)可以有說(shuō)服力的證明網(wǎng)關(guān)的清白;
- 輔助排障:日志指標(biāo)也會(huì)包含業(yè)務(wù)的一些特征情況,可以幫助業(yè)務(wù)方快速定位出問(wèn)題所在。
- 觀察趨勢(shì):最后,作為流量統(tǒng)一入口,網(wǎng)關(guān)的可觀察性可以讓用戶了解到集群內(nèi)的流量現(xiàn)狀、趨勢(shì),并且形成長(zhǎng)效的監(jiān)控告警系統(tǒng),提前發(fā)現(xiàn)問(wèn)題。
- 豐富的治理能力:目前稍好一點(diǎn)的小區(qū)大門一般都會(huì)加上人臉解鎖、一桿一車之類的功能。API 網(wǎng)關(guān)也類似,作為入口的它也被要求做越來(lái)越多的與業(yè)務(wù)邏輯無(wú)關(guān)的額外治理功能,比如黑白名單、限流、熔斷等等。
- 可擴(kuò)展性:和治理能力非常相關(guān)的一個(gè)關(guān)鍵特性就是可擴(kuò)展性。業(yè)務(wù)方的需求是無(wú)窮無(wú)盡的,甚至?xí)幸恍┓浅6ㄖ苹男枨?#xff0c;API 網(wǎng)關(guān)開(kāi)發(fā)團(tuán)隊(duì)也難以覆蓋所有需求,所以可擴(kuò)展性就非常關(guān)鍵了。
- 對(duì)網(wǎng)關(guān)開(kāi)發(fā)團(tuán)隊(duì):良好的可擴(kuò)展性可以幫助 API 網(wǎng)關(guān)快速迭代新功能,降低擴(kuò)展新的治理能力的成本和開(kāi)銷;
- 對(duì)于業(yè)務(wù)方:降低網(wǎng)關(guān)開(kāi)發(fā)的門檻,對(duì)于具有一定技術(shù)能力的團(tuán)隊(duì),業(yè)務(wù)可以根據(jù)自身需求特點(diǎn)實(shí)現(xiàn)最合適的功能擴(kuò)展,可以提高自身的自主能力;
- 穩(wěn)定性:網(wǎng)關(guān)穩(wěn)定性的保證是一個(gè)很宏大的問(wèn)題,除了軟件的質(zhì)量之外,更多的還要依賴流程的控制以及針對(duì)性的技術(shù)方案,比如灰度發(fā)布、金絲雀發(fā)布之類的。但是總體來(lái)說(shuō),就是要經(jīng)歷生產(chǎn)的檢驗(yàn),要有大規(guī)模的流量驗(yàn)證。
- 可視化:一個(gè)友好、易用的可視化控制臺(tái),可以實(shí)現(xiàn) API 網(wǎng)關(guān)的路由配置、服務(wù)管理、監(jiān)控審計(jì)的可視化。
- 簡(jiǎn)化操作:通過(guò)平臺(tái)產(chǎn)品的封裝,簡(jiǎn)化網(wǎng)關(guān)的操作流程和配置過(guò)程,隱藏或者減少底層技術(shù)的復(fù)雜性,降低 API 網(wǎng)關(guān)的使用門檻;
- 實(shí)現(xiàn)約束:實(shí)現(xiàn)約束,通過(guò)產(chǎn)品的封裝和合理的提示,降低在使用 API 網(wǎng)關(guān)的過(guò)程中,用戶犯錯(cuò)的風(fēng)險(xiǎn),讓用戶以一種更加正確的姿勢(shì)使用網(wǎng)關(guān);
- 監(jiān)控報(bào)警可視化;
3 為什么偏偏是 Envoy?
在函谷網(wǎng)關(guān)的基礎(chǔ)數(shù)據(jù)面的技術(shù)選型當(dāng)中,網(wǎng)易數(shù)帆選擇了新興開(kāi)源網(wǎng)絡(luò)代理 Envoy。Envoy 是由 Lyft 開(kāi)源的一款高性能代理軟件,后來(lái)被捐贈(zèng)給了 CNCF 基金會(huì),是 CNCF 基金會(huì)畢業(yè)的第三個(gè)項(xiàng)目。相比于 Nginx、HAProxy 等經(jīng)典代理軟件,Envoy 具備豐富的可觀察性和靈活的可擴(kuò)展性,并且引入了基于 API 的動(dòng)態(tài)配置方案 xDS。此外,Envoy 還提供了大量的開(kāi)箱即用的 Filter 以滿足各種場(chǎng)景下流量治理的需求。
首先,選擇 Envoy 可以使得網(wǎng)易數(shù)帆團(tuán)隊(duì)統(tǒng)一微服務(wù)架構(gòu)中東西南北數(shù)據(jù)面技術(shù)棧。 Envoy 有典型的兩種工作模式。一種作為中心代理,代理集群的南北向流量,也就是出入口流量,負(fù)責(zé)流量分發(fā)、流量治理之類的工作的。這種模式下,Envoy 一般就是負(fù)載均衡設(shè)備或者是 API 網(wǎng)關(guān)的基礎(chǔ)數(shù)據(jù)面,比如 Ambassador,Gloo 都是新興的開(kāi)源的基于 Envoy 的開(kāi)源網(wǎng)關(guān)。另一種模式,就是作為業(yè)務(wù)進(jìn)程的 Sidecar。當(dāng)有業(yè)務(wù)請(qǐng)求訪問(wèn)業(yè)務(wù)的時(shí)候,流量會(huì)被劫持到 Sidecar Envoy 當(dāng)中,之后再被轉(zhuǎn)發(fā)給業(yè)務(wù)進(jìn)程。類似的,當(dāng)業(yè)務(wù)需要訪問(wèn)其他業(yè)務(wù)的時(shí)候,請(qǐng)求流量也會(huì)先被攔截到 Sidecar Envoy,再被轉(zhuǎn)發(fā)到目標(biāo)服務(wù)。這樣,就是在 Envoy Sidecar 中實(shí)現(xiàn)一些流量的治理和觀察的功能。這個(gè) Sidecar 的模式就設(shè)計(jì)到全新的一種微服務(wù)架構(gòu)服務(wù)網(wǎng)格了。數(shù)帆輕舟團(tuán)隊(duì)和 Envoy 的結(jié)緣最初是在服務(wù)網(wǎng)格項(xiàng)目當(dāng)中。在服務(wù)網(wǎng)格項(xiàng)目中,發(fā)現(xiàn) Envoy 的豐富功能同樣可以適用于網(wǎng)關(guān)場(chǎng)景,同時(shí),業(yè)界也已經(jīng)有了 Gloo 這樣的開(kāi)源網(wǎng)關(guān)在前。所以也就嘗試使用 Istio 和 Envoy 去構(gòu)建新的輕舟 API 網(wǎng)關(guān)。而這樣做也可以保證技術(shù)棧的統(tǒng)一,使用 Envoy 來(lái)對(duì)微服務(wù)集群中南北-東西兩向的流量進(jìn)行全面的接管。
其次,Envoy 豐富的流量治理能力。 Envoy 本身就提供了比較豐富的流量治理能力,包括全局限流、本地限流、服務(wù)熔斷、超時(shí)控制、策略重試、域管理等等。這些社區(qū)提供的七層治理能力讓輕舟 API 網(wǎng)關(guān)一開(kāi)始就有一個(gè)比較高的起點(diǎn),可以節(jié)省大量的工作量。這些功能基本都是開(kāi)箱即用,本身控制面的技術(shù)選型 Istio 也已經(jīng)實(shí)現(xiàn)了對(duì)這些能力的封裝。哪怕不做任何的擴(kuò)展,只是簡(jiǎn)單的組合 Istio 和 Envoy 或者組合 Envoy 和裸的配置文件,也可以實(shí)現(xiàn)一個(gè)最簡(jiǎn)易的微型 API 網(wǎng)關(guān)了。
第三,Envoy 提供了開(kāi)箱即用的可觀察性。 社區(qū) Envoy 本身提供了豐富的指標(biāo)、靈活的日志、全面的分布式跟蹤支持。
- 日志:日志靈活的配置格式、擴(kuò)展、實(shí)現(xiàn)自定義過(guò)濾規(guī)則等,而且支持多種的輸出方案。
- 指標(biāo):指標(biāo)也非常的全面,即使現(xiàn)在,我也不敢說(shuō)了解 Envoy 每一項(xiàng)指標(biāo)的含義。而且 Envoy 的指標(biāo)也可以在不侵入 Envoy 的前提下,進(jìn)一步的擴(kuò)展更多的監(jiān)控指標(biāo);
- 跟蹤:最后是跟蹤系統(tǒng)部分,Envoy 主要是做采集層的工作。支持 ZipKin、SkyWalking、OpenTracing 等多種的分布式跟蹤系統(tǒng)對(duì)接。這些特性保證了使用 Envoy 來(lái)構(gòu)建一套全面的監(jiān)控告警排障系統(tǒng)是一件相對(duì)簡(jiǎn)單的事情。
第四,Envoy 強(qiáng)大的可擴(kuò)展性。 Envoy 本身也提供了非常好的可擴(kuò)展性,利用它的 L4/L7 的過(guò)濾器擴(kuò)展機(jī)制,可以在各個(gè)層級(jí)實(shí)現(xiàn) Envoy 功能的增強(qiáng)。實(shí)際上,Envoy 中大量的核心功能都是使用 Filter 來(lái)實(shí)現(xiàn)的,比如 HTTP 的七層治理能力,其實(shí)全都是一個(gè)叫做 HTTP Connection Manager 的七層擴(kuò)展插件。針對(duì)其他的協(xié)議,一樣可以使用類似的方式來(lái)擴(kuò)展支持,比如數(shù)帆就額外做了對(duì) FTP 還有 Kafka 的支持。
而且 Envoy 還提供了基于 Lua 和基于 WASM 兩種不同的動(dòng)態(tài)增強(qiáng)擴(kuò)展方法,讓用戶可以在不需要重新構(gòu)建 Envoy 的前提下,實(shí)現(xiàn) Envoy 的功能增強(qiáng)和擴(kuò)展。利用這種機(jī)制,作為一個(gè) API 網(wǎng)關(guān)基礎(chǔ)設(shè)施的提供方,可以簡(jiǎn)單的為業(yè)務(wù)方提供自定義擴(kuò)展的能力。不過(guò)后面會(huì)講到,目前兩種方案還是有一些局限,所以數(shù)帆還提供了額外的增強(qiáng)。
第五,xDS/UPDA 提供的標(biāo)準(zhǔn)數(shù)據(jù)面代理抽象。 Envoy 代理軟件還有一個(gè)重要的特性就是 xDS。xDS 的全稱就是 x Discovery Service,是一種動(dòng)態(tài)的配置分發(fā)方案。其中 x 表示某種資源,一個(gè)端口監(jiān)聽(tīng),一個(gè) Upstream Host,一個(gè) Upstream Cluster 都是一種資源,是真實(shí)微服務(wù)集群在 Envoy 中的抽象。Envoy 支持三種不同的 xDS 方案或者說(shuō)載體:gRPC,文件,和 Restful API。其中 gRPC 是最常用的一種。就是 Envoy 和控制面之間建立起一個(gè) gRPC 連接。控制組件通過(guò) gRPC 將各種資源通過(guò) ProtoBuf 序列化之后推送給 Envoy。Envoy 解析各項(xiàng)資源,然后動(dòng)態(tài)生效。基于文件的 xDS 在做本地測(cè)試的時(shí)候,也比較常用。對(duì)于一些個(gè)人開(kāi)發(fā)者,如果希望簡(jiǎn)單的使用 Envoy 構(gòu)建一個(gè)高性能反向代理,基于文件的 xDS 方案也是不錯(cuò)的推薦。像是 LDS,Listener Discovery Service 用于動(dòng)態(tài)的打開(kāi)端口監(jiān)聽(tīng);CDS 用來(lái)發(fā)現(xiàn)新的可以通過(guò) Envoy 代理的服務(wù)并抽象為名叫 Cluster 的資源。而 EDS 可以在 Cluster 本身不更新的前提下,更新它的示例列表。個(gè)人認(rèn)為 xDS 最重要的就是兩個(gè)特征。一是動(dòng)態(tài):所有的配置都是動(dòng)態(tài)的發(fā)現(xiàn)、更新和生效的。而且這一過(guò)程,配置發(fā)現(xiàn)和配置更新的過(guò)程不需要 Envoy 主動(dòng)參與。Envoy 通過(guò)將這些責(zé)任通過(guò)訂閱的方式委托給了更合適的做這件事的控制面組件,比如說(shuō) Isito,或者 Gloo 里面的控制面。二是抽象:xDS 使用 proto 作為配置的載體,使用 proto 對(duì)象抽象和封裝一組關(guān)聯(lián)配置。也就是說(shuō),xDS 里面,動(dòng)態(tài)發(fā)現(xiàn)的不是離散的配置項(xiàng),是一個(gè)個(gè)資源,一個(gè)個(gè)對(duì)象。當(dāng)通過(guò) LDS 發(fā)現(xiàn)了一個(gè)新的 Listener,說(shuō)明 Envoy 就該開(kāi)啟一個(gè)新的端口監(jiān)聽(tīng)了。而 Listener 里面的具體配置項(xiàng),都只是在描述這個(gè)接下來(lái)要?jiǎng)?chuàng)建的端口監(jiān)聽(tīng)。
最后一個(gè)影響團(tuán)隊(duì)決策的就是 Envoy 開(kāi)源社區(qū)。 利用 Envoy 的開(kāi)源社區(qū)和生態(tài),數(shù)帆輕舟可以更好的從社區(qū)借力。 Envoy 是第三個(gè) CNCF 畢業(yè)項(xiàng)目 ,相比于 Nginx 社區(qū),Envoy 的社區(qū)明顯更加開(kāi)放,可以讓人更加放心的貢獻(xiàn)和參與。
4 網(wǎng)易數(shù)帆實(shí)踐與開(kāi)源
最后一部分是網(wǎng)易數(shù)帆的具體實(shí)踐,還有開(kāi)源相關(guān)的工作。數(shù)帆微服務(wù)的整體架構(gòu)如圖所示。這個(gè)圖,我?guī)状畏窒矶加玫剿:?jiǎn)單,清晰明了,而且沒(méi)有復(fù)雜的技術(shù)細(xì)節(jié)。
在最下層,Envoy 作為微服務(wù)網(wǎng)關(guān)、微服務(wù)網(wǎng)格的基礎(chǔ)數(shù)據(jù)面統(tǒng)一了南北東西向的流量治理。再往上,是 Istio 作為的網(wǎng)關(guān)和網(wǎng)格的控制面。Istio 之上是統(tǒng)一的 API Plane 作為 API 暴露層。最上層,就是可視化的控制臺(tái)。同時(shí),APM,Prometheus,ES 等可觀察性相關(guān)的支撐系統(tǒng)一起來(lái)構(gòu)建一整套可觀察體系具體來(lái)說(shuō),網(wǎng)易數(shù)帆做了一下幾個(gè)方面的工作。
一,更豐富的七層治理能力。 網(wǎng)易數(shù)帆實(shí)現(xiàn)了更加豐富的七層治理能力,包括流量安全相關(guān)的:IP 黑白名單,輕舟認(rèn)證鑒權(quán),流量穩(wěn)定性相關(guān)的:本地限流、路由級(jí)熔斷、動(dòng)靜態(tài)降級(jí),性能相關(guān)的緩存,跨協(xié)議訪問(wèn)相關(guān)的 Dubbo 協(xié)議轉(zhuǎn)換、Web Service 協(xié)議轉(zhuǎn)換等等,來(lái)覆蓋更多的業(yè)務(wù)方需求和場(chǎng)景。
二,基于 Lua 的動(dòng)態(tài)可擴(kuò)展性進(jìn)一步提升。 雖然社區(qū)已經(jīng)提供了基于 Lua 和 WASM 的擴(kuò)展方案,但是還是略有不足之處。其中 WASM 的方案目前算不上成熟,而且性能不如預(yù)期,同時(shí)相對(duì)來(lái)說(shuō)擴(kuò)展的開(kāi)發(fā)、編譯、分發(fā)還是較重;而 Lua 雖然做到了極致的靈活,但是只是簡(jiǎn)單的 Lua 腳本執(zhí)行,甚至沒(méi)有做到擴(kuò)展邏輯和擴(kuò)展配置相分離,所以有兩個(gè)方面的缺陷:不易遷移、難以實(shí)現(xiàn)較為復(fù)雜的功能。為此,網(wǎng)易數(shù)帆設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)類似于 OpenResty 的 Lua 擴(kuò)展框架 Rider,彌補(bǔ)了現(xiàn)有 Lua 擴(kuò)展的不足。Rider 框架主要包含三個(gè)部分:Envoy C++ Filter 部分,Lua SDK 部分,Lua Filter 部分。
三,可觀察性增強(qiáng)。 網(wǎng)易數(shù)帆另一個(gè)非常重要的工作是對(duì) Envoy 的可觀察進(jìn)行增強(qiáng),包括:一些元數(shù)據(jù)的注入,來(lái)增強(qiáng)審計(jì)日志;Skywalking Tracer 的實(shí)現(xiàn),來(lái)對(duì)接分布式跟蹤系統(tǒng)。
四,控制臺(tái)與監(jiān)控審計(jì)可視化。 網(wǎng)易數(shù)帆實(shí)現(xiàn)了一個(gè)友好的控制臺(tái),來(lái)實(shí)現(xiàn)服務(wù)管理、路由配置、監(jiān)控審計(jì)等一系列功能的可視化,提高 API 網(wǎng)關(guān)的易用性。主要的功能包括兩點(diǎn),前面也提到過(guò):一是簡(jiǎn)化網(wǎng)關(guān)操作,實(shí)現(xiàn)功能的約束;二是聚合監(jiān)控?cái)?shù)據(jù),了解集群的狀態(tài)。
五,擁抱開(kāi)源。 整個(gè)函谷網(wǎng)關(guān)都是構(gòu)建在開(kāi)源 Envoy 和開(kāi)源 Istio 的基礎(chǔ)之上的,在使用開(kāi)源軟件的過(guò)程中,我們也在嘗試對(duì)社區(qū)做回饋。目前,輕舟團(tuán)隊(duì)已經(jīng)向 Envoy 社區(qū)貢獻(xiàn)了超過(guò) 10000 行的新增代碼。
此外,網(wǎng)易數(shù)帆也嘗試創(chuàng)建自己的開(kāi)源社區(qū)。所以先后開(kāi)源了 Slime(智能服務(wù)網(wǎng)格) 以及函谷網(wǎng)關(guān)。在開(kāi)源方面,我們還是一個(gè)新手,所以可能還有很多不足之處。但是我們絕對(duì)是認(rèn)真的。所以希望大家多多嘗試,提出 issue。
原文鏈接:
https://mp.weixin.qq.com/s?__biz=MzU4MDM1MDAwOQ==&mid=2247485497&idx=1&sn=43b0e52cd08c335a33d70c12ed542d1b&utm_source=tuicool&utm_medium=referral如果覺(jué)得本文對(duì)你有幫助,可以關(guān)注一下我公眾號(hào),掃描下方二維碼關(guān)注“w的編程日記”獲取更多Java資料
總結(jié)
以上是生活随笔為你收集整理的网易基于 Envoy 的云原生网关实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Pytorch中的 torch.as_t
- 下一篇: 京东申请采销直播商标