soul開源網關項目搭建學習


1. soul開源網關項目搭建學習

1.1. 地址

https://gitee.com/shuaiqiyu/soul

1.2. 介紹

  1. 官方介紹:這是一個異步的,高性能的,跨語言的,響應式的API網關。參考了Kong,Spring-Cloud-Gateway等優秀的網關后,站在巨人的肩膀上,Soul由此誕生!

1.3. 特性

  1. 支持各種語言,無縫集成Dubbo,SpringCloud。
  2. 豐富的插件支持,鑒權,限流,熔斷,防火牆等等。
  3. 網關多種規則動態配置,支持各種策略配置。
  4. 插件熱插拔,易擴展
  5. 支持集群部署,支持A/B Test

1.4. 架構圖

架構

1.5. 依賴

  1. jdk1.8+
  2. maven3.2+
  3. git
  4. zookeeper
  5. mysql

1.6. 插件

1.6.1. divide插件

  1. divide插件定位是一個http代理插件,當請求頭的rpcType為http的時候,並且插件開啟的時候,它根據請求參數匹配到規則,然后進行響應式的代理調用。

1.6.2. dubbo插件

  1. dubbo插件,是soul支持dubbo框架的插件。dubbo插件開啟,並且當請求頭的rpcType字段為dubbo的時候,會走這個插件。

1.6.3. Springcloud插件

  1. springcloud插件,是soul支持springcloud框架的插件。Springcloud插件開啟,並且當請求頭的rpcType字段為springcloud的時候,會走這個插件。
  2. 可以進行hystrix熔斷參數配置
  3. serviceId的服務調用

1.7. 源碼解析

1.7.1. 核心 soul-web

1.7.1.1. 負載均衡算法(balance包)

  1. 代碼架構還是比較清晰的,首先負載均衡算法
  2. 提供了3種算法,hash(哈希算法),random(隨機),roundRobin(循環權重分配)分別對應了spi包里的三個類
  3. 算法實際使用在divide插件,追溯源碼可以發現
  4. 具體算法設置在管理頁面divide插件的規則列表設置

1.7.1.2. 緩存(cache包)

  1. UpstreamCacheManager類是divide插件專用,用來緩存更新該插件的選擇器和規則以及定時檢查url
  2. ZookeeperCacheManager 用來進行插件、選擇器、規則、權限的緩存和zookeeper節點訂閱

1.7.1.3. 自定義線程工廠(concurrent包)

  1. SoulThreadFactory用來自定義工廠名稱、是否守護線程、優先級

1.7.1.4. 條件匹配(condition包)

  1. 管理頁面中選擇器規則的條件判斷和策略控制

1.7.1.5. 配置(config包)

  1. dubbo插件配置
  2. 異常處理配置
  3. 時序數據庫InfluxDB配置
  4. redis限流配置
  5. soul基本插件配合,如監控、限流、簽名等
  6. springcloud插件配置

1.7.1.6. 並發寫入監控數據(disruptor包)

  1. 使用了高性能並發框架disruptor

1.7.1.7. web請求過濾(filter包)

  1. 用於web請求過濾,進行參數驗證、過期驗證

1.7.1.8. handler處理(handler包)

  1. 用於創建webhandler相關實現,為webflux響應式編程實現
  2. 用於處理全局異常
  3. web請求處理攔截,SoulWebHandler是本項目主要入口,對全部插件進行了責任鏈模式的處理,如下為主要代碼

1.7.1.9. influxDb操作類配置(influxdb包)

1.7.1.10. logo包

  1. 啟動打印logo

1.7.1.11. 插件(plugin包)

  1. 監控調用插件monitor
  2. 簽名插件sign
  3. 防火牆插件waf
  4. http分發插件divide
  5. dubbo插件
  6. 限流插件rateLimiter
  7. 重寫插件rewrite
  8. springcloud插件
  9. 以及以上插件所依賴的某些服務,如redis限流,hystrix限流

1.7.1.12. 請求對象(request包)

  1. RequestDTO對象

1.8. 總結

  經過所有核心代碼分析,整個流程大致就清楚了,項目核心采用責任鏈模式進行插件熱插拔,使用zookeeper管理配置信息,使用InfluxDb存儲監控調用信息,使用distruptor並發高性能隊列進行監控寫入,架構采用了webflux反應式Web框架基於Netty進行異步非阻塞調用

1.9. 具體介紹文檔

https://dromara.org/website/zh-cn/docs/soul/selector.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM