為什麼微服務需要API閘道器

2021-10-18 20:16:47 字數 1878 閱讀 4500

分布式技術原理與實戰45講 - 邴越

針對這些問題,乙個常用的解決方案是使用 api 服務閘道器。在微服務設計中,需要隔離內外部呼叫,統一進行系統鑑權、業務監控等,api 服務閘道器是乙個非常合適的切入口。

通過引入 api 閘道器這一角色,可以高效地實現微服務集群的輸出,節約後端服務開發成本,減少上線風險,並為服務熔斷、灰度發布、線上測試等提供解決方案。

使用閘道器,可以優化微服務架構中系統過於分散的弊端,使得架構更加優雅,選擇乙個適合的 api 閘道器,可以有效地簡化開發並提高運維與管理效率。

api 閘道器在微服務架構中並不是乙個必需專案,而是系統設計的乙個解決方案,用來整合各個不同模組的微服務,統一協調服務。

api 閘道器自身也是乙個服務,閘道器封裝了系統內部架構,為每個客戶端提供了乙個定製的 api。從物件導向設計的角度看,它與外觀模式(facade pattern)類似,外觀模式的定義是,外部與乙個子系統的通訊必須通過乙個統一的外觀物件進行,為子系統中的一組介面提供乙個一致的介面,這一點和 api 閘道器的作用非常類似。

除了封裝內部系統之外,api 閘道器作為乙個系統訪問的切面,還可以新增身份驗證、監控、負載均衡、限流、降級與應用檢測等功能。

通過在微服務架構中引入 api 閘道器,可以帶來以下的收益:

api 服務閘道器對外提供統一的入口供客戶端訪問,隱藏系統架構實現的細節,讓微服務使用更為友好;

借助 api 服務閘道器可統一做切面任務,避免每個微服務自己開發,提公升效率,使系統更加標準化;

通過 api 服務閘道器,可以將異構系統進行統一整合,比如外部 api 使用 http 介面,內部微服務可以使用一些效能更高的通訊協議,然後在閘道器中進行轉換,提供統一的外部 rest 介面;

通過微服務的統一訪問控制,可以更好地實現鑑權,提高系統的安全性。

api 閘道器並不是乙個必需的角色,在系統設計中引入閘道器,也會導致系統複雜性增加,帶來下面的問題:

在發布和部署階段需要管理閘道器的配置,保證外部 api 訪問的是正常的服務例項;

api 服務閘道器需要實現乙個高可用伸縮性強的服務,避免單點失效,否則會成為系統的瓶頸;

引入api 服務閘道器額外新增了乙個需要維護的系統,增加了開發和運維的工作量,提高了系統複雜程度。

可以看到,應用api 閘道器需要權衡帶來的收益和因此增加的複雜性,這也是我們前面說的,分布式系統是複雜性和收益的平衡,需要針對具體業務進行合理的架構設計。

在微服務領域,有許多開源閘道器實現,應用比較多的是 spring cloud zuul 和 spring cloud gateway。

spring cloud zuul 是 spring cloud netflix 專案的核心元件之一,是 netflix 開發的一款提供動態路由、監控、彈性、安全的閘道器服務。

zuul 分為 1.x 和 2.x 兩個大版本,1.x 版本是基於 servlet 構建的,採用的是阻塞和多執行緒方式。1.x 版本在 spring cloud 中做了比較好的整合,但是效能不是很理想。後來 netflix 宣布開發 2.x 版本,目前已經更新到了 2.x 版本,不過 spring cloud 官方並沒有整合,而是開發了自己的 spring cloud gateway。

spring cloud gateway 是 spring cloud 體系的第二代閘道器元件,基於 spring 5.0 的新特性 webflux 進行開發,底層網路通訊框架使用的是 netty。

spring cloud gateway 可以替代第一代的閘道器元件 zuul。spring cloud gateway 可以通過服務發現元件自動**請求,整合了 ribbon 做負載均衡,支援使用 hystrix 對閘道器進行保護,當然也可以選擇其他的容錯元件,比如整合阿里巴巴開源的 sentinel,實現更好的限流降級等功能。

微服務API閘道器

微服務api閘道器 api閘道器是乙個伺服器,是系統的唯一入口。從物件導向設計的角度看,它與外觀模式類似。api閘道器封裝了系統內部架構,為每個客戶端提供乙個定製的api。它可能還具有其它職責,如身份驗證 監控 負載均衡 快取 請求分片與管理 靜態響應處理。api閘道器方式的核心要點是,所有的客戶端...

微服務 API閘道器 限流

我們在api閘道器中已經介紹了,限流是保護閘道器的手段之一,和身份認證以及鑑權一起組成安全防禦大閘。其目的是對併發請求進行限速或限制乙個時間視窗內請求的數量,一旦達到閾值就排隊等待或降級甚至拒絕服務。根據上面列出的原因,我們自然知道限流該怎麼限制法,但是具體要怎麼實現呢?也就是該怎麼設計演算法來實現...

微服務架構為何需要搭配API閘道器?

隨著以api為核心的it專案不斷增加,api閘道器與管理層亦愈發普遍。那麼,我們是否應當為微服務搭配api閘道器?如果需要,其又能夠帶來哪些助益?api閘道器是什麼?api閘道器負責提供一套單一且統一的api入口點,其跨越乙個或者多個內部api。其通常亦設定了層速率限制與安全性機制。tyk.io等a...