前言
使用 API 網關作為内部服務面向用戶端的單一入口,是一種普遍采用的架構模式。企業組織通過良好定義的 API 将内部系統向内部和外部使用者公開,通常都會采用 API 網關來處理橫向的關注點,包括通路控制、速率限制、負載均衡等等,來實作安全可控的 API 開放。而被廣泛實踐的微服務架構在提供高度靈活性和彈性的同時,也給 API 網關帶來了更多的挑戰。
阿裡雲雲服務總線(Cloud Service Bus)新推出微服務網關服務(CSB Micro Gateway),針對微服務架構下 API 開放的特點,提供能與微服務環境的治理政策無縫銜接的網關服務,實作高效的微服務 API 開放。
API 網關的作用
API 網關典型作用
相信許多人都熟悉 API 網關的概念。作為内部服務面向用戶端的單一入口,API 網關有兩個最典型的作用:
1、内外解耦:對用戶端屏蔽内部服務的動态多樣化實作細節,如技術架構、拆分粒度、接口結構、執行個體狀态等
2、切面控制:讓内部服務能專注在業務邏輯上,集中處理橫向的關注點,如路由、安全、限流、日志、監控等

API 網關使用類型
實際使用中,對應 API 網關所在位置和針對場景的不同,可分成兩種類型:
1、企業級網關:位于企業組織的外圍,面對外部的 API 消費者或服務提供者。通常将企業自身的資料和能力 API 化,對外開放,也有允許外部服務入駐的情況。總的來說,以支撐服務入駐、服務營運和服務門戶場景為主,側重解決管理和營運挑戰。
2、微網關:位于企業組織内部,面對内部的 API 消費者,可以看做是内部服務之前的最後一道防線。通常按内部服務的業務劃分、實體環境以及技術形态的差異,設立多個微網關來分别負責。總的來說,以提供快捷開放、政策控制、服務适配能力為主,側重提升開發和運維效率。
實際上,企業級網關和微網關隻是兩種使用類型,在關注的網關特性上有不同側重,實踐上并非一定需要不同的産品或兩套獨立的部署。
API 網關流量特征
企業級網關處理的一定是 API 消費方和後端服務之間的流量,也稱為南北流量;微網關一般也隻是處理南北流量,當負責的服務本身缺乏注冊發現機制,例如運作在傳統應用伺服器上的不同應用,當互相調用需要一個切面管控時,可以用微網關來統一處理服務間流量,也稱為東西流量。
微服務網關定義
在這裡我們做個定義:用于微服務環境的微網關,稱作
微服務網關。開源産品中,Kong、Netflix Zuul、Spring Cloud Gateway、Ambassador 等都可以用來作為微服務網關,其中 Ambassador 是基于 Envoy 建構的,屬于 K8s 原生微服務網關。那麼,微服務網關有什麼特别的地方,需要解決什麼問題呢?
API 網關在微服務架構下面臨的挑戰
服務治理訴求
在微服務架構模式下,小型化、自包含、相對隔離、随時可運作的應用形态,帶來了極大的靈活性和彈性。但是微服務架構高度動态的服務分布和複雜依賴的特點也帶來了很多挑戰:鍊路複雜,定位故障點困難;一個服務的故障可能帶來雪崩效應;端到端的測試難以實施等等。對應這些問題,出現了一系列典型的服務治理手段:
- 鍊路壓測 - 端到端實際流量特征的測試,盡可能多暴露問題與風險,好針對制定保障政策
- 監控報警 - 實時監控各個服務、元件的狀态名額,即時報警
- 鍊路追蹤 - 追蹤使用者請求産生的服務調用路徑,分析瓶頸風險,快速定位問題
- 日志分析 - 搜集分散的日志,提供快速準确查詢,配合鍊路追蹤分析問題
- 通路控制 - 實施權限檢查,規範調用控制
- 服務發現 - 動态注冊發現,同步服務狀态和可用性
- 流量管理 - 結合服務發現,實施靈活的負載政策和流量排程
- 熔斷降級 - 核心業務失效快速響應,避免請求堆積,非核心業務降級處理,保證核心業務流暢
- 配置中心 - 集中管理配置,高效高可用推送,保護敏感配置資訊
在實作上,這些橫向的治理能力大都需要微服務應用配合對接,這些公共機制的實作可以通過微服務架構(例如 Spring Cloud、Dubbo)來提供,讓應用開發能專注在業務邏輯上。或者采用服務網格(Service Mesh)模式,從應用實作解耦,付出一定性能代價,在應用本地的反向代理元件(Sidecar)中轉發流量并處理所有這些邏輯。
微服務網關的配合
由于微服務的調用方可能在微服務環境内部,也可能在微服務環境外部,這些橫向的治理能力,有時也需要同時作用到微服務環境與外部之間的南北流量上。這時就需要網關的配合。
以服務發現和流量管理這兩個政策為例,考察兩個非常普遍的典型場景:
場景一:流量正确路由到可用的微服務執行個體
場景二:同步在網關上執行金絲雀釋出灰階規則
當一個微服務的執行個體增加、減少,或者不可用時,網關要能把流量正确地路由到可用的微服務執行個體上;
當微服務更新版本,采用金絲雀釋出的時候,灰階政策不但需要在微服務環境内的東西流量上生效,在網關上也要執行相同的灰階政策。
很明顯,網關進行這樣的配合,如果采用人工操作的方式的話,會帶來很多問題:
首先是實時性差,導緻網關流量路由的失效和錯誤幾率增大;
其次是運維和管理的壓力,對應關系容易錯亂,操作可能失誤錯漏,帶來很大風險。
設想一下,要校對執行個體的可用狀态,然後在網關或網關後的負載上挂載、解除安裝對應端點;或在金絲雀釋出、中斷、復原時,在網關上進行對應的灰階判定和路由配置。如果微服務稍微多些,運維和管理的難度、風險都是顯而易見的。
是以,微服務的網關,需要能夠和微服務環境的治理能力自動化關聯。對應上面的例子,就是要求:
能夠自動基于微服務環境的服務發現政策,将服務請求動态地路由到可用的微服務執行個體上;
能夠在微服務環境進行金絲雀釋出時,自動同步配合執行對應的灰階政策。
也就是說,需要微服務網關和微服務環境在服務治理政策上能夠無縫銜接,自動配合生效。對這個要求的支援,也正是新釋出的微服務網關服務(CSB Micro Gateway)的核心特性之一。
微服務網關雲服務
使用阿裡雲雲服務總線(Cloud Service Bus)新釋出的微服務網關服務(CSB Micro Gateway),使用者可以為目标微服務環境快速建立微服務網關。指定注冊中心後,微服務網關就可以動态感覺微服務節點的變更,将 API 請求動态路由到後端微服務。通過控制台可以基于注冊中心的服務清單快速釋出 API,支援服務路由規則的動态變更生效,可以友善地管理限流、鑒權、後端負載均衡等控制政策,提供完整的 API 通路日志和統計報告,并且支援和後端微服務治理政策的關聯,例如配合微服務應用的更新釋出自動執行灰階路由政策。
新釋出的微服務網關服務:
https://help.aliyun.com/document_detail/156009.html微服務親和特性
- 關聯微服務環境,快捷建立、擴容縮容微服務網關
- 基于微服務環境注冊中心的服務清單,友善地選取服務開放為 API
- 動态感覺微服務節點的變更,将 API 請求路由到可用微服務執行個體上
- 支援服務路由、限流、鑒權、後端負載均衡等各種控制政策,動态生效無需重新開機
- 支援與微服務治理政策的無縫關聯,例如無需使用者幹預,自動配合執行灰階路由政策等
現狀與規劃
微服務網關服務(CSB Micro Gateway)是阿裡雲上的托管式微服務網關服務,提供高度的可用性和穩定性,基于開源引擎,支援開源配置方式。将陸續提供多種微服務網關引擎的托管服務,以滿足不同場景的側重需求和使用偏好。
公測首先推出基于 Zuul 的服務版本,支援 Eureka 注冊中心以及 Spring Cloud 微服務架構。
将很快支援基于 Kong、Ambassador 等引擎的托管服務
将很快推出 Nacos 等多種微服務注冊中心的支援,将陸續支援 Dubbo、gPRC 等多種微服務架構
将陸續提供豐富的控制政策,包括各種鑒權方式、流量控制、安全防護、服務組裝變換等等,以及支援使用者自定義實作的政策
将陸續補充企業級網關所側重的一些開放管控能力,例如 API 标準規範定義、API 文檔、API 測試調用、多版本管理等
歡迎試用
歡迎試用,敬請密切關注微服務網關的釋出更新!
微服務網關控制台入口(無需開通,直接使用):
https://microgw.console.aliyun.com/微服務網關使用說明 :
相關産品與參考
阿裡雲雲原生微服務系列雲服務
鍊路壓測 - 性能測試 PTS 應用監控 - 應用實時監控服務 ARMS 鍊路追蹤 - 鍊路追蹤 Tracing Analysis 服務發現 - 微服務引擎 MSE 流量管理 - 應用高可用服務 AHAS 配置中心 - 應用配置管理 ACM 應用托管 - 企業級分布式應用服務 EDAS 無伺服器 - Serverless 應用引擎 SAE開源與參考資料:
Microservice Architecture Spring Cloud Dubbo Istio Netflix Zuul Spring Cloud Gateway Kong Gateway Ambassador Edge Stack Traefik作者資訊:王佺倫,阿裡巴巴進階産品專家,負責阿裡雲雲原生應用平台 iPaaS 産品線,目前專注于開放平台、服務網關和應用內建領域。