事件驱动与定时调度

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

背景

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

事件驱动

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

定时任务

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

架构设计

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

事件驱动的优点

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

目录
相关文章
|
6月前
|
消息中间件 存储 负载均衡
拆解一下消息队列、任务队列、任务调度系统
拆解一下消息队列、任务队列、任务调度系统
129 0
|
2月前
|
NoSQL 关系型数据库 MySQL
分布式任务调度的几种实现
【2月更文挑战第2天】本文主要介绍了分布式任务调度的几种实现,使用Redis实现分布式锁方案,使用MySQL实现任务调度,开源框架 XXL-JOB等方案,最后需要考虑到负载均衡的问题。
55 1
|
11月前
|
存储 机器学习/深度学习 消息中间件
[事件驱动架构 ]事件驱动2.0 事件,存储和处理统一到一个平台
[事件驱动架构 ]事件驱动2.0 事件,存储和处理统一到一个平台
|
Kubernetes Cloud Native 网络协议
Knative 事件驱动实践:通过 EventBridge 触发事件
Knative是一款基于Kubernetes的 Serverless 框架。其目标是制定云原生、跨平台的 Serverless 容器编排标准。Knative通过整合容器构建(或者函数)、工作负载管理(动态扩缩)以及事件驱动这三者来实现的这一Serverless标准。那么如何给 Knative 提供生产级别的事件驱动能力?这里我们可以通过事件总线 EventBridge 来实现.事件总线EventB
203 0
Knative 事件驱动实践:通过 EventBridge 触发事件
|
存储 Java 数据库连接
任务调度 Quartzh 框架使用指南
任务调度 Quartzh 框架使用指南
562 0
任务调度 Quartzh 框架使用指南
|
消息中间件 安全 Java
深入事件驱动模式
深入事件驱动模式
137 0
深入事件驱动模式
|
Oracle Java 关系型数据库
分布式定时任务-任务调度
分布式定时任务-任务调度
|
存储 消息中间件 监控
详解异步任务 | 看 Serverless Task 如何解决任务调度&可观测性中的问题
本篇我们将会进一步走进函数计算异步任务,介绍异步任务的调度方案以及系统在可观测性方面所支持的各项功能。
|
消息中间件 设计模式 SQL
多机分布式执行异步任务的实现姿势
执行异步任务时,比如需要处理10W个订单,如果是PHP,我们一般会配置一个定时任务,然后该定时任务就会在单机上执行;如果是GO或者JAVA,我们也需要使用相应的策略,保证该任务只在单机上执行,比如分布式锁。可能有同学会问,我直接在多机上执行同一个任务不行么,我只想说,你胆子真大,当多机同时处理一条数据,你会死的很惨的。
185 0
|
Java 调度 开发者
定时调度|学习笔记
快速学习 定时调度
102 0
定时调度|学习笔记