流式計算系統-Yahoo! S4
S4是一個通用的、分布式的、可擴展的、分區容錯的、可插拔的流式系統。基于S4框架,開發者可以輕松開發面向持續流數據處理的應用。
S4的設計特點有以下幾個方面。
- Actor Model
為了能在普通機型構成的集群上進行分布式處理,并且集群內部不使用共享內存,S4架構采用了Actor模式,這種模式提供了封裝和地址透明語義,因此在允許應用大規模并發的同時,也提供了簡單的編程接口。S4系統通過處理單元(Processing Elements,PEs)進行計算,消息在處理單元間以數據事件的形式傳送,PE消費事件,發出一個或多個可能被其他PE處理的事件,或者直接發布結果。每個PE的狀態對于其他PE不可見,PE之間***的交互模式就是發出事件和消費事件。框架提供了路由事件到合適的PE和創建新PE實例的功能。S4的設計模式符合封裝和地址透明的特性。
- Decentralized and Symmetric Architecture
除了遵循Actor模式,S4也參照了MapReduce模式。為了簡化部署和運維,從而達到更好地穩定性和擴展性,S4采用了對等架構,集群中的所有處理節點都是等同的,沒有中心控制。這種架構將使得集群的擴展性很好,處理節點的總數理論上無上限;同時,S4將沒有單點容錯的問題。
- Pluggable Architecture
S4系統使用Java開發,采用了極富層次的模塊化編程,每個通用功能點都盡量抽象出來作為通用模塊,而且盡可能讓各模塊實現可定制化。
- Partial Fault-Tolerance
基于Zookeeper服務的集群管理層將會自動路由事件從失效節點到其他節點。除非顯式保存到持久性存儲,否則節點故障時,節點上處理事件的狀態會丟失。
- Object Oriented
節點間通信采用“Plain Old Java Objects”(POJOs)模式,應用開發者不需要寫Schemas 或用哈希表來在節點間發送Tuples。
S4的功能組件分3大類,Clients、Adapters和PNode Cluster,圖2顯示了S4系統框架。
圖2 Yahoo! S4流式系統框架結構圖
S4提供Client Adapter,允許第三方客戶端向S4集群發送事件和接收事件。Adapter實現了基于JSON的API,支持多語言實現的客戶端驅動。
Client通過Driver組件與Adapter進行交互,Adapter也是一個Cluster,其中有多個Adapter結點,Client 可以通過多個Driver與多個Adapter進行通信,這樣可以保證單個Client在分發大數據量時Adapter不會成為瓶頸,也可以確保系統支持多個Client應用并發執行的快速、高效和可靠性。
在Adapter中,真正與Client交互的是其Stub組件,該組件實現了管理Client與Adapter之間通過TCP/IP協議進行通信的功能。GenericJsonClientStub這個類支持將事件在Client與Adapter之間以JSON的形式轉換,從而支持更多種類型的 Client應用。不同的Client可以配置不同的Stub來與Adapter進行通信,用戶可以定義自己的Stub來實現自己想要的業務邏輯,這樣也使得Client的行為更加多樣性、個性化。
【編輯推薦】