GitHub - wanghongfei/gogate:Go實現的高效能Spring Cloud閘道器

banq發表於2019-07-08

Go實現的高效能Spring Cloud閘道器(支援Consul和Eureka),路由配置熱更新,負載均衡,灰度,服務粒度的流量控制,服務粒度的流量統計!
Go語言實現的Spring Cloud閘道器,目標是效能,即使用更少的資源達到更高的QPS。
GoGate以使用高效能關係著稱的FastHttp庫收發HTTP請求,且會為每個主機建立³³單獨一個HostClient以減少鎖競爭。
目前已經實現的功能有:
  • 基於Eureka(或Consul)的服務發現,註冊
  • 請求路由,路由配置熱更新
  • 負載均衡
  • 灰度釋出(基於Eureka元資訊裡的版本欄位分配流量)
  • 微服務粒度的QPS控制(有基於記憶體的令牌桶演算法限流和Redis + Lua限流兩種可選)
  • 微服務粒度的流量統計(暫時實現為記錄日誌到的/ tmp目錄下)
  • 優雅關閉(開啟此功能會略微損耗效能)

初步測試了一下效能,結論如下:
相同的硬體環境,Zuul充分預熱且關閉Hystrix的前提下,Go版的閘道器QPS為Zuul的2.3倍,同時記憶體佔用僅為Zuul的十分之一(600M vs 50M)。而且Go基本上第一波請求就能達到最大QPS,zuul要預熱幾次才會穩定。
如果按消耗相同資源的前提下算的話,請一定要比zuul節省多的多的多的機器。

什麼情況下可以考慮使用非Java的語言的閘道器?
  • 系統使用Spring Cloud全家桶
  • 對Zuul 1效能不滿意
  • 對雲官方已經明確不會整合Zuul 2的行為不爽
  • 認為Spring Cloud Gateway不夠成熟(相比Zuul 2.0)
  • 對閘道器的CPU /記憶體資源使用非常敏感

點選標題進入Github專案!
 

相關文章