Soul 回顧
Soul 是一個基於 Netty 的、反應式編程的、支持多種RPC請求類型的、高性能的、插件化的、動態配置的、支持多種流量控制手段的網關。Soul 靈活的配置以及豐富的插件,可以提供很多開箱即用的能力。
- 支持各種語言(http協議),支持 dubbo,springcloud協議。
- 插件化設計思想,插件熱插拔,易擴展。
- 靈活的流量篩選,能滿足各種流量控制。
- 內置豐富的插件支持,鑑權,限流,熔斷,防火牆等等。
- 流量配置動態化,性能極高,網關消耗在 1~2ms。
- 支持集羣部署,支持 A/B Test,藍綠髮布。
架構
通過近一個月,對 Soul 網關源碼的研究,回過頭來,再來看 Soul 的架構圖。
- Soul-Admin 主要負責管理插件和配置流量控制的規則,配置數據會通過 http 長輪詢、websocket、zookeeper、nacos 等多種方式同步給 Soul-bootstrap。
- 請求到達網關後,會經過插件鏈,匹配到對應的插件後,請求會被插件進行一系列的處理,如防火牆、驗證簽名、限流、過濾、容錯處理、請求重寫等等。
收穫與展望
收穫
- 插件化的設計思想。可以方便的增加功能,代碼的可擴展性非常強。
- 新接觸到了一些新的 RPC 協議。如 tars 協議、sofa 協議
- 學習到了好的設計思路。如 通過 websocket 等方式同步數據,可以解耦系統;插件責任鏈的編程思想,使得整個調用鏈路清晰,可擴展性強;恰當的利用本地內存和集中式內存來緩存數據,提高系統性能。
- 接觸到了好的編程範式。如反應式編程( WebFlux )、異步編程(Servlet 3.0 異步響應機制)
- 閱讀源碼的方式方法以及能力上升了一個臺階
展望
- Soul 中一些具體的編碼技巧,還有待深挖
- Soul 的性能,後面可以想辦法進行壓測