1. soul開源網關項目搭建學習
1.1. 地址
1.2. 介紹
- 官方介紹:這是一個異步的,高性能的,跨語言的,響應式的API網關。參考了Kong,Spring-Cloud-Gateway等優秀的網關后,站在巨人的肩膀上,Soul由此誕生!
1.3. 特性
- 支持各種語言,無縫集成Dubbo,SpringCloud。
- 豐富的插件支持,鑒權,限流,熔斷,防火牆等等。
- 網關多種規則動態配置,支持各種策略配置。
- 插件熱插拔,易擴展
- 支持集群部署,支持A/B Test
1.4. 架構圖
1.5. 依賴
- jdk1.8+
- maven3.2+
- git
- zookeeper
- mysql
1.6. 插件
1.6.1. divide插件
- divide插件定位是一個http代理插件,當請求頭的rpcType為http的時候,並且插件開啟的時候,它根據請求參數匹配到規則,然后進行響應式的代理調用。
1.6.2. dubbo插件
- dubbo插件,是soul支持dubbo框架的插件。dubbo插件開啟,並且當請求頭的rpcType字段為dubbo的時候,會走這個插件。
1.6.3. Springcloud插件
- springcloud插件,是soul支持springcloud框架的插件。Springcloud插件開啟,並且當請求頭的rpcType字段為springcloud的時候,會走這個插件。
- 可以進行hystrix熔斷參數配置
- serviceId的服務調用
1.7. 源碼解析
1.7.1. 核心 soul-web
1.7.1.1. 負載均衡算法(balance包)
- 代碼架構還是比較清晰的,首先負載均衡算法
- 提供了3種算法,hash(哈希算法),random(隨機),roundRobin(循環權重分配)分別對應了spi包里的三個類
- 算法實際使用在divide插件,追溯源碼可以發現
- 具體算法設置在管理頁面divide插件的規則列表設置
1.7.1.2. 緩存(cache包)
- UpstreamCacheManager類是divide插件專用,用來緩存更新該插件的選擇器和規則以及定時檢查url
- ZookeeperCacheManager 用來進行插件、選擇器、規則、權限的緩存和zookeeper節點訂閱
1.7.1.3. 自定義線程工廠(concurrent包)
- SoulThreadFactory用來自定義工廠名稱、是否守護線程、優先級
1.7.1.4. 條件匹配(condition包)
- 管理頁面中選擇器規則的條件判斷和策略控制
1.7.1.5. 配置(config包)
- dubbo插件配置
- 異常處理配置
- 時序數據庫InfluxDB配置
- redis限流配置
- soul基本插件配合,如監控、限流、簽名等
- springcloud插件配置
1.7.1.6. 並發寫入監控數據(disruptor包)
- 使用了高性能並發框架disruptor
1.7.1.7. web請求過濾(filter包)
- 用於web請求過濾,進行參數驗證、過期驗證
1.7.1.8. handler處理(handler包)
- 用於創建webhandler相關實現,為webflux響應式編程實現
- 用於處理全局異常
- web請求處理攔截,SoulWebHandler是本項目主要入口,對全部插件進行了責任鏈模式的處理,如下為主要代碼
1.7.1.9. influxDb操作類配置(influxdb包)
1.7.1.10. logo包
- 啟動打印logo
1.7.1.11. 插件(plugin包)
- 監控調用插件monitor
- 簽名插件sign
- 防火牆插件waf
- http分發插件divide
- dubbo插件
- 限流插件rateLimiter
- 重寫插件rewrite
- springcloud插件
- 以及以上插件所依賴的某些服務,如redis限流,hystrix限流
1.7.1.12. 請求對象(request包)
- RequestDTO對象
1.8. 總結
經過所有核心代碼分析,整個流程大致就清楚了,項目核心采用責任鏈模式進行插件熱插拔,使用zookeeper管理配置信息,使用InfluxDb存儲監控調用信息,使用distruptor並發高性能隊列進行監控寫入,架構采用了webflux反應式Web框架,基於Netty進行異步非阻塞調用