Reddit引入Envoy支持架構改造,性能顯著提升

Reddit引入Envoy到其後端框架,作爲服務到服務代理以支持其正在進行的架構改進。通過採用Envoy作爲服務到服務第4層/第7層代理,他們發現在可觀察性、易採用性和性能上有顯著的改進。

Reddit引入Envoy到其後端框架,作爲服務到服務代理以支持其正在進行的架構改進。隨着其架構從單體架構發展到更小的服務,支持和調試其現有框架極爲複雜,變得過於昂貴。通過採用Envoy作爲服務到服務第4層/第7層代理,他們發現在可觀察性、易採用性和性能上有顯著的改進。

根據Reddit的資深軟件工程師Courtney Wang的說法, 在過去的三年中,Reddit工程團隊的規模和產品複雜性上已經有了顯著的增加。這與其後端架構的改進並行進行,因爲他們從單一應用程序轉向,開始採用更加面向服務的架構 。這些改變已經增加了他們調試其應用程序方式的複雜性,從調查函數調用轉變成了跟蹤多個服務之間的RPC。此外,在提供新服務時,工程師需要考慮的注意事項數量也變多了,如今包括瞭解客戶請求行爲、重試處理、斷路和粒度路由控制。

自從Reddit開始把服務從其整體中分離出來,他們一直在使用Airbnb的SmartStack作爲其服務網格。當建立及拆除服務實例時,由SmartStack Nerve處理註冊問題。Nerve是一個Ruby處理進程,在每個實例上運行邊車並把它們註冊到一箇中央Zookeeper集羣中。爲了簡化程序開發人員的工作,Reddit開發了Baseplate,這是一個提供健康檢查界面和連接到Nerve抽象層的通用框架。

Reddit利用Synapse(每個實例的Ruby進程)來管理其服務端點的發現。Synapse讀取Nerve填充的Zookeeper註冊表,然後把端點條目寫入本地HAProxy配置文件。HAProxy作爲邊車進程運行,處理下流服務流量的代理和負載平衡。

image

最初的Reddit服務架構(來源:Reddit

儘管SmartStack的實現保持了相對不變和可操作性,但是,其不斷髮展的基礎架構已經開始不斷挑戰SmartStack所能提供的極限。正如Courtney Wang所指出的,這導致團隊重新評估服務網格的全景,看看替換它們是否有意義。他們希望解決的關鍵痛點是:

  • Nerve和Synapse只能接受靜態配置、服務註冊更新所需的Puppet配置更改以及跨其服務集羣的更新
  • Synapse的HAProxy配置編寫器只提供基本的路由定義
  • 由於HAProxy不理解Thrift(Reddit的主要內部協議),它們對通過HAProxy的流量的觀察能力很低

在選取一個新的服務網格的候選者時,Courtney Wang指出,他們的關鍵需求是確保對性能無影響、獲得代理中的第7層 Thrift的支持,並易於擴展及集成新工具。該團隊決定採用Envoy,因爲它符合這些要求,並且他們認爲這些權衡是可以接受的。

Envoy最大的問題是缺乏一流Thrift的支持。Courtney Wang回憶道,他們和Turbine Labs(Turbine Labs最近宣佈支持Envoy)合作,爲Thrift支持合同開發。藉助該合作關係,他們可以引入Thrift支持的代理路由、請求/響應指標和速率限制

他們部署Envoy的第一個步驟是取代HAProxy以獲得基本的TCP代理支持。Nerve和Synapse仍將處理服務註冊和發現,這意味着它們將無法利用Envoy的動態發現服務。這允許他們保持其服務發現層的穩定,同時將Envoy部署到生產環境中。通過並行運行HAProxy和Envoy,監聽不同的端口,它們能夠通過調整配置簡單地回滾。這也允許它們針對其HAProxy配置審覈Envoy配置,以驗證其Synapse配置生成器的準確性。

image
引入Envoy過程中的Reddit架構(來源:Reddit

Courtney Wang表示,Envoy現在已經順利地爲生產流量服務了近4個月了。他說,沒有停止的問題,但是,描述了Envoy的網絡連接處理與HAProxy的不同,導致在應用程序連接管理代碼中出現意外錯誤。

藉助Envoy和新的Thrift過濾器,他們發現在網絡層有更好的可觀察性,包括請求和響應指標,它們在應用程序代碼沒有更改前是無法獲得的。因爲HAProxy仍然作爲邊車運行,以便在此過渡期間快速回滾,所以,它們還未能對服務延遲進行準確測量。

隨着在代理級採用Envoy管理第4層流量的成功,Reddit計劃下一步是部署Enovy的發現服務API,該API 由集中式配置存儲支持 。進一步達成的計劃包括調查在邊緣運行的Envoy,以取代HAProxy(針對核心Reddit後端應用程序服務)和AWS ALBs(針對其部分外部入口點)作爲負載平衡器。Courtney Wang認爲,這將提供更好的可觀察性和服務路由控制,如:遮蔽入站流量和邊緣的流量轉移。最近,eBay進行了類似的遷移,利用Envoy取代外部入口點的物理負載平衡器,並報告了Courtney Wang及團隊所期望實現的一些成功。Courtney Wang希望,更進一步採用Envoy將有助於團隊把其單一的應用程序拆分成更小的服務。

閱讀英文原文:Adopting Envoy as a Service-to-Service Proxy at Reddit

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章