事件和异步在模式上很类似 , 事件驱动在设计上更加精细 , 例如在订单场景中:将订单的状态变化作为一个事件 , 服务间通过消息传递的方式 , 依次处理库存服务、物流服务等;由于事件携带了一定的业务信息和状态 , 流程解耦更加彻底的同时复杂度也会更高 。
四、实践总结1、结构设计在结构设计中围绕任务、节点、数据三个核心要素 , 以确保对任务的执行过程有完整的跟踪和管理 , 实现对任务的节点及相关的操作 , 具备执行重试或者直接取消撤回的控制;
【spring|复杂任务中,流程的解耦设计】
状态管理是一项很复杂的工作 , 要衡量任务中各个状态标识是否合理 , 就要实时监控状态的变化 , 并且基于各种极端情况去验证流程 , 例如:重试设计、任务取消、任务暂停 。
2、高并发管理任务型的场景加上复杂的管理流程 , 执行时间自然也很长 , 如果场景中涉及到大文件的解析、或者数据调度 , 自然会引入任务分割与并发执行的机制;
比较常用的思路:根据任务调度的集群数 , 对数据核心编号进行哈希计算 , 可以采用取模和分段两种算法 , 然后基于多线程的方式并发处理各自服务内的分管任务 。
3、管理模型不管是观察者模式 , 或者发布订阅模型 , 又或者说事件驱动设计 , 都可以理解为生产/消费的关系模型 , 围绕生产、存储、消费三个节点做管理;
- 生产端:负责创建具体的消息主体 , 在总线模式中 , 通常将消息进行入库存储 , 然后再执行队列推送 , 并跟踪该过程的状态变化 , 保证库和队列的一致性;
- 消息体:描述动作的发布方和消费方 , 关键的状态信息变化 , 唯一标识和创建时间及版本 , 其余则根据场景需要定义即可;
- 消费端:在消费时要关注的核心问题就是失败重试 , 要避免重试机制引起数据不一致的问题 , 可以对消费进行加锁或者消息状态校验 , 以实现幂等的效果;
- 存储端:通常采用数据库和消息中间件双存储的模式 , 并且需要保证二者动作的同时成功或者失败 , 顺序为先入库再执行队列推送;
4、组件案例Spring框架本身就极具复杂度 , 这里单看事件模型的设计 , 包含三个核心角色:事件、发布、监听;与
事件:ApplicationEvent基础抽象类继承自JDK中EventObject类 , 具体事件要继承该类;source事件源 , timestamp发生的系统时间;
发布者:Spring定义的顶级接口ApplicationEventPublisher , 提供事件发布的能力;
监听者:实现JDK中顶级接口EventListener , Spring扩展了多种事件监听器 , 以实现各种场景的需求 , 例如:有序无序、同步异步等;
- 芯片|复杂任务中,流程的解耦设计
- spring|卖不动了?iPhone12突然宣布降2000,受到安卓冲击太严重
- IT之家5月5日消息|微软阐述新任务管理器的理念和新设计,采用汉堡菜单
- SpaceX表示很可能10年内进行载人火星任务,载人月球速度会更快
- spring|曾保护近4亿中国人的电脑,却因得罪阿里、腾讯,惨遭市场淘汰
- 对于Windows11上用户不满意的任务栏体验|windows11任务栏拖放功能已被移除
- spring|高性能芯片要来了?华为公布重磅堆叠芯片新专利,亮点很多
- 生命周期|南阳市商务局:电商扩容促发展|大干快上二季度 奋力实现时间过半任务过半
- Windows用户遇到某个应用占用大量CPU资源导致系统卡顿甚至无响应的时候|新版win11中微软给任务管理器引入效率模式
- 微软将会在今年下半年发布Win1122H2|微软win1122h2新增任务管理器