《云計算與虛擬化技術叢書 Service Mesh實戰》—2.2Linkerd架構
2.2 Linkerd架構
Linkerd是基于Twitter公司開源的高性能RPC系統Finagle構建而成,Finagle為多種協議實現統一的客戶端和服務端API接口,主要目的就是降低開發人員解決動態服務發現、服務負載均衡、錯誤處理等的復雜性,使開發人員集中關注業務邏輯,而不用太多關注服務發現、服務負載均衡、錯誤處理等分布式系統需要解決的問題。作為Linkerd的實現基石,Linkerd幾乎繼承Finagle的設計框架和所有功能,因此通過學習Finagle的框架就能順理成章地理解Linkerd的框架。根據Finagle官方文檔(https://twitter.github.io/finagle/guide/index.html),Finagle主要由服務器端和客戶端模塊構成,兩者各司其職,具體如圖2-1所示。
圖2-1 Linkerd架構
圖2-1左邊是服務器端模塊,右邊是客戶端模塊,它們之間相互協調工作。
1.服務器端模塊
如圖2-1所示,服務器端模塊非常簡單,其設計主旨就是能快速處理高并發請求,主要包括的功能模塊:觀測性模塊、并發限制模塊、請求最后期限模塊、請求超時模塊及會話終止模塊。
Observe模塊:用于幫助開發和運維人員追蹤、監控系統運行時狀態及指標,方便進行問題排查。
并發限制模塊:控制服務器最大處理請求數量,當發送到服務器的請求數量超過預先設定的最大并發處理數量和隊列可保存的最大請求數量之和時拒絕處理任何新的請求,默認處理無限數量請求,但可根據具體需求進行調整。
請求最后期限模塊:該模塊用于在某些情況下顯式地拒絕請求,比如服務正在啟動中,或者碰巧系統正在進行垃圾回收,選擇拒絕請求而不是讓服務器處理這些無用請求而使系統陷入超負荷狀態是最佳選擇,需注意的是該功能在當前版本Linkerd中還未實現。
請求超時模塊:如果請求在指定時間內未被服務器處理,則將其標識為處理失敗。由于該模塊只是將請求標識為失敗,所以并不會拒絕任何新收到的請求。默認情況下遠端客戶端不會重試這種標記為失敗的請求,因為它不知道隊列中請求是否已經超時或者即將被處理。默認服務器端和客戶端都沒有超時限制,可根據應用需求進行調整。
會話終止模塊:服務器端通過該模塊控制會話連接的生命周期,如果會話連接超過設定的最大生命周期時間和可允許最大置于空閑狀態的時間,服務器端終止該會話連接以釋放其所占資源。
對于這些模塊,按照處理請求的先后順序依次生效,圖2-1中的可觀測性模塊首先生效,其次是并發限制模塊,依次進行。
2.客戶端模塊
相對服務器端模塊,客戶端模塊實現非常復雜,由客戶端棧、端點棧和連接棧構成,其設計主旨是最大化請求成功率及最小化延遲,流經客戶端的請求經過上述三個棧,每個棧提供特定功能以確保最大化請求成功率及最小延遲目標得以實現。
(1)客戶端棧
客戶端棧是請求第一站,其負責解析請求名字和分發請求到后端應用實例,由觀測模塊、重試模塊、超時和會話終止模塊及負載均衡器模塊構成。
Observe模塊:類似服務器端Observe模塊,主要用于幫助開發和運維人員追蹤、監控系統運行時狀態及指標,方便進行問題排查。
重試模塊:其位于負載均衡器及其他模塊上,可重試來自于下層模(如超時模塊、負載均衡、熔斷)標記為失敗的請求,只有當Finagle確認足夠安全時才重試,以此提高請求成功率。
超時模塊:分會話層和請求層超時,會話層超時表示請求在指定的時間內未分配到可用服務或者會話,而請求則會因為服務超時異常被標記為失敗。請求層超時表示請求在指定時間內允許處于未被處理狀態,一旦超過指定時間,便觸發客戶端取消請求,對大多數協議,如果請求已經分發,只有通過終止會話連接才能實現取消請求,但HTTP/2和Mux無需終止會話連接便可實現。默認會話層和請求層超時均未指定超時限制。
負載均衡模塊:其負責將應用請求動態分發到后端端點(應用實例),負載均衡算法通過有效時延反饋機制盡可能精確地將請求分發到高處理能力、低延時的應用實例,最大努力地保證高成功率。
(2)端點棧
當客戶端棧選出最優節點實例(應用實例)時,應用請求流入第二站:端點棧,其提供熔斷機制及連接池管理。端點棧仍然有觀測模塊;其次是熔斷模塊,該模塊主要功能是根據后端實例反饋信息關閉不能處理請求的會話連接,而客戶端棧的負載均衡器據此停止分發請求到該會話連接,以此盡可能減少將時間花費在明知會失敗的連接上。Finagle提供兩種類型的熔斷策略,一種基于會話層,另一種基于請求層。基于會話層的熔斷策略在連接失敗時將對應的應用實例標記為不可用狀態,拒絕接收新的請求;基于請求層的熔斷策略如果觀測到連續指定數量的請求失敗,則將后端應用實例標記不可用狀態。無論是基于會話層還是請求層,當后端應用實例被標記為不可用狀態時,負載均衡器都不會將新的請求分發到該應用實例;除此之外,端點棧還管理連接池,通過維護一定數量的連接以換取更小的服務訪問延時。
(3)連接棧
連接棧的主要工作是管理連接生命周期并實現有線協議。
關于Finagle的服務器端和客戶端模塊所提供的各種功能,在Linkerd中則通過配置路由器(router)實現,后面章節我們將詳解介紹如何配置路由器。
虛擬化 云計算 負載均衡緩存
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。