事件驱动与定时调度-阿里云开发者社区

开发者社区> 云计算> 正文
登录阅读全文

事件驱动与定时调度

简介: 背景 事件驱动和定时调度任务,都是为了完成某类具有特定触发条件的业务逻辑。但是也存在较多的不同点。 事件驱动 事件驱动是一种设计思想,把不同业务逻辑用“事件”关联起来,用“事件”来驱动业务或者流程往下走。

背景

事件驱动和定时调度任务,都是为了完成某类具有特定触发条件的业务逻辑。但是也存在较多的不同点。

事件驱动

事件驱动是一种设计思想,把不同业务逻辑用“事件”关联起来,用“事件”来驱动业务或者流程往下走。非常典型的业务,就是工人流水线。第一个工人接受订单,分发到第二个工人,第二个工人选取零配件传递给第三个工人,第三个工人进行组装,组装完毕后传递给第四个工人,第四个人工人包装后,送上车。整条链路就完成了。
这里比较明显的特点是,每个工人理论上来说,无法预估上个工人什么时候完成,只能坐等;另外,每个节点存在一定的性能瓶颈,在某个环节由于处理的速度过慢,会导致较多的积压。

定时任务

定时任务,从名称就可以看到,就是定时指定业务逻辑的任务。明显的特点,就是具有定时性,即到了特定的时间点执行具体的业务。这类非常多,比如常见的闹钟、定时消息推送、淘宝定时确认收货、支付宝定时确认打款给卖家等等。
一般来说,定时任务就是异步的独立调度任务,存在一定的延迟性,当然不同的业务,对延时的要求是不同的。
比如,闹钟延迟个1000毫秒无伤大雅;订单过期延迟个1分钟也没有关系。有的业务则对延迟有严格要求,比如定时秒杀。

架构设计

对于事件驱动来说,只要业务扔出事件,由事件来驱动业务进行则可。那么重要的一点,就是事件源非常重要,即事件驱动必须要保证事件源的稳定性和准确性。同时在大部分情况下,无法保证每个事件可以被及时处理以及保证处理成功。因此在设计时,要保证事件具备重放能力。一般来说,事件可能是从其他非自身的事件源发出,无法要求其他业务方能够重放,因此,系统自身需要对事件做持久化来具备重放能力。
此时,系统自身对事件的重放,则需要使用到定时任务的功能。
当然,如果初始事件源具备重放的能力,则系统自身可以不用设计持久化,只要保证幂等即可。这种纯事件驱动设计就变得非常轻量、优雅。

事件驱动的优点

事件驱动作为一种上手比较困难的设计模型来说,存在较多的优点。最主要的,是资源节约和准实时性。事件驱动替代了轮询式的特点,轮询时必须要保证程序采用高频循环来推动业务继续流转下去。而事件驱动则直接利用监听的方式,来推动业务的流转。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: