事件和异步在模式上很类似 , 事件驱动在设计上更加精细 , 例如在订单场景中:将订单的状态变化作为一个事件 , 服务间通过消息传递的方式 , 依次处理库存服务、物流服务等;由于事件携带了一定的业务信息和状态 , 流程解耦更加彻底的同时复杂度也会更高 。
四、实践总结1、结构设计在结构设计中围绕任务、节点、数据三个核心要素 , 以确保对任务的执行过程有完整的跟踪和管理 , 实现对任务的节点及相关的操作 , 具备执行重试或者直接取消撤回的控制;
状态管理是一项很复杂的工作 , 要衡量任务中各个状态标识是否合理 , 就要实时监控状态的变化 , 并且基于各种极端情况去验证流程 , 例如:重试设计、任务取消、任务暂停 。
2、高并发管理任务型的场景加上复杂的管理流程 , 执行时间自然也很长 , 如果场景中涉及到大文件的解析、或者数据调度 , 自然会引入任务分割与并发执行的机制;
比较常用的思路:根据任务调度的集群数 , 对数据核心编号进行哈希计算 , 可以采用取模和分段两种算法 , 然后基于多线程的方式并发处理各自服务内的分管任务 。
3、管理模型不管是观察者模式 , 或者发布订阅模型 , 又或者说事件驱动设计 , 都可以理解为生产/消费的关系模型 , 围绕生产、存储、消费三个节点做管理;
- 生产端:负责创建具体的消息主体 , 在总线模式中 , 通常将消息进行入库存储 , 然后再执行队列推送 , 并跟踪该过程的状态变化 , 保证库和队列的一致性;
- 消息体:描述动作的发布方和消费方 , 关键的状态信息变化 , 唯一标识和创建时间及版本 , 其余则根据场景需要定义即可;
- 消费端:在消费时要关注的核心问题就是失败重试 , 要避免重试机制引起数据不一致的问题 , 可以对消费进行加锁或者消息状态校验 , 以实现幂等的效果;
- 存储端:通常采用数据库和消息中间件双存储的模式 , 并且需要保证二者动作的同时成功或者失败 , 顺序为先入库再执行队列推送;
4、组件案例Spring框架本身就极具复杂度 , 这里单看事件模型的设计 , 包含三个核心角色:事件、发布、监听;与
事件:ApplicationEvent基础抽象类继承自JDK中EventObject类 , 具体事件要继承该类;source事件源 , timestamp发生的系统时间;
发布者:Spring定义的顶级接口ApplicationEventPublisher , 提供事件发布的能力;
监听者:实现JDK中顶级接口EventListener , Spring扩展了多种事件监听器 , 以实现各种场景的需求 , 例如:有序无序、同步异步等;
- 跑分|vivoS16Pro选用9000芯片,103万高跑分+1亿像素,配置崛起了
- 芯片|外媒:老美“加码”相关限制后,更为“棘手”的后果已经出现!
- 小米科技|小米两款“Ultra”新机齐遭曝光,分别搭载骁龙8+和天玑9000+芯片
- iqoo|iQOO 10系列搭载蓝厂自研V1 ISP芯片 有望首发天玑9000+新机版本
- 小米科技|vivoX80和小米12掰手腕,均有4nm芯片,价格都是3699元该买谁?
- 芯片|二手商品可以放心买吗?体验转转买手机后,我有话说
- 芯片|美媒:“断供”就是个错误,华为已经突破了
- Google|这才是“小钢炮”,A15芯片+5.42英寸小屏+140g,已降至4599元起
- 众多搭载国产芯片的百元手机能买吗?是便宜没好货还是高性价比?
- 红米手机|天玑8100+独显芯片+旗舰主摄,256GB跌至2199元,性价比不输红米
