天天看點

微服務技術棧:API網關中心,落地實作方案一、服務網關簡介二、網關模式三、核心功能四、網關元件

一、服務網關簡介

1、外觀模式

用戶端與各個業務子系統的通信必須通過一個統一的外觀對象進行,外觀模式提供一個高層次的接口,使得子系統更易于使用:

微服務技術棧:API網關中心,落地實作方案一、服務網關簡介二、網關模式三、核心功能四、網關元件

簡單說一下外觀模式,網關和這個模式很像,但是比外觀模式複雜,模式,結構,原則這些都是通用的,在各種架構或元件中使用。

2、網關簡介

微服務網關從感覺上,很像是:攔截器+路由+過濾器,攔截請求,系列基礎處理,路由轉發到指定服務。

服務網關在整個架構體系上也是一個伺服器,作為請求的唯一入口,與外觀模式十分類似,在網關層處理所有的非業務功能,為用戶端提供定制的API,在網關層通常會執行如下操作:如權限校驗、監控、負載均衡、緩存、日志、限流、等等。

二、網關模式

1、模式對比

這裡對比常用的請求服務管理模式,和網關模式,如圖:

微服務技術棧:API網關中心,落地實作方案一、服務網關簡介二、網關模式三、核心功能四、網關元件

正常模式

在沒有網關的情況下,微服務架構會在業務層服務上提供一個API服務,用來接收參數,例如Client-API,通常會根據系統子產品劃分多個API,例如,營運系統,使用者系統等。

  • 請求統一進入Client-API服務 ;
  • Client-API經過鑒權,限流,路由等操作;
  • 如果請求通過,會轉發到相應業務服務上;
  • 如果請求被攔截,會直接傳回給用戶端;
  • Client-API內建所有業務服務的開放接口;

該模式下的缺點非常明顯,每個Client-API都需要實作一套非業務服務,代碼備援,當系統膨脹之後,維護成本極高,适用于輕量級系統架構。

網關模式

在業務服務層上,添加一層網關控制,在服務網關中可以完成一系列的橫切非業務功能:

  • 用戶端請求在網關層做統一攔截;
  • 網關上執行:路由/鑒權/限流/降級等操作;
  • 網關判斷是轉發請求還是直接響應用戶端;

網關服務層要執行很多非業務流程,作為系統的服務端唯一入口,承受所有服務的路由轉發,安全,限流,緩存,日志,監控,熔斷降級等功能,網關服務不僅要做到高可用,還要避免出現性能瓶頸。

2、多重網關

在大型複雜的系統中,通常會對網關做分層管理,把一類業務規劃到一個網關下,避免網關過于臃腫,友善維護和管理:

微服務技術棧:API網關中心,落地實作方案一、服務網關簡介二、網關模式三、核心功能四、網關元件

總網關:通用常用來做路由轉發功能;

子產品網關:分類的業務服務聚合網關,對這類服務的做非業務性操作,最後請求轉發到具體服務上,在資料類平台上,通常對資料通道(流入流出)做一層獨立的服務網關;對資料分析類服務做一層獨立網關;基本是根據服務的使用情況來劃分,這樣避免單層服務網關過于複雜的情況。

三、核心功能

1、配置層面

服務發現

網關應該有服務發現功能,通過統一注冊中心,擷取服務清單,這樣才能執行統一代理服務和路由轉發功能。

路由請求

植入網關層服務之後,用戶端不知道自己請求的是哪個具體的服務,隻需要把請求轉發給網關,網關放行之後會把請求路由到指定業務服務上。

負載均衡

網關連接配接的服務執行個體可能是叢集模式存在,是以網關還可以對各個服務執行個體上執行負載均衡政策,常見的政策就是服務輪詢或者按權重路由。

2、定制開發

定制開發例如:權限校驗,日志內建,接口限流,等相關功能,需要和資料庫互動,可以做成獨立服務,在服務中實作具體的處理邏輯,網關層直接調用即可。

四、網關元件

1、Netflix-Zuul

Zuul網關主要提供動态路由,監控,彈性,安全管控等功能。在分布式的微服務系統中,系統被拆為了多個微服務子產品,通過zuul網關對使用者的請求進行路由,轉發到具體的後微服務子產品中,Netflix開源的一個基于JVM路由和服務端的負載均衡器。

2、Tyk元件

Tyk是一個開源的、輕量級的、快速可伸縮的API網關,支援配額和速度限制,支援認證和資料分析,支援多使用者多組織。基于go語言編寫,在Java架構系統中使用很少。

3、Kong元件

Kong是一款基于Nginx+Lua編寫的高可用,可擴充的開源網關項目,由Mashape公司開放。核心是實作資料庫抽象,路由和插件管理,插件可以存在于單獨的代碼庫中,并且可以在幾行代碼中注入到請求生命周期的任何位置。提供易于使用的RESTfulAPI來操作和配置API管理,并且可以水準擴充多個Kong伺服器,通過前置的負載均衡配置把請求均勻地分發到各個Server,來應對高并發的網絡請求。