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




















