斗膽推薦一款剛出的微服務網關


前言

使用 API 網關作為內部服務面向客戶端的單一入口,是一種普遍采用的架構模式。企業組織通過良好定義的 API 將內部系統向內部和外部用戶公開,通常都會采用 API 網關來處理橫向的關注點,包括訪問控制、速率限制、負載均衡等等,來實現安全可控的 API 開放。而被廣泛實踐的微服務架構在提供高度靈活性和彈性的同時,也給 API 網關帶來了更多的挑戰。

阿里雲雲服務總線(Cloud Service Bus)新推出微服務網關服務(CSB Micro Gateway),針對微服務架構下 API 開放的特點,提供能與微服務環境的治理策略無縫銜接的網關服務,實現高效的微服務 API 開放。

API 網關的作用

API 網關典型作用

相信許多人都熟悉 API 網關的概念。作為內部服務面向客戶端的單一入口,API 網關有兩個最典型的作用:

1、內外解耦:對客戶端屏蔽內部服務的動態多樣化實現細節,如技術框架、拆分粒度、接口結構、實例狀態等

2、切面控制:讓內部服務能專注在業務邏輯上,集中處理橫向的關注點,如路由、安全、限流、日志、監控等

1

API 網關使用類型

實際使用中,對應 API 網關所在位置和針對場景的不同,可分成兩種類型:

1、企業級網關:位於企業組織的外圍,面對外部的 API 消費者或服務提供者。通常將企業自身的數據和能力 API 化,對外開放,也有允許外部服務入駐的情況。總的來說,以支撐服務入駐、服務運營和服務門戶場景為主,側重解決管理和運營挑戰。

2、微網關:位於企業組織內部,面對內部的 API 消費者,可以看做是內部服務之前的最后一道防線。通常按內部服務的業務划分、物理環境以及技術形態的差異,設立多個微網關來分別負責。總的來說,以提供快捷開放、策略控制、服務適配能力為主,側重提升開發和運維效率。

2

實際上,企業級網關和微網關只是兩種使用類型,在關注的網關特性上有不同側重,實踐上並非一定需要不同的產品或兩套獨立的部署。

API 網關流量特征

企業級網關處理的一定是 API 消費方和后端服務之間的流量,也稱為南北流量;微網關一般也只是處理南北流量,當負責的服務本身缺乏注冊發現機制,例如運行在傳統應用服務器上的不同應用,當相互調用需要一個切面管控時,可以用微網關來統一處理服務間流量,也稱為東西流量。

微服務網關定義

在這里我們做個定義:用於微服務環境的微網關,稱作微服務網關。開源產品中,Kong、Netflix Zuul、Spring Cloud Gateway、Ambassador 等都可以用來作為微服務網關,其中 Ambassador 是基於 Envoy 構建的,屬於 K8s 原生微服務網關。那么,微服務網關有什么特別的地方,需要解決什么問題呢?

API 網關在微服務架構下面臨的挑戰

服務治理訴求

在微服務架構模式下,小型化、自包含、相對隔離、隨時可運行的應用形態,帶來了極大的靈活性和彈性。但是微服務架構高度動態的服務分布和復雜依賴的特點也帶來了很多挑戰:鏈路復雜,定位故障點困難;一個服務的故障可能帶來雪崩效應;端到端的測試難以實施等等。對應這些問題,出現了一系列典型的服務治理手段:

3

  • 鏈路壓測 - 端到端實際流量特征的測試,盡可能多暴露問題與風險,好針對制定保障策略
  • 監控報警 - 實時監控各個服務、組件的狀態指標,即時報警
  • 鏈路追蹤 - 追蹤用戶請求產生的服務調用路徑,分析瓶頸風險,快速定位問題
  • 日志分析 - 搜集分散的日志,提供快速准確查詢,配合鏈路追蹤分析問題
  • 訪問控制 - 實施權限檢查,規范調用控制
  • 服務發現 - 動態注冊發現,同步服務狀態和可用性
  • 流量管理 - 結合服務發現,實施靈活的負載策略和流量調度
  • 熔斷降級 - 核心業務失效快速響應,避免請求堆積,非核心業務降級處理,保證核心業務流暢
  • 配置中心 - 集中管理配置,高效高可用推送,保護敏感配置信息

在實現上,這些橫向的治理能力大都需要微服務應用配合對接,這些公共機制的實現可以通過微服務框架(例如 Spring Cloud、Dubbo)來提供,讓應用開發能專注在業務邏輯上。或者采用服務網格(Service Mesh)模式,從應用實現解耦,付出一定性能代價,在應用本地的反向代理組件(Sidecar)中轉發流量並處理所有這些邏輯。

微服務網關的配合

由於微服務的調用方可能在微服務環境內部,也可能在微服務環境外部,這些橫向的治理能力,有時也需要同時作用到微服務環境與外部之間的南北流量上。這時就需要網關的配合。

以服務發現和流量管理這兩個策略為例,考察兩個非常普遍的典型場景:
lADPD4PvIsRekvbNASDNAi4_558_288_jpg_720x720q90g

場景一:流量正確路由到可用的微服務實例

lADPD4PvIsRekvjNASXNA3w_892_293_jpg_720x720q90g

場景二:同步在網關上執行金絲雀發布灰度規則

當一個微服務的實例增加、減少,或者不可用時,網關要能把流量正確地路由到可用的微服務實例上;
當微服務更新版本,采用金絲雀發布的時候,灰度策略不但需要在微服務環境內的東西流量上生效,在網關上也要執行相同的灰度策略。

很明顯,網關進行這樣的配合,如果采用人工操作的方式的話,會帶來很多問題:
首先是實時性差,導致網關流量路由的失效和錯誤幾率增大;
其次是運維和管理的壓力,對應關系容易錯亂,操作可能失誤錯漏,帶來很大風險。

設想一下,要校對實例的可用狀態,然后在網關或網關后的負載上掛載、卸載對應端點;或在金絲雀發布、中斷、回滾時,在網關上進行對應的灰度判定和路由配置。如果微服務稍微多些,運維和管理的難度、風險都是顯而易見的。

因此,微服務的網關,需要能夠和微服務環境的治理能力自動化聯動。對應上面的例子,就是要求:
能夠自動基於微服務環境的服務發現策略,將服務請求動態地路由到可用的微服務實例上;
能夠在微服務環境進行金絲雀發布時,自動同步配合執行對應的灰度策略。

也就是說,需要微服務網關和微服務環境在服務治理策略上能夠無縫銜接,自動配合生效。對這個要求的支持,也正是新發布的微服務網關服務(CSB Micro Gateway)的核心特性之一。

微服務網關雲服務

使用阿里雲雲服務總線(Cloud Service Bus)新發布的微服務網關服務(CSB Micro Gateway),用戶可以為目標微服務環境快速創建微服務網關。指定注冊中心后,微服務網關就可以動態感知微服務節點的變更,將 API 請求動態路由到后端微服務。通過控制台可以基於注冊中心的服務列表快速發布 API,支持服務路由規則的動態變更生效,可以方便地管理限流、鑒權、后端負載均衡等控制策略,提供完整的 API 訪問日志和統計報告,並且支持和后端微服務治理策略的聯動,例如配合微服務應用的升級發布自動執行灰度路由策略。

新發布的微服務網關服務:
https://help.aliyun.com/document_detail/156009.html

4

微服務親和特性

  • 關聯微服務環境,快捷創建、擴容縮容微服務網關
  • 基於微服務環境注冊中心的服務列表,方便地選取服務開放為 API
  • 動態感知微服務節點的變更,將 API 請求路由到可用微服務實例上
  • 支持服務路由、限流、鑒權、后端負載均衡等各種控制策略,動態生效無需重啟
  • 支持與微服務治理策略的無縫聯動,例如無需用戶干預,自動配合執行灰度路由策略等

現狀與規划

微服務網關服務(CSB Micro Gateway)是阿里雲上的托管式微服務網關服務,提供高度的可用性和穩定性,基於開源引擎,支持開源配置方式。將陸續提供多種微服務網關引擎的托管服務,以滿足不同場景的側重需求和使用偏好。

公測首先推出基於 Zuul 的服務版本,支持 Eureka 注冊中心以及 Spring Cloud 微服務框架。
將很快支持基於 Kong、Ambassador 等引擎的托管服務
將很快推出 Nacos 等多種微服務注冊中心的支持,將陸續支持 Dubbo、gPRC 等多種微服務框架
將陸續提供豐富的控制策略,包括各種鑒權方式、流量控制、安全防護、服務組裝變換等等,以及支持用戶自定義實現的策略
將陸續補充企業級網關所側重的一些開放管控能力,例如 API 標准規范定義、API 文檔、API 測試調用、多版本管理等


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM