13.4.2 Yahoo S4

Yahoo S4最初是Yahoo为了提高搜索广告有效点击率而开发的一个流式处理系统。S4的主要设计目标是提供一种简单的编程接口来处理数据流,使得用户可以定制流式计算的操作算子。在容错设计上,S4做得比较简单:一旦S4集群中的某个节点故障,会自动切换到另外一个备用节点,但是原节点的内存状态将丢失。这种方式虽然可能丢失一部分数据,但是成本较低。考虑到服务器故障的概率很低,能够很好地满足流式计算业务需求。

S4中每个流处理节点称为一个处理节点(Processing Node,PN),其主要工作是监听事件,当事件到达时调用合适的处理元(Processing Elements,PE)处理事件。如果PE有输出,则还需调用通信层接口进行事件的分发和输出,如图13-6所示。

13.4.2 Yahoo S4 - 图1

图 13-6 S4处理节点内部模块

事件监听器(Event Listener)负责监听事件并转交给PE容器(Processing Element Container,PEC),由PEC交给合适的PE处理业务逻辑。配置文件中会配置PE原型(PE prototype),包括其功能、处理的事件类型(event type)、关心的key以及关心的key值。每个PE只负责处理自己所关心的事件,也就是说,只有当事件类型、key类型和key值都匹配时,才会交由该PE进行计算处理。PE处理完逻辑后根据其定义的输出方法可以输出事件,事件交由分发器(Dispatcher)与通信层(Communication Layer)进行交互并由输出器(Emitter)输出至下一个逻辑节点。输出器通过对事件的类型、key类型、key值计算哈希值,以路由到配置文件中指定的PN。

通信层提供集群路由(Routing)、负载均衡(Load Balancing)、故障恢复管理(Failover Management)、逻辑节点到物理节点的映射(存放在Zookeeper上)。当检测到节点故障时,会切换到备用节点,并自动更新映射关系。通信层隐藏的映射使得PN发送消息时只需要关心逻辑节点而不用关心物理节点。