事件驱动和状态机模式在YARN中的使用
来源:互联网 发布:mysql 创建联合索引 编辑:程序博客网 时间:2024/06/12 01:46
阅读了下YARN的源码,架构中设计模式除了服务生命周期管理模式外,还包括事件驱动和状态机模式。生命周期管理模式在容器设计时候比较常见,包括资源模型的加载,卸载等等,比如tomcat、jboss等开源产品。
这里重点讲一下事件驱动和状态机模式的使用。
从提交任务到任务处理完成,YARN架构中整个任务的处理过程的设计都是事件驱动和状态机器的模式。
对于事件驱动模式,对象包括事件类型EventType、事件对象Event、事件分发器Dispatcher、事件处理器EventHandler,每种事件都有对应的事件处理器注册在Dispatcher中,YARN中的事件分发器AsyncDispatcher是异步处理的事件的(事件发送到queue中,单独线程从队列中取event,根据事件类型取对应的EventHandler进行处理),EventHandler处理逻辑中也可以包括发送下一个事件。
对于状态机模式,基本做法是
根据发生的事件和当前状态,来执行下一步的动作action,并设置下一个状态,参见下图:
YARN中状态机对象StateMachine,涉及的对象包括事件操纵的对象OPERAND(状态机的宿主对象,对应到YARN中的RMAppImpl、RMAppAttemptImpl等等)、状态STATE、事件Event、事件类型EventType。
1、在宿主对象中构造状态机拓扑
StateMachineFactory<RMAppImpl,
RMAppState,
RMAppEventType,
RMAppEvent> stateMachineFactory
= new StateMachineFactory<RMAppImpl,
RMAppState,
RMAppEventType,
RMAppEvent>(RMAppState.NEW)
.addTransition(RMAppState.NEW, RMAppState.NEW,
RMAppEventType.NODE_UPDATE, new RMAppNodeUpdateTransition())
...............
.installTopology();
this.stateMachine = stateMachineFactory.make(this);
2、在宿主对象中进行状态跳转控制逻辑(宿主对象是特殊的EventHandler)
输入是当前的状态currState和发生的事件Event,经过transition处理后,跳转到下一个状态
this.stateMachine.doTransition(event.getType(), event);
3、状态转换处理逻辑,在事件逻辑处理中可以发送事件Event(事件Event由AsyncDispacher异步分发,在EventHandler中调用状态机调整控制逻辑),进行下一次的状态迁移
public interface SingleArcTransition<OPERAND, EVENT> {
/**
* Transition hook.
*
* @param operand the entity attached to the FSM, whose internal
* state may change.
* @param event causal event
*/
public void transition(OPERAND operand, EVENT event);
}
参见下图,
- 事件驱动和状态机模式在YARN中的使用
- Yarn中的几种状态机
- Yarn中的几种状态机
- YARN中MRAppMaster的事件驱动模型与状态机处理消息过程的分析
- spring事件驱动模型--观察者模式在spring中的应用
- AAAspring事件驱动模型--观察者模式在spring中的应用
- 事件与状态机 事件驱动编程
- spark在yarn上面的运行模型:yarn-cluster和yarn-client两种运行模式:
- 状态机 和 状态模式
- wpa_supplicant 状态机的切换以及事件驱动
- YARN 的服务库和事件库及其使用
- hadoop之yarn事件驱动模型
- 了解到Javascript在浏览器中的事件驱动
- yarn状态机可视化
- Zookeeper的事件驱动和订阅模式
- 事件驱动模型和观察者模式
- 状态机中使用事件优先级的探讨
- 状态机中使用事件优先级的探讨
- 110402 Stacks of Flapjacks
- 网络数据通过内核图1
- HBase-put写操作源码分析
- android系统操作数据库的方法
- 新手机应该怎么验机?
- 事件驱动和状态机模式在YARN中的使用
- rownum 学习小结
- Android服务之Service(其二)关于AIDL进程间通信
- mlellipsis.js-实现多行文字溢出隐藏显示省略号
- java动态代理(JDK和cglib)
- uva 10369 - Arctic Network(最小生成树)
- python编程练习题
- 黑马程序员_泛型_5
- WPF中,一个只能输入Double类型数字的TextBox控件的类