S4 - 分佈式流計算平臺

最近一直在研究S4,所以就想要寫點什麼,不過發現已經有人寫了,於是我就偷個懶,直接轉貼了:)

本文轉自:http://www.cofftech.com/thread-4429-1-1.html

------------------------------------------------

s4是什麼?
1. s4的全稱 : Simple Scalable Streaming System (簡單的描述:分佈式流計算系統)
2. 特點:
  • distributed(分佈式)
  • scalable(擴展性)
  • partially fault-toleran(部分容錯性)
  • pluggable (可插拔)
3. 產生的原因:
  • Yahoo發起,主要用於解決"cost-per-click“廣告,通過實時計算預測用戶對廣告的可能的點擊行爲。
  • 不用hadoop的原因: hadoop主要解決batch處理,基於mapReduce對可控的數據的進行處理。而流計算是針對不可控的點擊事件,對實時性有嚴格要求。
4. 適用的場景:
  • 業務允許部分容錯性。 (s4沒有嚴格的failover機制,運行節點突然crash時,會導致當前節點中的數據丟失。後續的請求會failover到其他的節點上)

S4的設計:

容器概念(http://docs.s4.io/manual/overview.html)

  1. PE : Processing Elements (處理節點)
    * emit one or more events which may be consumed by other PEs,
    * publish results, possibly to an external data store or consumer.
  2. Events : message (消息)
    * arbitrary Java Objects
    * passed between PEs. (send and receive)
  3. PEC : processing element container (處理節點容器)
    * invokes the appropriate PEs in the appropriate order
  4. node : a Processing Endpoint (機器節點)
    * a jvm instance
    * contains a PEC
  5. cluster: a group nodes (節點集羣)

說明:

  • 一個cluster包含多個node
  • 每個node包含一個PE Container
  • 每個PE Container 包含多個PE
  • 每個PE消費Events,生成新的Events並傳遞給下一個PE

總體結構圖:

  1. PE Container/PE
  2. EventListenter
  3. Dispatcher, EventEmitter
  4. Communcation

PE內部概念:(4個部分組成)

  • its functionality as defined by a PE class and associated configuration,
  • the named stream that it consumes,
  • the keyed attribute in those events, and
  • the value of the keyed attribute in events which it consumers

PE類關係圖:



說明:

  • Persister : 每個PE對應一個Persister,s4中每個PE對應於一個key的value結果。每個value結構都將作爲PE的一個instance
  • FrequenceType : 每個PE會定期進行flush output輸出,可選擇的策略(定時,數量閥值)
  • Clock : 每個PE的時間控制單元,有幾種時間。(WallClock:基於系統時間處理 , EventClock:基於event事件時間控制)

重點理解一下: Keyless PE概念和PE Prototype

  • PE在底層實現了會以多實例存在。存儲的key即爲其keyed對應的value值,內部有個lookupTable概念。
  • 針對Keyless PE,其對應的存儲key即爲"*",所以每次通過lookupTable.get(value)返回的即爲同一個節點,單例化
  • 針對prototype,其對應的存儲就爲其value,所以每次會根據當前keyed attribute確定返回的PE節點,基於這點可以實現PE節點數據的Join處理

EventListener/EventEmitter:



說明: 

  • 每個PE Container是一個EventProducer,使用CommLayerListener做爲其事件處理器,處理EventWrapper反序列化。
  • 每個PE包含一個Dispatcher,Dispatcher裏包含了一個EventEmitter處理對應的EventWrapper對象的發送
  • 底層實際通訊的類: SenderProcess/ListenerProcess

Dispatcher類關係圖:



說明: 

  • Partitioner, 每個dispatcher針對發送的目標cluster,會根據對應的key進行分區處理,路由到其中的node節點。(node節點的信息可以通過zookeeper進行動態管理)

考慮集羣node節點的管理(node的新增 or 修改)

說明:

  • ProcessMonitor 監控當前運行node節點的狀態,有static/dymaic兩種維護狀態

  • TaskManager 創建node節點,主要是設置lock文件,有static/dymaic兩種維護狀態

運行(PE狀態變化)

S4缺點:

S4產品還是一個半成品,整體代碼結構組織和風格上還是比較亂的,選擇使用時需謹慎。存在的一些問題:

  1. failover (運行node節點出現crash,當前node上的PE數據將無法實施failover)

  2. persist (目前支持方式過於簡單,需要考慮網絡持久化,類似於nfs,分佈式文件系統等,配合failover機制)

  3. communication (只支持udp協議,數據傳輸可靠性上)

  4. load balancer (根據系統負載進行智能LB,目前暫時未看到相關實現。系統運行分爲兩種模式static or dymaic模式, static不存在智能調節LB處理)

  5. deploy (手工方式介入deploy,無法支持apps的zero deploy模式。系統分爲cluster/node兩概念,node對應於一計算節點實例,cluster爲一組處理相同業務的計算節點)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章