API網關
大型項目開發過程中,往往都是由各個不同的微服務組成的,服務可能分佈在不同地區不同機房,那用戶如何知道訪問某服務的時候該服務的實際地址呢,這時候就需要API網關了
API 網關就像服務的門面一樣,是系統對外的唯一接口,所有的請求經過網關代理轉發到對應的服務實例,這樣就不需要用戶關注微服務的信息了
而且網關層也可以集成一些非業務功能,比如說鑑權,限流,訪問日誌,監控等操作
對於服務數量衆多、複雜度較高、規模比較大的系統來說,使用 API 網關具有以下好處:
客戶端通過 API 網關與微服務交互時,客戶端只需要知道 API 網關地址即可,而不需要維護大量的服務地址,簡化了客戶端的開發。
客戶端直接與 API 網關通信,能夠減少客戶端與各個服務的交互次數。
客戶端與後端的服務耦合度降低。
節省流量,提高性能,提升用戶體驗。
API 網關還提供了安全、流控、過濾、緩存、計費以及監控等 API 管理功能。
常見的 API 網關實現方案主要有以下 5 種:
- Spring Cloud Gateway
- Spring Cloud Netflix Zuul
- Kong
- Nginx+Lua
- Traefik
Spring Cloud Gateway
Spring Cloud Gateway 是 Spring Cloud 團隊基於 Spring 5.0、Spring Boot 2.0 和 Project Reactor 等技術開發的高性能 API 網關組件。
Spring Cloud Gateway 旨在提供一種簡單而有效的途徑來發送 API,併爲它們提供橫切關注點,例如:安全性,監控/指標和彈性。
Spring Cloud Gateway 是基於 WebFlux 框架實現的,而 WebFlux 框架底層則使用了高性能的 Reactor 模式通信框架 Netty。
Spring Cloud Gateway 核心概念
Spring Cloud GateWay 最主要的功能就是路由轉發,而在定義轉發規則時主要涉及了以下三個核心概念,如下表。
核心概念 | 描述 |
---|---|
Route(路由) | 網關最基本的模塊。它由一個 ID、一個目標 URI、一組斷言(Predicate)和一組過濾器(Filter)組成。 |
Predicate(斷言) | 路由轉發的判斷條件,我們可以通過 Predicate 對 HTTP 請求進行匹配,例如請求方式、請求路徑、請求頭、參數等,如果請求與斷言匹配成功,則將請求轉發到相應的服務。 |
Filter(過濾器) | 過濾器,我們可以使用它對請求進行攔截和修改,還可以使用它對上文的響應進行再處理。 |
Gateway 的工作流程
Spring Cloud Gateway 工作流程如下圖。
Spring Cloud Gateway 工作流程說明如下:
1 | 客戶端將請求發送到 Spring Cloud Gateway 上。 |
動手實操
操作步驟
1 | 準備部署nacos |
集成SpringCloudGateway網關
SpringCloud 在最新版的JAVA要求支持是>17 且Springboot 與nacos 之間存在版本要求
本文使用
1 | <java.version>1.8</java.version> |
- 推薦使用 https://start.aliyun.com/ 搭建項目
- 開啓 spring.cloud.gateway.discovery.locator.enabled= true
1 | # Nacos幫助文檔: https://nacos:io/zh-cn/docs/concepts:html |
- 啓動一個微服務1並結合網關訪問
- 啓動一個微服務2並結合網關訪問
Nacos + Spring Cloud Gateway動態路由配置
我們知道,nacos是可以實現 配置的動態刷新 和 服務發現的。那麼我們將 Spring Cloud Gateway的配置放到 nacos上是否就可以實現動態的刷新路由呢?
通過測試發現是可以實現的。此處我們通過 Spring Cloud Alibaba技術來實現。
1、服務的註冊和發現使用 Spring Cloud Alibaba Nacos來實現。
2、網關使用 Spring Cloud Gateway來實現。
結論: 其實只需要在 Spring Cloud Gateway中整合 Spring Cloud Alibaba Nacos Config,網關的路由配置就可以自動刷新了,不需要額外的編碼。
如果想通過 lb://XXXX-service 訪問微服務,則需要 spring-cloud-starter-loadbalancer
1 | <dependency> |
- 關注公衆號 [龗孖] 或搜索公衆號[lingmaW] , 獲得更多新幹貨!!!
- 版權聲明: 本博客所有文章除特別聲明外,均採用 反996許可證版本1.0 許可協議。轉載請註明出處!