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为一组处理相同业务的计算节点)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值