目前正在考虑一个单机事件处理系统的架构设计,来完成一个基于事件驱动的系统。
为什么要单独设计一个事件处理系统?
1 ) 容错
考虑一个场景,你添加了一个物理机器,想要上报给一个master,但是因为什么原因,无法上报,但是物理机确实已经创建了,你现在怎么办。为了保持一致性,最好的方式是缓存这个事件,然后隔一段事件继续上报。这个就是单独的事件处理系统可以帮你做的事情。
2) 容易审计
所有事件都被集中处理了,特别方便进行安全以及统计处理。
3) 容易扩展
方便的事件注册/处理。新增事件特别容易。
目前有两个架构在考虑中:
1) 有event dispatcher 类
每种事件,你运行之前需要注册一种事件类型的处理函数,dispatcher类会维护一个map,对应着事件种类和其对应处理函数。
2) 没有一个event dispathcer 类
直接用继承树,在相应事件里面直接定义处理函数。
第一种来说相对实现起来复杂一点点,用起来稍微麻烦。但是有一个第二种架构无法比拟的,就是添加新事件以及处理函数时,不用重新编译整个系统,甚至可以在原系统运行的时候动态的加入,你只要运行一个实现了新事件的定义和其实现,然后注册它即可,dispatcher会在内存中map中存储这个新的事件以及其对应的处理函数。
我现在做的系统暂时没有这个如此灵活的需求,暂时就用第二种架构吧。