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