事件驱动与定时调度

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

背景

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

事件驱动

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

定时任务

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

架构设计

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

事件驱动的优点

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

目录
相关文章
|
7天前
|
NoSQL 关系型数据库 MySQL
分布式任务调度的几种实现
【2月更文挑战第2天】本文主要介绍了分布式任务调度的几种实现,使用Redis实现分布式锁方案,使用MySQL实现任务调度,开源框架 XXL-JOB等方案,最后需要考虑到负载均衡的问题。
22 1
|
5月前
|
消息中间件 存储 负载均衡
拆解一下消息队列、任务队列、任务调度系统
拆解一下消息队列、任务队列、任务调度系统
90 0
|
8月前
|
Java 调度 Maven
分布式任务处理:XXL-JOB分布式任务调度框架(二)
分布式任务处理:XXL-JOB分布式任务调度框架
151 0
|
10月前
|
存储 机器学习/深度学习 消息中间件
[事件驱动架构 ]事件驱动2.0 事件,存储和处理统一到一个平台
[事件驱动架构 ]事件驱动2.0 事件,存储和处理统一到一个平台
|
Kubernetes Cloud Native 网络协议
Knative 事件驱动实践:通过 EventBridge 触发事件
Knative是一款基于Kubernetes的 Serverless 框架。其目标是制定云原生、跨平台的 Serverless 容器编排标准。Knative通过整合容器构建(或者函数)、工作负载管理(动态扩缩)以及事件驱动这三者来实现的这一Serverless标准。那么如何给 Knative 提供生产级别的事件驱动能力?这里我们可以通过事件总线 EventBridge 来实现.事件总线EventB
191 0
Knative 事件驱动实践:通过 EventBridge 触发事件
|
存储 Java 数据库连接
任务调度 Quartzh 框架使用指南
任务调度 Quartzh 框架使用指南
484 0
任务调度 Quartzh 框架使用指南
|
消息中间件 安全 Java
深入事件驱动模式
深入事件驱动模式
125 0
深入事件驱动模式
|
调度
第9章:工作流调度框架Oozie
第9章:工作流调度框架Oozie
173 0
|
存储 分布式计算 资源调度
任务调度|学习笔记
快速学习任务调度
139 0
任务调度|学习笔记
|
Oracle Java 关系型数据库
分布式定时任务-任务调度
分布式定时任务-任务调度