微服務網關
數據交互示意圖
數據同步
admin與網關進行數據同步。
數據同步是指在 shenyu-admin 后臺操作數據以后,使用何種策略將數據同步到 Apache ShenYu 網關。Apache ShenYu 網關當前支持ZooKeeper、WebSocket、Http長輪詢、Nacos 、Etcd 和 Consul 進行數據同步。
admin配置文件
shenyu:
register:
registerType: nacos #http #zookeeper #etcd #nacos #consul
serverLists: xxx.xxx.xxx.xxx:8848 #localhost:2181 #http://localhost:2379 #localhost:8848
props:
sessionTimeout: 5000
connectionTimeout: 2000
checked: true
zombieCheckTimes: 5
scheduledTime: 10
nacosNameSpace: ShenyuRegisterCenter
sync:
nacos:
url: xxx.xxx.xxx.xxx:8848
namespace: ShenyuRegisterCenter
網關配置
spring:
cloud:
discovery:
enabled: true
nacos:
discovery:
server-addr: 10.21.2.101:8848 # Spring Cloud Alibaba Dubbo use this.
enabled: true
namespace: ShenyuRegisterCenter
shenyu:
sync:
nacos:
url: xxx.xxx.xxx.xxx:8848
namespace: ShenyuRegisterCenteregisterCenter
客戶端配置
spring:
cloud:
discovery:
enabled: true
nacos:
discovery:
server-addr: 10.21.2.101:8848 # Spring Cloud Alibaba Dubbo use this.
enabled: true
namespace: ShenyuRegisterCenter
shenyu:
register:
registerType: nacos #http #zookeeper #etcd #nacos #consul
serverLists: 10.21.2.101:8848 #localhost:2181 #http://localhost:2379 #localhost:8848
props:
username: admin
password: 123456
nacosNameSpace: ShenyuRegisterCenter
client:
springCloud:
props:
contextPath: /springcloud
應用客戶端接入是指將微服務應用的接口信息同步到shenyu-admin,當前支持Http、 Dubbo、 Spring Cloud、 gRPC、 Motan、 Sofa、 Tars等微服務協議的接入。
應用客戶端可以通過Http與admin直接注冊;也支持已中間件過渡數據如Zookeeper、Etcd、Consul和Nacos,應用客戶端和shenyu-admin通過中間件的數據監聽實現數據的同步。
功能清單
插件集合
HTTP
插件名稱 |
功能 |
contextpath |
設置服務的上下文路徑;在接口調用的時候插件統一給服務器的接口地址加上前綴 |
modifyResponse |
對響應進行修改 |
paramMApping |
請求參數進行修改 |
redirect |
重定向請求 |
request |
請求參數、請求頭以及 Cookie 來添加、修改、移除請求頭 |
rewrite |
重寫請求路徑 |
代理
插件名稱 |
功能 |
divide |
處理 http協議 請求 |
dubbo |
dubbo插件是將 http協議 轉換成 dubbo協議 的插件 |
SpringCloud插件 |
將http協議 轉成 Spring Cloud協議 |
熔斷限流
sentinel插件是網關用來對流量進行限流與熔斷的可選選擇之一
安全
插件名稱 |
功能 |
cryptorRequest |
插件是通過 fieldNames 去匹配 requestBody 里面的參數進行 解密 處理,替換當前 requestBody 內容 |
CryptorResponse |
fieldNames 去匹配 responseBody 里面的參數進行 加密 處理,替換當前 fieldNames 對應內容 |
jwt 插件 |
jwt 插件,是針對 http 請求頭的 token屬性或者是 authorization 屬性攜帶值進行鑒權判斷,兼容 OAuth2.0 |
OAuth2 |
插件使用 Webflux OAuth2 實現,用于支持 OAuth 協議 |
Sign插件 |
用來對請求進行簽名認證 |
可觀察
- 請求日志記錄插件
- Metrics插件插件是網關用來監控自身運行狀態(JVM相關),請求的響應遲延,QPS、TPS等相關metrics
問題
- API網關缺少服務注冊的信息,按理說網關應該可以觀測到當前應用的服務實例數;
- 依賴組件較多(如果整體平臺技術選型為nacos,則可以接受)
- 客戶端需要依賴thin sdk實現客戶端注冊服務接口信息到注冊中心
- 客戶端調用http 頭需要新增rpc_type屬性