Upsync,微博開源基於Nginx容器動態流量管理方案 。
Nginx 以其超高的性能與穩定性,在業界獲得了廣泛的使用,微博的七層就大量使用了 Nginx 。結合 Nginx 的健康檢查模塊,以及動態 reload 機制,可以近乎無損的服務的升級上線與擴容。這個時候擴容的頻次比較低,大多數情況下是有計划的擴容。
Upsync,開發了模塊 nginx-upsync-module,它的功能是拉取 consul 的后端 server 的列表,並更新 Nginx 的路由信息。此模塊不依賴於任何第三方模塊。 consul 作為 Nginx 的 db,利用 consul 的 KV 服務,每個 Nginx work 進程獨立的去拉取各個 upstream 的配置,並更新各自的路由。
流程圖如下:
應用案例:
模塊已經應用在微博的各類業務中,下面圖表對比分析使用模塊前后的 QPS 與耗時變化。
從數據可以得出,reload 操作時造成 nginx 的請求處理能力下降約 10%,Nginx 本身的耗時會增長 50%+。若是頻繁的擴容縮容,reload 操作造成的開銷會更加明顯。