網關常見問題 侯門一入深似海,從此蕭郎是路人 1、什麼是網關 總而言之,網關就是統一入口、鑒權校驗、動態路由和過濾封裝。 2、為什麼需要網關 微服務架構下,單體應用被切割成多個微服務,如果將所有的微服務直接對外暴露,會出現安全方面的各種問題,且內外耦合嚴重。 Gateway 網關架構可以細到為每一個 ...
網關常見問題
侯門一入深似海,從此蕭郎是路人
1、什麼是網關
總而言之,網關就是統一入口、鑒權校驗、動態路由和過濾封裝。
2、為什麼需要網關
- 微服務架構下,單體應用被切割成多個微服務,如果將所有的微服務直接對外暴露,會出現安全方面的各種問題,且內外耦合嚴重。
- Gateway 網關架構可以細到為每一個服務的實例單獨配置一個 Gateway,也可以粗到為整個架構配置一個 Gateway。這樣,原本複雜的系統架構就會變得更簡單可控。
3、網關設計
我認為沒有很大的必要去重覆造車,現在市面上較為成熟的網關方案還是挺有借鑒價值的,不過我們仍可以瞭解下網關的設計思路。
不管是何種網關都需要滿足以下的功能和特性: 請求路由、服務註冊、負載均衡、彈力服務、安全、高性能和高可用。
請求路由
當客戶端請求過來,調用端無需知道自己實際調用的其它服務地址,統一交給 Gateway 來處理,避免了內部多個微服務直接對外暴露。
服務註冊
網關的服務註冊功能,就是為後端的服務實例提供服務的地址註冊、取消註冊,也就是註冊一些 API 介面。這樣 Gateway 就可以根據接收到的請求中的信息來決定路由到正確的後端服務上。
負載均衡
一個網關用於接收多個服務實例,所以網關還需要在各個對等的服務實例上做負載均衡策略。常見的策略就是 Round-Robin 輪詢、權重和最少使用。
彈力服務
網關應該讓應用服務只關心自己的業務邏輯,要引入非同步、重試、冪等、流控、熔斷和監視等彈力服務手段。
安全
外界訪問的第一步就是網關,其安全要求毋庸置疑。打頭陣的網關作為全系統第一道防線對後端的服務進行保護,基本要滿足SSL 加密及證書管理、Session 驗證、授權、數據校驗,以及對請求源進行惡意攻擊的防範。
4、網關落地
瞭解了大概的網關設計思路,可以根據公司項目業務需求進行技術選型,現主要分為流量網關和業務網關兩大類。
流量網關
流量網關,大致就是控制流量進入集群的一類網關,比如一個服務集群有很多非法或無效的請求,需要將請求拒之門外,降低集群的流量壓力。
業務網關
業務網關更註重與伺服器應用層交互,如各個微服務的許可權控制、日誌輸出、數據加密和熔斷限流等。
5、常見的開源網關
OpenResty
- OpenResty是一個流量網關。
- OpenResty是基於 Nginx與 Lua 的高性能 Web 平臺,其內部集成了大量精良的 Lua 庫、第三方模塊以及大多數的依賴項。用於方便地搭建能夠處理超高併發、擴展性極高的Web 服務和動態網關。
Kong
- Kong 是基於OpenResty開發的一個流量層網關,是一個雲原生、快速、可擴展、分散式的Api 網關。
- Kong繼承了OpenResty的高性能、易擴展性等特點,且支持通過簡單的增加機器節點,可以很容易的水平擴展。
- Kong優化了網關的訪問限制、安全、流量控制、分析監控、日誌、請求轉發和合成功能相關功能。
- Kong更加專註於全局的Api管理策略,如全局流量監控、日誌記錄、全局限流、黑白名單控制、接入請求到業務系統的負載均衡等。
Zuul1.0
- Zuul是Netflix開發的一套通用API網關,Zuul1.0採用同步阻塞架構,優化後的Zuul2,用Netty Server代替Servlet,升級為非同步非阻塞架構。
- Zuul使用了一系列不同類型的過濾器,夠快速靈活地將動態路由、監視、彈性和安全性等功能應用到服務中。
- Zuul提供了一個動態讀取、編譯和運行這些過濾器的框架。過濾器之間不直接通信,而是通過每個請求特有的RequestContext共用狀態。
Spring Cloud Gateway
- SpringCloud Gateway 是Spring Cloud 生態系統中的網關,底層使用了高性能的通信框架Netty,其目的就是為微服務架構提供一種簡單有效的統一的 API 路由管理方式,替代 Zuul 實現微服務全家桶技術棧。
- Spring Cloud Gateway 不僅提供統一的路由方式,並且基於 Filter 鏈的方式提供了網關基本的功能,例如:安全、監控/指標、集成熔斷和限流。
侯門一入深似海 從此蕭郎是路人