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

2021-01-17 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最新官方文檔中文版發布——由Service Mesh愛好者傾情奉獻
    Envoy ——為雲原生應用而設計、開源的邊緣和服務代理、Istio Service Mesh 默認的數據平面,最新官方文檔中文版,由 Service
  • 雲原生時代下的開發變革,騰訊雲Nocalhost讓雲原生開發更簡單
    12月20日,在2020 Techo Park開發者大會 DevOps 分論壇上,騰訊雲CODING DevOps CEO 張海龍對CODING DevOps技術進行解讀,並發布了助力開發者的開源工具 Nocalhost,與行業大咖共同探討雲原生時代下的軟體工程的演進方向,為技術管理者帶來啟發。
  • 進入雲原生、分布式的時代,什麼才是資料庫的正確打開方式
    不過對於坐在電腦前的消費者來說,儘管瞬間產生了如此大規模的高並發流量,但選款、下單、付款的購物流程,仍然是一氣呵成,「如絲般潤滑」。「在這個前提下,我們認為在雲原生的時代,資料庫的設計和資料庫的理念都將發生本質性的變化。」李飛飛這樣講道。 作為前沿技術的創新者和引領者,阿里巴巴自然不會坐失機遇。可以看到,阿里巴巴首次在行業內提出了雲原生分布式資料庫的概念。
  • 一站式打卡「雲原生」時代的高效開發:微服務和資料庫還能這樣玩
    在這場近90分鐘腦力風暴,與近2小時實戰修煉中,主題直奔當下火熱的「雲原生」,並結合雲原生時代的「微服務」與「資料庫」,深入淺出揭開一站式高效開發的秘籍。12月19日,DevRun開發者沙龍華為雲南京雲原生專場在南京成功舉辦。
  • 對話阿里雲李飛飛:雲原生資料庫的時代來了
    這位愛笑也有著程式設計師式幽默的大牛,在加入阿里巴巴近三年間,以低調的行事風格在業界一次又一次地「高調」地呈現了諸多的解決方案,並帶領著阿里資料庫團隊與達摩院資料庫實驗室多次攻克雲時代下資料庫技術的瓶頸,如自研關係型資料庫 PolarDB 的誕生,也實現「雲原生資料庫」的跨越性發展。
  • 雲原生時代,容器持久化存儲方案選對了嗎?
    而現在,隨著雲原生對業務創新的影響力持續顯現,越來越多的企業開始將容器應用於生產環境。前者更側重容器本身帶來的便利,而後者需要解決數據持久化存儲等諸多問題。據Gartner預測,到2022年,全球超過75%的組織將在生產環境中運行容器化應用。
  • gateway筆記本多少錢 gateway筆記本價格大全(熱門款式)
    Gateway NV4429c  這款gateway筆記本電腦是2010年推出的,如今價格為4999元。在存儲方面,這款gateway筆記本電腦配備了2GB的運行內存與320GB的硬碟空間,這兩者的配置實際上是十分低的。顯卡方面,作為一款定位於全能學生本的gateway筆記本電腦,它並沒有配置獨立顯卡,配置的是一款Intel GMA X4500集成顯卡,這款集成顯卡的性能也是十分落後的。
  • 為雲而生的「雲原生」,為什麼越來越重要?
    在企業上雲的趨勢下,我們正在看到越來越多的企業和開發者開始把業務與技術向雲原生演進。那麼,什麼是「雲原生」?為什麼「雲原生」正在變得越來越重要?我們希望通過對「雲原生」概念和其代表的整體技術思路做一次梳理,看下「雲原生」能夠釋放怎樣的技術紅利。
  • 七牛雲姬長軍:企業技術棧向雲原生轉型的實踐與思考
    「雲原生」引爆億萬級蒼穹,「分布式雲」啟動新商業引擎,「分布式存儲」開創未來新篇。伴隨著 5G 商用時代的到來,在新一輪技術革命的關口,CDN +邊緣計算迎來新階段,分布式雲將加速這一變革的發生。
  • 構築雲原生安全技術底座 綠盟科技發布《雲原生安全技術報告》
    雲計算發展將近二十年,已然進入了新的階段:雲原生時代。以容器、服務網格、微服務等為代表的雲原生技術,正在影響各行各業的IT基礎設施、平臺和應用系統,也在滲透到如IT/OT融合的工業網際網路、IT/CT融合的5G、邊緣計算等新型基礎設施中。
  • 華為雲攜手保險行業技術精英論道雲原生
    1月15日,由創原會發起的"雲原生技術精英沙龍(保險行業專場)"成功舉辦,來自中國信通院、華為雲以及保險行業的技術精英,就"雲原生提速保險行業數位化轉型"以及"保險行業雲原生典型應用場景"進行了深入探討。
  • 雲原生2.0「進化論」:從ON Cloud到IN Cloud
    換言之,雲原生技術的進化的主要目的,就是讓用戶實現從技術架構、業務能力以及前端應用的全面升級,並同時轉化輸出業務價值。  畢竟,沒有任何一家企業願意在雲原生時代保持自身雲基因的停滯不前,因為數位化轉型決定了企業必須選擇強力進化,塑造自身應對甚至是超越市場需求的能力。
  • 魚和熊掌可以兼得 雲原生開啟「資料庫大數據一體化」新時代
    10月23日數據湖高峰論壇上,阿里巴巴集團副總裁、阿里雲智能資料庫產品事業部負責人、達摩院資料庫與存儲實驗室負責人李飛飛表示:「雲原生作為雲計算領域的關鍵技術與基礎創新,正在加速數據分析全面進入資料庫大數據一體化時代」。
  • 華為雲原生基礎設施加速基因測序
    ·極致性價比 實現性能與成本的最佳平衡基於容器技術,提供秒級彈性伸縮能力,擴容速度可達30秒擴容8000核,在流量突增時能快速彈性擴容,保障業務的連續性和高穩定性,通過按秒計費策略實現成本的精細化管理。
  • 雲原生架構定義了vRAN的未來
    這就是為什麼下一步必須使用與雲兼容的應用程式,或者甚至更好的是使用雲原生應用程式的原因。目前,電信領域正在出現這種發展,雲原生應用程式被設計為輕量級容器和鬆散耦合的微服務。就網絡運營商而言,這些類型的應用程式的主要優勢是較低的開發成本,更簡單的升級和修改以及水平擴展的潛力。這也避免了供應商鎖定。
  • Go 開源網關 API-Gateway 2.1.0 發布
    api server支持restful支持依賴轉發聚合支持某一次轉發的默認值改進更新docker的基礎鏡像更新Json庫,對無schema的結構更友好性能提升30%軟體介紹API-Gateway是用Go編寫的高性能API網關,支持以下特性:流量控制
  • 避免不完全的雲原生(一):雲原生到底意味著什麼?
    很多時候,圍繞雲原生的討論會直接進入技術選擇,如容器化和微服務。毫無疑問,這些都是雲原生項目的潛在組成部分,但肯定不是全部。在本系列文章中,我們將從幾個不同的角度探索雲原生,包括技術和基礎設施,還包括架構、設計,以及可能最容易被忽視的人員和流程。用最簡單的術語來說,雲原生不只是說要遷移到雲,而是要充分利用雲基礎設施和服務的獨特性來快速交付業務價值。
  • Sentinel Go 1.0.1 發布,雲原生流控降級組件
    Release notes:https://github.com/alibaba/sentinel-golang/releases/tag/v1.0.1Sentinel 是阿里巴巴開源的,面向分布式、雲原生服務架構的高可用防護組件,主要以流量為切入點,從限流、流量整形、熔斷降級、系統自適應保護等多個維度來幫助開發者保障微服務的穩定性。
  • 騰訊雲十年新風向:雲原生與開源的未來
    為此,騰訊雲發布了企業雲原生路線圖,按照企業雲原生化改造的過程,把雲原生實踐的過程抽象為「開發雲原生、計算雲原生、架構雲原生、數據云原生、安全雲原生」五個層面,幫助開發者從整體角度模型部署雲原生的關鍵脈絡。
  • 打破轉型陣痛,匯量科技加碼雲原生
    如在大型機時代,與之匹配的是簡單的單體架構;PC和區域網時代下,客戶伺服器架構成為主流……如今來到雲時代,基礎設施同樣推動軟體架構的演變。可很多企業的雲轉型是由 IDC 遷移而成,或根據在原有的 IT 基礎架構設施上的思想進行開發。匯量科技另闢蹊徑,從優化底層技術架構開始,除了利用雲的技術特性外,還利用雲的定價模式特性,構建彈性資源管理系統 SpotMax。