雲原生時代的流量入口:Envoy Gateway

2020-12-06 InfoQ技術實驗室

流量入口代理作為網際網路系統的門戶組件,具備眾多選型:從老牌代理 HAProxy、Nginx,到微服務 API 網關 Kong、Zuul,再到容器化 Ingress 規範與實現,不同選型間功能、性能、可擴展性、適用場景參差不齊。當雲原生時代大浪襲來,Envoy 這一 CNCF 畢業數據面組件為更多人所知。那麼,優秀「畢業生」Envoy 能否成為雲原生時代下流量入口標準組件?

背景 —— 流量入口的眾多選型與場景

在網際網路體系下,凡是需要對外暴露的系統幾乎都需要網絡代理:較早出現的 HAProxy、Nginx 至今仍在流行;進入微服務時代後,功能更豐富、管控能力更強的 API 網關又成為流量入口必備組件;在進入容器時代後,Kubernetes Ingress 作為容器集群的入口,是容器時代微服務的流量入口代理標準。關於這三類典型的七層代理,核心能力對比如下:

從上述核心能力對比來看:

HAProxy&Nginx 在具備基礎路由功能基礎上,性能、穩定性經歷多年考驗。Nginx 的下遊社區 OpenResty 提供了完善的 Lua 擴展能力,使得 Nginx 可以更廣泛的應用與擴展,如 API 網關 Kong 即是基於 Nginx+OpenResty 實現。API 網關作為微服務對外 API 流量暴露的基礎組件,提供比較豐富的功能和動態管控能力。Ingress 作為 Kubernetes 入口流量的標準規範,具體能力視實現方式而定。如基於 Nginx 的 Ingress 實現能力更接近於 Nginx,Istio Ingress Gateway 基於 Envoy+Istio 控制面實現,功能上更加豐富(本質上 Istio Ingress Gateway 能力上強於通常的 Ingress 實現,但未按照 Ingress 規範實現)。那麼問題來了:同樣是流量入口,在雲原生技術趨勢下,能否找到一個能力全面的技術方案,讓流量入口標準化?

Envoy 核心能力介紹

Envoy 是一個為雲原生應用設計的開源邊緣與服務代理(ENVOY IS AN OPEN SOURCE EDGE AND SERVICE PROXY, DESIGNED FOR CLOUD-NATIVE APPLICATIONS,@envoyproxy.io),是雲原生計算基金會(CNCF)第三個畢業的項目,GitHub 目前有 13k+ Star。

Envoy 有以下主要特性:

基於現代 C++ 開發的 L4/L7 高性能代理。透明代理。流量管理。支持路由、流量複製、分流等功能。治理特性。支持健康檢查、熔斷、限流、超時、重試、故障注入。多協議支持。支持 HTTP/1.1,HTTP/2,GRPC,WebSocket 等協議代理與治理。負載均衡。加權輪詢、加權最少請求、Ring hash、Maglev、隨機等算法支持。支持區域感知路由、故障轉移等特性。動態配置 API。提供健壯的管控代理行為的接口,實現 Envoy 動態配置熱更新。可觀察性設計。提供七層流量高可觀察性,原生支持分布式追蹤。支持熱重啟。可實現 Envoy 的無縫升級。自定義插件能力。Lua 與多語言擴展沙箱 WebAssembly。總體來說,Envoy 是一個功能與性能都非常優秀的「雙優生」。在實際業務流量入口代理場景下,Envoy 具備先天優勢,可以作為雲原生技術趨勢流量入口的標準技術方案:

1. 較 HAProxy、Nginx 更豐富的功能

相較於 HAProxy、Nginx 提供流量代理所需的基本功能(更多高級功能通常需要通過擴展插件方式實現),Envoy 本身基於 C++ 已經實現了相當多代理所需高級功能,如高級負載均衡、熔斷、限流、故障注入、流量複製、可觀測性等。更為豐富的功能不僅讓 Envoy 天生就可以用於多種場景,原生 C++ 的實現相較經過擴展的實現方式性能優勢更為明顯。

2. 與 Nginx 相當,遠高於傳統 API 網關的性能

在性能方面,Envoy 與 Nginx 在常用協議代理(如 HTTP)上性能相當。與傳統 API 網關相比,性能優勢明顯。如下為 Envoy 與幾種業務常用的 API 網關選型在 8 核物理機容器運行環境下,簡單路由代理性能對比數據:(網易內部環境實測數據,僅供參考)

Envoy Gateway:

基於 Java 的異步化 API 網關:

Kong:

APISIX:

從以上性能數據可以看出,相同條件下:

Envoy 的 TPS 可以達到 12W 左右;基於 Java 的異步化 API 網關最高可到 2.8W 左右;基於 Nginx 的 Kong,TPS 可以到 5W 左右;基於 Nginx 並相較 Kong 有一定優化的 APISIX 可以到 9W 左右。可以看出:

簡單路由代理場景下,Envoy 性能優勢已經比較明顯;複雜路由與治理功能場景下,Envoy 原生 C++ 實現功能的性能較通過 Java Filter、OpenResty 等擴展相比,優勢會更加明顯。3. 動態管控能力強,具備數據面標準 xDS 協議

Envoy 具備靜態配置與動態 API 兩種配置模式。動態 API 方式靈活性更強,作為 Envoy 推薦的配置方式。Envoy 以 xDS(x Discovery Service)作為動態 API 的標準協議,其中包括了多種維度資源的發現協議:

LDS(Listener Discovery Service)RDS(Route Discovery Service)CDS(Cluster Discovery Service)EDS(Endpoint Discovery Service)ADS(Aggregated Discovery Service)xDS 的多種協議覆蓋了包括監聽器(Listener)、路由(Route)、後端集群(Cluster)、後端實例(Endpoint),可以通過協議對代理所需所有配置進行動態管控。其中 ADS 不是一個實際意義上的 xDS,它提供了一個匯聚的功能,以實現需要多個同步 xDS 訪問的時候可以在一個 stream 中完成的作用。

由於 Envoy 已經以 CNCF 畢業項目的姿態成為了雲原生數據面的事實標準組件,xDS 也相應成為雲原生數據面事實動態 API 標準。這裡不對 xDS 協議進行深入的介紹,感興趣的同學可以通過社區與博客深入了解。

4. 天然親和容器環境

Envoy 作為雲原生社區的數據面標準組件,其本身並沒有直接與 Kubernetes 或容器耦合。通過 xDS 協議的對接,Istio Pilot 等容器親和的控制面組件可以將服務、實例、路由等配置信息推送至 Envoy。即使是在容器環境,Envoy 也很快能實現服務發現,即實現容器環境服務的代理和治理。所以,Envoy 天然親和容器環境,可以作為容器環境 API 網關和 Ingress 的數據面選型。

5. 多語言擴展沙箱——WASM

WASM,即 WebAssembly,是由主流瀏覽器廠商組成的 W3C 社區團體制定的一個新的規範,首先看下來自 Mozilla 的官方定義:WebAssembly 是一種新的編碼方式,可以在現代的網絡瀏覽器中運行

它是一種低級的類彙編語言,具有緊湊的二進位格式,可以接近原生的性能運行,並為諸如 C/C ++ 等語言提供一個編譯目標,以便它們可以在 Web 上運行。它也被設計為可以與 JavaScript 共存,允許兩者一起工作。

使用 WebAssembly 擴展 Envoy 的好處是:

避免修改 Envoy;避免網絡遠程調用(check & report);通過動態裝載(重載)來避免重啟 Envoy;隔離性;實時 A/B 測試;WASM 為 Envoy 帶來了使用多語言擴展數據面的能力,即可以不局限地通過 C++、Java、Lua、JS 等語言進行數據面擴展,這對於流量代理數據面將是一個巨大的彩蛋。該特性已在 2020 年正式發布落地。相信在不遠的未來,開發者使用自己最為擅長的語言進行流量入口能力擴展不再是夢想!

Envoy Gateway 設計解析

基於雲原生時代的技術趨勢以及 Envoy 的功能、性能的「雙優」特性,網易輕舟雲原生團隊提出基於 Envoy 實現標準的流量入口設計,並基於此進行了大規模業務生產落地。

邏輯架構

邏輯架構設計如下圖所示:

整體架構主要包括數據面、控制面兩部分,實現方面則是擴展了 Istio ingressgateway:

數據面以 Envoy 作為數據面組件,負責南北向數據流量的代理、路由、治理、遙測等;通過 filterchain 進行擴展,目前支持基於 Lua、C++ 語言編寫插件,WASM 落地後支持多語言方式擴展;通過 xDS 與控制面組件進行配置下發等動態控制。

控制面以 Istio Pilot 作為基本控制面組件,同時提供 API 層、控制臺供用戶或第三方平臺接入。

Istio Pilot 在這裡主要包括如下作用:

1、作為 xDS Server。與 Envoy 的 xDS Client 建立 GRPC 通信連接,是與 Envoy 交互的基礎控制面。可支持控制不同場景下 Envoy(ServiceMesh Sidecar & API 網關 Gateway & Ingress & 入口七層代理)。2、對接註冊中心(Discovery)。支持對接 Kubernetes API Server(K8S 註冊中心能力),具備擴展 Consul、Eureka 等其他註冊中心能力。支持同時對接多種註冊中心,並將註冊信息經過配置轉換,下發至 Envoy。3、配置處理(Config)。對於要下發至 Envoy 的所有配置,均通過 Pilot 進行配置處理,再下發至 Envoy。4、模型抽象與接口封裝 (Mesh Configuration Protocol & Service Mesh Interface,簡稱 MCP & SMI)。Pilot 對 Envoy 的基礎模型進行了抽象,並進行基礎接口的封裝,使得其他平臺對 Envoy 的控制可以更加清晰與優雅。對外暴露的接口包括 GRPC 與 Kubernetes CRD 兩種形式。

API Plane 作為 API 平面,主要於對 K8S CRD、MCP 或 SMI 接口做面向業務功能的 API 組合、轉換處理。

管理控制臺是控制面最上層組件,也是研發、運維人員直接操作的平臺組件。

場景地圖

在 Envoy Gateway 技術棧基礎上,可以適應入口七層代理、API 網關、Ingress、單元化機房路由、FaaS 函數路由等多種場景落地應用。

1、入口七層代理

在流量入口場景下,可以承擔 HAProxy、Nginx 等傳統代理職責。

2、API 網關

在微服務場景下,承擔分解流量、路由、治理、審計等豐富職責。

3、Ingress

在容器化場景下,可以作為能力更豐富的 Ingress 實現。

4、通用網關

在完整使用 Envoy Gateway 方案下,可以省去原有入口七層代理 -> API 網關 /Ingress 的鏈路,由一層通用網關(Envoy Gateway)完成。

落地路線

目前 Envoy 以兩類角色在業界落地:一是作為 Service Mesh 數據面組件選型,目前在 Istio 等多種服務網格框架落地;二是作為流量入口代理,目前較多的是以 API 網關形式實現,如 Gloo、Ambassador 等。網易內部多個業務團隊已經實現了數據面技術棧從 Java 異步化代理、Kong 到 Envoy 的升級,基於網易輕舟 Envoy Gateway 作為流量入口標準組件。

由於 Envoy Gateway 與 Service Mesh 使用了相同的 Envoy+Istio 技術棧,使得不論 Envoy 作為 Gateway,或 Service Mesh 中的 Sidecar,都可以被統控制面管控,在提升了該技術棧整體可維護性基礎上,還可以幫助業務逐步演進到 Service Mesh 架構:如果業務對 Service Mesh 架構尚存疑慮,可以先落地 Envoy Gateway,後續待時機成熟再引入 Service Mesh 架構,完成整體微服務技術架構的演進與統一。

網易輕舟 Envoy Gateway 大規模落地

基於以上背景與設計,網易輕舟雲原生團隊實現了 Envoy Gateway,並且已經在網易多個核心業務大規模落地:

網易傳媒(新聞)已經實現全站流量通過輕舟 Envoy Gateway 暴露網易嚴選已經實現上雲服務全部流量通過輕舟 Envoy Gateway 暴露網易有道、雲信、Lofter 等網易核心網際網路業務流量通過輕舟 Envoy Gateway 暴露如下為網易輕舟 Envoy Gateway 控制臺部分線上業務管理視圖:

寫在最後

Envoy Gateway 能否真正意義成為雲原生時代流量入口標準目前尚不得知,但在業務落地過程中,我們已經看到了這套技術棧為業務所能帶來的架構、性能、治理、可觀測性等方面的紅利。在越來越多業務接入 Envoy Gateway、Service Mesh 過程中,相關的工程化平臺建設、排障工具等也在不斷完善,我們拭目以待。

參考連結

Envoy 官方文檔: https://www.envoyproxy.io/docsIstio 官方文檔: https://istio.io/docsEnvoy 實踐: https://www.jianshu.com/p/90f9ee98ce70WebAssembly 中文官方文檔: https://www.wasm.com.cnService Mesh 發展趨勢 (續):棋到中盤路往何方: https://msd.misuland.com/pd/3545776840385758572_

作者簡介:

裴斐,網易杭州研究院輕舟雲原生技術專家、架構師。10 年企業級平臺架構和開發經驗,目前主要負責網易輕舟微服務治理團隊,專注於企業微服務架構及雲原生技術的研究與落地工作。帶領團隊完成網易輕舟 Service Mesh、微服務框架 NSF、API 網關等多個項目在網易集團落地及商業化產品輸出。

相關焦點

  • Envoy - Envoy: 外交使節,特使-英語點津
    外電報導如下:Gunmen seized Egypt's top envoy to Iraq, officials and witnesses said Sunday, in an apparent bid to discourage the country's Arab neighbors from bolstering ties to the embattled U.S.
  • 504 Gateway Time-out是什麼意思 問題出現原因及解決方法
    當我們在訪問大流量網站phpcms或者運營有較多數據的網站時候,偶爾會出現504 Gateway Time-out錯誤,那麼Nginx 504 gateway time-out怎麼解決?504 gateway time-out nginx什麼意思呢?跟著小編一起看看吧。
  • 蘑菇街+華為雲原生,開啟直播新玩法
    當前,直播已成為當前電商行業中的核心紅利賽道,蘑菇街基於華為雲以應用為中心的雲原生基礎設施,打造的雲原生特效解決方案,開啟了直播新玩法,極大提升了客戶的購物體驗,這一次,蘑菇街再次走在了風口前面,為迷霧之中的直播平臺引領了新方向。
  • gateway筆記本多少錢 gateway筆記本價格大全(熱門款式)
    今天小編就為您帶來gateway筆記本電腦的熱 門 款式的報價以及簡單介紹。  在存儲方面,這款gateway筆記本電腦配備了2GB的運行內存與320GB的硬碟空間,這兩者的配置實際上是十分低的。顯卡方面,作為一款定位於全能學生本的gateway筆記本電腦,它並沒有配置獨立顯卡,配置的是一款Intel GMA X4500集成顯卡,這款集成顯卡的性能也是十分落後的。
  • ...出席 2020 中國數據與存儲峰會 詮釋雲原生時代存儲「進化論」
    峰會上,QingStor 存儲產品線研發負責人王煜、QingStor 存儲產品線產品經理馮相東分別帶來了以《雲原生架構下的存儲進化》、《企業核心業務資料庫雲化轉型》為題的主題演講,深度詮釋雲原生時代的存儲進化方向,解析企業核心業務雲化轉型與資料庫變革的重要性,幫助企業客戶解決雲原生架構下海量數據(603138)存儲難題,加快落地雲原生,推進數位化轉型。
  • 快應用+智慧服務平臺 OPPO為開發者打開後流量時代入口
    【IT168 資訊】2018 OPPO開發者大會將於本月26日召開,作為擁有超過2億年輕用戶的平臺,OPPO應用商店累計分發已超過1700億次,這也讓此次大會備受開發者的期待——在後流量時代,如何尋找流量紅利的新風口。
  • 雲原生2.0時代,華為雲如何構建高效可信的持續交付能力?
    華為雲提出,雲原生2.0是企業智能升級新階段,企業雲化從「ON Cloud」走向「IN Cloud」,成為「新雲原生企業」,新生能力與既有能力立而不破、有機協同,實現資源高效、應用敏捷、業務智能、安全可信。
  • 雲原生技術的內涵之討論
    當前雲計算正邁入以容器和微服務為基本特徵的雲原生(Cloud Native)時代。如何保證超低延時的應用需求得到充分的滿足,豐富的軟硬體資源得到高效的利用,是當前雲原生系統管理面臨的重大挑戰。在雲原生系統中,應用普遍以鬆耦合和輕量化的形式運行在容器中,呈現複雜關聯和動態交互的特徵。
  • 雲原生體系下的技海浮沉與理論探索
    2)安全可靠:雲原生通過可觀測機制,可以快速讓我們從錯誤中恢復,同時通過邏輯多租和物理多租等多種隔離方式,限制非法使用。3)彈性擴展:通過將傳統的應用改造為雲原生應用,做到彈性擴縮容,能夠更好地應對流量峰值和低谷,並且達到降本提效的目的。
  • 雲原生背景下的運維價值思考與實踐
    雲計算時代好比組裝一輛汽車,根據客戶的需要,通過PaaS能力選擇匹配的引擎、車輪、離合器、 懸架、車控制系統等進行拼裝。客戶不用關心汽車各元部件的實現原理,最終獲得是一輛滿足自身要求的汽車。光有了汽車是玩不轉的。還需要有修路、加油站、交通控制等服務體系,運維就是承擔這個角色。相比傳統運維,確實是少了自己採購元組與組裝的工作。
  • 金山雲發布全新Serverless產品 雲原生基礎設施再升級
    隨著企業數位化轉型的深入,雲計算正全面步入2.0時代,即為雲而生的階段。以雲原生為代表的理念,已經成為進一步釋放雲計算價值的核心推動力。1月6日,金山雲舉行了雲原生媒體溝通會,金山雲副總裁、合伙人錢一峰在會上正式發布了全新雲原生全景圖、雲原生產品矩陣和最新的Serverless產品(容器實例KCI和Serverless容器服務KSK),並分享了金山雲在雲原生方面的技術歷程和產業實踐,通過構建適應於雲計算2.0時代的新一代雲基礎設施,加速產業數位化變革。
  • 漫畫|雲原生,下一代人類定居地​
    2015 年,Google 等公司牽頭髮起雲原生計算基金會 (CNCF) 後,整個 IT 界似乎都在加速進入雲原生時代。前些天我偶然讀到 CNCF 的一個官方繪本,以淺顯易懂的漫畫、巧妙的比喻科普了一系列雲原生概念:「雲原生」是什麼?
  • 數據中臺的雲原生機會
    本文,「甲子光年」採訪了智領雲創始人&CEO彭鋒,線性資本董事總經理鄭燦,金沙江聯合資本投資人李居真,以及智領雲客戶衣邦人CTO楊陽,來探討雲原生數據中臺的價值和潛力。雲原生的數據中臺,到底有何不同?1.雲原生:雲計算時代的最優解在2019年之前,雲原生似乎還只是一個程式設計師才懂的詞。
  • 加速雲原生落地 KubeSphere把簡單交給客戶,把複雜留給自己
    這不僅與青雲QingCloud自身的努力有關,也與混合雲與雲原生的快速發展密切相關。數年前,雲計算在各行各業的普及也催生了混合雲時代的到來,但最初,混合雲的應用主要集中在雲計算資源上;如今,混合雲開始逐漸滲透到企業業務應用中來。由此,來自應用層面的訴求,使得雲原生應用成為必然趨勢。
  • 華為雲GaussDB聚焦全場景,構建雲原生全棧能力
    12月30日, 雲原生2.0技術峰會在深圳舉行。在數據服務分論壇,華為雲資料庫技術專家發表了《面向未來的雲原生資料庫技術與趨勢》的主題演講,分享了GaussDB資料庫通過生態開放、架構創新、軟硬協同等方面構建雲原生全棧能力,加速企業數位化轉型,助其成為「新雲原生企業」。
  • 雲原生到底意味著什麼?
    很多時候,圍繞雲原生的討論會直接進入技術選擇,如容器化和微服務。毫無疑問,這些都是雲原生項目的潛在組成部分,但肯定不是全部。在本系列文章中,我們將從幾個不同的角度探索雲原生,包括技術和基礎設施,還包括架構、設計,以及可能最容易被忽視的人員和流程。用最簡單的術語來說,雲原生不只是說要遷移到雲,而是要充分利用雲基礎設施和服務的獨特性來快速交付業務價值。
  • 華為雲GaussDB構建雲原生全棧能力,助力企業新升級
    在數據服務分論壇,華為雲資料庫技術專家發表了《面向未來的雲原生資料庫技術與趨勢》的主題演講,分享了GaussDB資料庫通過生態開放、架構創新、軟硬協同等方面構建雲原生全棧能力,加速企業數位化轉型,助其成為「新雲原生企業」。
  • CNCF公布中國雲原生調查報告:49%使用容器技術,Kubernetes 應用率...
    近日,雲原生計算基金會(Cloud Native Computing Foundation,CNCF)發布了第三次中國雲原生調查報告(2019年)。此次調查基於 300 名受訪對象,其中 97% 來自亞洲(主要是中國)。報告顯示49%的受訪者在生產中使用容器技術,72%的受訪者在生產中使用Kubernetes(簡稱K8s),公有雲使用率下降至36%,更多的企業選擇混合雲。
  • 雲原生2.0的邏輯之辯,如何讓每個企業都成為新雲原生企業
    雲計算的滾滾浪潮始於2006年,AWS的成立讓公有雲成為了整個雲行業的標杆,也形成了雲原生的技術洪流,推動了企業上雲和全行業數位化轉型的開啟。作為雲時代的技術基礎,雲原生能力自然功不可沒,但對於雲原生企業的理解,卻出現了一些偏離。
  • 雲原生進入快車道 KubeSphere按下「加速鍵」
    當前雲原生已經進入發展的快車道,用戶越來越多,使用場景越來越複雜。特別是物聯網和邊緣計算的興起,雲原生技術在智慧樓宇、智慧城市等智慧場景得到廣泛應用。作為面向雲原生應用的容器平臺,KubeSphere 便針對企業混合雲以及雲原生應用的需求進行滿足,包括多集群管理、可觀察性、平臺安全能力等方面。