Netflix 發布云中間層服務開源項目:Ribbon
1月28日,全球最大的互聯網視頻提供商Netflix在自己的技術團隊博客上發布文章,對外公布了他們的開源項目Ribbon,其主要功能是將Netflix的中間層服務連接在一起。
文章開頭說到Ribbon項目的背景:
Netflix使用了細粒度的SOA架構,這是我們基于云的部署模式的根基。目前,我們運行著上百個細粒度服務,使用諸如Netflix API Services這樣的“邊緣服務(Edge Service)”,共同負責處理面向客戶的請求。輕量級的、基于REST的協議,是在這些服務之間進行內部通信的必然之選。
Netflix Internal Web Service Framework(簡稱NIWS)構成了該架構的基礎。我們之前發布的Eureka,起到服務發現的作用。與Eureka一起,NIWS提供執行REST調用需要的所有組件。
NIWS由REST客戶端和服務器端框架構成,基于Java的JSR-311RESTful API規范。我們的服務使用多種負載數據序列化格式,比如Avro、XML、JSON、Thrift和Google Protocol Buffers。NIWS提供序列化和反序列化機制。
</blockquote>接下來,文章重點介紹Ribbon項目:
Ribbon,簡單說,主要提供客戶側的軟件負載均衡算法。和其他構成我們NIWS內部進程通信棧的組件一起,該算法在Netflix經歷了嚴峻考驗。未來幾個月,我們會繼續開源其他的NIWS組件。請注意:上面提到的負載均衡器是內部的客戶側負載均衡器,與Eureka一起使用,Eureka主要用來平衡到中間層服務的請求。我們面向公共的邊緣服務,繼續使用Amazon的ELB服務。
</blockquote>下面的示意圖是Netflix典型的部署架構。
在Netflix,典型的部署架構都是多地區、多區域的部署。Eureka為所有Netflix服務提供服務注冊。Ribbon客戶端的創建和配置 為每個目標服務執行。Ribbon客戶端組件提供一系列完善的配置選項,比如連接超時、重試、重試算法等。Ribbon內置可插拔、可定制的負載均衡組 件。下面是用到的一些負載均衡策略:
- 簡單輪詢負載均衡
- 加權響應時間負載均衡
- 區域感知輪詢負載均衡
- 隨機負載均衡
文章重點介紹了Ribbon一個久經考驗的功能:區域感知負載均衡器(Zone Aware Load Balancer)。
區域感知負載均衡器內置電路跳閘邏輯,可被配置基于區域同源關系(Zone Affinity,也就是更傾向于選擇發出調用的服務所在的托管區域內,這樣可用降低延遲,節省成本)選擇目標服務實例。它監控每個區域中運行的實例的運 維行為,而且能夠實時快速丟棄一整個區域。在面對整個區域的故障時,這幫我們提升了彈性,我們之前的博客文章有提及。
在選擇服務器時,該負載均衡器會采取如下步驟:
- 負載均衡器會檢查、計算所有可用區域的狀態。如果某個區域中平均每個服務器的活躍請求已經達到配置的閾值,該區域將從活躍服務器列表中排除。如果多于一個區域已經到達閾值,平均每服務器擁有最多活躍請求的區域將被排除。
- 最差的區域被排除后,從剩下的區域中,將按照服務器實例數的概率抽樣法選擇一個區域。
- 從選定區域中,將會根據給定負載均衡策略規則返回一個服務器。
Ribbon中還包括以下功能:
- 易于與服務發現組件(比如Netflix的Eureka)集成
- 使用Archaius完成運行時配置
- 使用JMX暴露運維指標,使用Servo發布
- 多種可插拔的序列化選擇
- 異步和批處理操作(即將推出)
- 自動SLA框架(即將推出)
- 系統管理/指標控制臺(即將推出)
文中還提到:
Netflix,我們會使用Hystrix包裝Ribbon發起的REST調用。Hystrix提供分布式系統中的延遲和容錯。
更多關于Ribbon的詳細信息,可查看Github相關頁面。
Netflix在Github上有諸多開源項目,下面對上文中提到的一些項目做簡單介紹:
- Eureka:一個RESTful 服務,用來定位運行在AWS地區(Region)中的中間層服務。由兩個組件組成:Eureka服務器和Eureka客戶端。Eureka服務器用作服務 注冊服務器。Eureka客戶端是一個java客戶端,用來簡化與服務器的交互、作為輪詢負載均衡器,并提供服務的故障切換支持。Netflix在其生產 環境中使用的是另外的客戶端,它提供基于流量、資源利用率以及出錯狀態的加權負載均衡。InfoQ中文站此前有報道。
- Archaius:包含一系列配置管理API,提供動態類型化屬性、線程安全配置操作、輪詢框架、回調機制等等功能。
- Servo:用Java語言,提供暴露、發布應用運行指標的簡單接口,主要滿足的需求包括:使用JMX、簡單、靈活發布。
- Hystrix:供分布式系統使用,提供延遲和容錯功能,隔離遠程系統、訪問和第三方程序庫的訪問點,防止級聯失敗,保證復雜的分布系統在面臨不可避免的失敗時,仍能有其彈性。
來自:InfoQ
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!