天天看點

對比 5 個開源網關項目,這家 SaaS 企業如何統一網關架構

作者:阿裡雲雲原生

作者:古建國

關于美洽

美洽作為全球智能雲客服服務商,10 年來深耕智能客服領域,旗下擁有線上客服、呼叫中心、客服機器人、工單系統、語音機器人等智能客服系列産品矩陣,覆寫不同行業客戶服務場景,緻力于幫助企業獲客、銷售和服務場景的效率提升。目前,美洽全鍊路産品已經服務超過 40 萬家企業客戶,覆寫網際網路軟體、教育教育訓練、醫療、電子商務、金融、生活服務和房地産等行業領域。

需求背景

  1. 多條業務線使用了了不同程式設計語言,在微服務化演進的路上困難重重;
  2. 曆史架構使用多個流量轉發中間件導緻流量路徑冗長、複雜且故障排查困難(LB + OpenResty + Nginx + Caddy + SpringCloud-Gateway);
  3. WebSocket 長連接配接服務在多重路由層上不支援熱更新,維護成本高。

曆史架構的流量拓撲圖如下:

對比 5 個開源網關項目,這家 SaaS 企業如何統一網關架構

需求目标

  1. 找到一個統一網關,能夠一次性解決流量網關和業務網關的路由轉發需求;
  2. 支援路由規則熱更新,解決 WebSocket 連接配接在路由更新或網絡抖動時産生的重連風暴;
  3. 前置 API 請求權限校驗、簽名校驗、WAF 攔截、CC 攔截;
  4. 可視化統一網關的背景操作,讓普通員工也能上手;
  5. 多雲架構下私有化部署支援。

方案橫向對比

通過對目前市面上流行的網關産品進行詳細的橫向對比,再結合美洽對統一網關的需求目标,我們從對比的表格當中,看到了 Higress 所帶來的最佳對比結果。

同時美洽重點關注的幾個點:K8S Ingress 支援、WebSocket 支援、Nacos 服務發現、路由配置熱更新、WASM 插件都得到了很好的支援。

對比 5 個開源網關項目,這家 SaaS 企業如何統一網關架構

為什麼選擇 Higress

面向多雲架構友好

Higress 在阿裡雲上有成熟的企業版産品:MSE 雲原生網關,我們從 2021 年開始使用這款産品,這是一款全托管,完全免運維的 SaaS 網關産品,并且具備強勁的性能和豐富的功能,相比自建同吞吐的網關,整體成本是更低的,是以我們在阿裡雲上直接使用了這款産品。

美洽除了阿裡雲,在其他雲上也有部署業務,我們希望能統一多雲的統一網關技術架構,開源版 Higress 正好符合我們的需求,相比商業版,在控制台功能上,開源版目前的能力相對較少,但大部分功能也都可以通過自己定義 K8s CRD 配置的方式來實作,完全滿足我們的需求。

原生支援 K8s Ingress

美洽從 2021 年便已經全面遷移到 Kubernetes 進行資源排程,遇到最大的困難是曆史的網關中間件,在容器化的架構裡面,各種水土不服,要麼需要借助 Nginx-Ingress-Controller,要麼需要外部的 SLB 進行服務之間的負載均衡與網絡通信。這導緻了比容器化之前更加複雜的流量路徑,一度讓我們下定決心,必須、必須、必須要解決統一網關的問題,還必須雲原生的。

2021 年底開始,我們開始嘗試使用阿裡雲 MSE 網關 SaaS 産品,開始将部分服務從 Nginx 路由遷移到 MSE 網關上,很快解決了Ngxin Configuration 配置維護複雜,故障頻發的問題,嘗到甜頭後,我們便開始計劃進一步擴大 MSE 網關的使用,結合 Nacos 和 K8S 的服務發現,将 80% 大部分容器化服務路由轉發全部遷移到了雲原生網關上。這帶來的收益就包括:

  1. 簡化了流量路徑,公網流量通過 SLB 直接到達網關,網關路由直達容器 Pod;
  2. 釋放了使用 ECS 自建的 Nginx 、OpenResty 、Caddy 服務,降低了大量伺服器成本;
  3. 服務發現和服務治理,以及各個服務目前的健康狀态都以可視化的 Dashborad 呈現出來;

控制面和資料面解耦的架構

控制面和資料面解耦是一種很好的設計模式,把管理控制邏輯和運作處理邏輯分開,這樣可以更好地管理和擴充系統。

  1. Console 負責管理 和 Gateway 負責處理請求,靈活可擴充,互不幹擾;
  2. 整個系統的性能和可用性可以得到很好的保障;
  3. 即使控制面出現問題,資料面仍然可以繼續處理請求,反之亦然。

在美洽客服自己的産品中,也大量使用了控制面和資料面分離的這種架構設計模式,在選擇 Higress 統一網關的落地實踐中,也更好的可以和美洽産品的架構進行配合,例如控制台采用微前端技術統一美洽運維控制台,Higress 控制台,Nacos 控制台。

容易上手的背景 Dashboard

在早期,美洽在 2021 年開始使用阿裡雲 MSE 雲原生網關時,就已經對網關的控制台使用有了很多的經驗基礎,團隊中 QA 同學也能熟練使用了。目前在其他雲上的項目,私有化部署的開源版 Higress,在控制台方面功能與操作和阿裡雲 MSE 産品的互動保持一緻,團隊使用很快便上手了。

對比 5 個開源網關項目,這家 SaaS 企業如何統一網關架構

插件方面,美洽使用了 JWT Auth 鑒權,Key Rate Limit 限流,HMAC Auth 請求簽名,Bot Detect 和 WAF 功能有涉及。

對比 5 個開源網關項目,這家 SaaS 企業如何統一網關架構

美洽的落地實踐

采用 Helm 在 K8s node 上 一鍵部署

helm repo add higress.io <https://higress.io/helm-charts>
helm install higress higress.io/higress -n higress-system --create-namespace           

完全替代了 Nginx 、OpenResty、Caddy 、SLB-Intranet

對比 5 個開源網關項目,這家 SaaS 企業如何統一網關架構
對比 5 個開源網關項目,這家 SaaS 企業如何統一網關架構

徹底解決 WebSocket 斷線重連問題

美洽的智能客服産品側使用了 WebSocket 進行長連接配接保持和消息通信,是以非常依賴網絡的穩定,以及更新網關配置所帶來的副作用。在使用 Nginx + OpenResty 方案的期間,每一次的配置變更都會帶來極大的代價,斷線重連風暴時常發生。一次配置變更 Pendding 或者變更失敗帶來的瞬時斷聯是極其痛苦的。

對比 5 個開源網關項目,這家 SaaS 企業如何統一網關架構

在遷移到 Higress 上之後,路由配置熱更新特性,不再需要像 Nginx 一樣需要 Reload Gateway,解決配置更新 reload 帶來的斷線重連風暴問題。另外,在 WebSocket Server 服務更新過程中,通過給 Pod 打上 stage 标簽,在 Higress 側通過标簽路由進行新老版本無損流量切換,給産品快速疊代更新帶了巨大的杠杆效應。

熔斷限流

在面向 2B 的 SaaS 産品業務場景中,經常會發生某一個客戶突發海量流量,占據大量帶寬,影響其他客戶正常使用的情況,這時我們需要針對客戶規模對單個客戶的 API 并發上限做靈活的動态限流,使用 Higress 的插件Key Rate Limit 就很好的解決了這個問題,根據流量大盤随時調整限流水位紅線,做到精準,靈活的限流。

對比 5 個開源網關項目,這家 SaaS 企業如何統一網關架構

經驗總結

Higress 網關的落地,給企業全面落地雲原生微服務架構提供強有力的支援,對我們技術人員來說,這絕對是一個杠杆級别的開源産品,另外,在阿裡雲上又有對等的 SaaS 産品,這樣的配合,将公有雲和私有化部署的統一網關一次性全部解決,對企業來說是絕對的利好。

  1. 統一流量網關+業務網關能力,實作了給企業降本,為研發增效;
  2. 為雲原生架構提供很好的基座,在異構語言服務化層面排除了網絡通信難題;
  3. 路由熱更新、無損更新、可視化 Console、開放的插件、基于 Kubernetes 和 Istio,給技術演進帶來了更多的可能性。

最後,我們祝願 Higress 在雲原生的道路上越走越遠,大家一起用開源、開放、分享的心态将 Higress 建設地越來越好。

Higress 社群

歡迎點選原文提供企業落地案例,我們将:

  1. 提供 Higress 在生産環境的落地支援,幫助您高效完成網關架構改造
  2. 案例投稿到 InfoQ/CSDN 等知名技術媒體,提升您企業的技術影響力
  3. 推薦至媒體或社群,參與年度優秀開源案例評選

繼續閱讀