业务事件中心设计思想
这里看原文
本文只是提供一个简单的思考方向,实现方案只是举例说明,如果读者也需要一个类似的功能,可以根据以下思路去完善。
背景
在订单系统的业务中通常会碰到类似这样的功能
- 订单5分钟未支付自动取消订单
- 订单支付30分钟后自动接单
- 订单15天后自动确认收货
或者在逆交易中有类似这样的需求
- 优惠券相关的商品金额退款完成后退还优惠券
通常实现方案
- 延时消息,消息队列对于存储时间过长的数据可能无法支持像RocketMQ默认配置最大保存2天,大多不支持取消
- 数据库加索引扫描出合适订单,造成业务库索引过多影响性能,需要自己维护关联关系,有时候筛选条件存在多个,需要定时任务扫描业务库
基于这类需求经过分析抽象后,梳理出了一个事件中心的概念,去解决这类问题
总体思路是业务放向事件中心注册事件后,事件中心会主动发送消息或者是其他方式去通知到业务方,从而触发业务代码的执行。
总体架构
事件中心以与业务不相关的方式去实现,统一向业务方提供服务,事件中心仅仅解决如何触发的问题,减轻业务库的压力。
这并不意味着与业务耦合业务应用仍然可以以任何可以接受方式进行事件触发,如公共的事件广播,binlog。
UML
- 租户id代表一个业务方
- 三方ID表示是一个业务内的事件归属对象如一个订单,一个优惠券
- 三方类型用于用户自定义(后续进一步抽象事件中心会非常有用)
- 扩展字段,用于用户自己数据透传,触发时会带给用户
核心流程
时间时间用于处理多少时间后通知业务的场景,定时调度保证租户ID纬度单线程
增量事件用于处理数量到达一定值的时候触发业务,第一次注册创建事件,后续注册增加值,超时机制只是确保一个事件的失效不要让业务依赖它,可以同时创建一个时间事件补充,定时调度保证租户ID纬度单线程
事件管理器
按照以上的描述,业务仍然需要去自己管理事件,创建事件,取消事件。
所以我们在事件之上抽象一成事件管理器。这样业务应用只需要抽象自己的业务本身,如订单的创建可以对应一个事件管理器支付可以对应一个事件管理器。然后我们配置事件管理器的内容
我们举例一个支付事件管理器,它的主要工作如下
- 取消5分钟超时事件
- 创建30分钟后商家自动接单事件
这样我们把每个事件的三方id和对应的操作保存在事件管理器中,并且事件管理器也可以有参数,我们可以配置这些参数传给某个事件的某个字段。
总结
本质上事件中心只是在技术视角上对一类功能进行抽象,从而解决如何找到需要被处理的数据的问题,然后将它们剥离出来,以降低业务应用的复杂度。在后续事件过多后,为了避免业务代码与具体事件耦合,在事件之上再抽象了一层管理器,来帮助业务应用去维护好自己的事件。
业务事件中心设计思想相关推荐
- NBF事件中心架构设计与实现
简介:NBF是阿里巴巴供应链中台的基础技术团队打造的一个技术PaaS平台,她提供了微服务FaaS框架,低代码平台和中台基础设施等一系列的PaaS产品,旨在帮助业务伙伴快速复用和扩展中台能力,提升研发效 ...
- 一个插排引发的设计思想 (三) 委托与事件
一个插排引发的设计思想 (一) 观察者模式 一个插排引发的设计思想 (二) 抽象类与接口 一个插排引发的设计思想 (三) 委托与事件 ...待续.... 前两篇文章循序渐进的介绍了观察者模式.抽象类和 ...
- 揭秘支撑百度搜索、Feed、小程序三大业务的MVVM框架设计思想,San 核心人员倾力打造...
如果你是一名前端工程师,那么一定接触过组件化框架,比如 Angular.React.Vue-- 对于前端开发者而言,无论是初入职场的新兵还是久经沙场的老将,在面对纷繁复杂的业务需求和层出不穷的技术选型 ...
- DDD的创新思想:开发即设计思想
领域驱动设计(DDD)和微服务架构(MSA)近年来非常火热,尤其是在互联网公司的生产实践过程中.微服务架构为互联网公司自身业务的发展壮大提供了技术支撑,日渐显现出解决复杂业务需求的威力.更多的IT公司 ...
- [转载]日历设计之重复事件规则设计
转载自http://www.cnblogs.com/jcli/p/calendar_recur_rule.html 背景 什么是「日历」服务,相信大家都用过,或者看到过.就像非计算机时代,大家 也会买 ...
- 【设计思想解读开源框架】java如何发送post请求
在这里分享一份 [mybatis从入门到精通] 的强力教程,定能够助你一臂之力. Mybatis基本介绍 ORM和MyBatis 对象/关系数据库映射(ORM) 基本映射方式 流行的ORM框架简介 目 ...
- 【阿里架构设计思想】一线互联网系统的核心架构是什么样子的?淘宝系统架构演进之路
学习架构设计思想 以一个网站为例: 网站一开始就是大型的吗? 我们一开始就设计一个大型网站吗? 不一定要做到很好,但一定要先做出来. 淘宝发展过程 第一版 一个无名小网站,没有太多人访问,一台服务器就 ...
- Kafka/Metaq设计思想学习笔记 转
转载自: http://my.oschina.net/geecoodeer/blog/194829 本文没有特意区分它们之间的区别,仅仅是列出其中笔者认为好的设计思想,供后续设计参考. 目前笔者并没 ...
- 16种设计思想 - Design for failure
目录 1.防御性设计(Defensive Design) 2.边界情况(Edge Case) 3.防误措施(Mistake Proofing) 4.解耦(Decoupling) 5. 舱壁模式(Bul ...
最新文章
- OSPF中 hello报文的 内容
- python脚本下载sentinel数据_Python API sentinelsat下载错误
- 【电子书】C++编程开发30问
- JPA中实现双向一对多的关联关系
- 冻结拆分_还不会固定表头?速来围观Excel冻结窗格实战教程
- java 判断域密码到期提醒,Exchange Server 2010下,检测用户密码到期通知提醒脚本...
- 分布式数据流计算系统的数据缓存技术综述
- 大数据之-Hadoop源码编译_源码编译的意义---大数据之hadoop工作笔记0044
- 普通机器学习模型的提升
- Mysql大量插入随机数据方法--存储过程
- DPDK初始化分析(四)
- 【Unity Native Plugins】1.调用动态库so-android篇 附录完整工程
- python程序打印出10行的杨辉三角_GitHub 标星 6.5w+,Python 小白 100 天学习计划,从新手到玩转!...
- DDR3内存技术原理
- (适合小白)利用百度AI开放平台实现人脸检测,对比和搜索。
- learn-motrix and 百度网盘
- python re正则匹配_python—RE正则表达式
- node节点kubelet报错 node \“xxxxx“ not found
- vue中warning_使用vue的i18n 出现很多warning提示
- 基于多传感器的学生课堂掌握程度评估系统和方法
热门文章
- 高中理科生适合学什么专业?
- 让你酷起来nbsp;超详细iPhone主题制作教程
- 基于STM32+华为云IOT设计的智能浇花系统
- JS调用媒体设备失败 --- getUserMedia undefine 问题(各浏览器配置方法)
- 解放号占楼送大礼活动新浪微博火热进行中
- Stream之flatMap
- Nodejs Playwright 2Captcha 验证码识别实现自动登陆
- XV6 Network解析-1
- 视觉机器学习20讲-MATLAB源码示例(11)-流形学习算法
- SpringCloud: 服务链路追踪(Spring Cloud Sleuth)