规则引擎:大厂营销系统资格设计全解(下)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 规则引擎:大厂营销系统资格设计全解(下)


静态资格匹配

为了更加通用性在设计中可以设置规则匹配的入参为Map形式,在进行匹配前需要把静态资格数据转化为Map数据格式,然后在生成的KieBase中获取KieSession,通过此KieSession进行规则匹配。


KieSession需要设置全局的一个集合,来返回匹配到相关活动编码数据,同时需要考虑活动是有状态和有效期的,所以在拿到静态数据匹配的活动编码后,需要对活动的状态进行筛选,拿到的是生效且在有效期范围内的活动。


动态资格

此处动态资格主要是指活动的次数和用户次数。营销活动为了能够使更多的用户能够参与,防止某些用户的重复参与,会对用户的每日、每月、总参与次数进行限制,同时活动的经费是有限的,为了能够使营销活动效果做的更好,也会对活动的每日、每月、总次数进行限制。


动态资格设计可以分为两个维度,一个是对象,一个是周期:


image.png


通过上图设计,周期维度确认好后变更的可能性比较小,可以在前期调研阶段确认好周期范围。不过,对象变更相比较周期而言会更频繁,前期系统上线的时候确认一个自然人可能只有帐号、绑定手机两个属性,后期通过系统的不断迭代及技术的不断进步这个属性可能会进行扩容。所以,在进行架构设计的时候需要考虑具体对象的扩展性。同时,为了高并发的查询、次数的扣减或者回滚,可以通过缓存来代替数据库的记录和操作,当然为了保证数据的可恢复性,可以设计实时缓存,异步落库的操作。


动态资格组装

资格组装按照分析,采用抽象类封装内部实现,每个对象通过继承抽象类,实现具体的抽象方法的方式来实现。


image.png


抽象类AbstractDimensionDynamic中有两个抽象方法获取对象targetType和获取对象值targetValue是在具体类中进行实现。dynamicAssemble方法是进行dynamicKey的拼接并组装动态资格的具体对象,最终得到动态资格对象的集合。


AbstractDimensionDynamic的子类是具体的动态资格对象,每增加一个对象,通过增加子类的方式来实现。


动态资格服务


image.png


此处设计中DynamicService对外提供的是动态资格校验和动态资格扣减两个服务,在实际过程中还会存在回退的服务,这个需要自行进行扩展。


抽象类AbstractDynamicService中的dimensionDynamics是一个List,并且注解为@Autowired,Spring会自动从容器中取出DimesionDynamic的实现类装配到List类型的dimensionDynamics中,从而简化了依赖注入的过程,并且有新增实现类的时候系统启动会自动注入。


@Autowired
private List<DimensionDynamic> dimensionDynamics;
@Resource
private RedisService redisService;



其中的assembleDynamicRecordList方法是通过遍历dimensionDynamics,组装需要的查询或者扣减的动态数据记录;rollback方法是扣减出现异常或者扣减超过限制后进行回滚使用的操作,此方法需要抛出异常,供上游判断是否需要进行处理。


缓存使用Redis,主要是考虑在redis中的incrBy和decrBy都是原子性操作,这个在高并发的场景中防止由于并发导致的累计错误问题。而且redis的mget命令可以批量查询,主要是由于redis使用基于RESP协议的rpc接口,而redis本身的数据结构非常高效,所以IO和协议解析是个不容忽略的资源消耗。通过mget将多个get请求汇聚成一条命令,可以大大降低网络、rpc协议解析的开销,从而大幅提升缓存效率。


DynamicServiceImpl是DynamicService的具体实现,并且要继承AbstractDynamicService抽象类。需要实现dynamicChack动态资格校验和dynamicDeduction动态资格扣减方法。


动态资格校验是通过组装的动态记录数据集,到缓存中查询目前存储的值跟对应动态资格最大值进行比较,当缓存值大于等于最大值表示动态资格校验不通过。


动态资格扣减使用缓存的incrBy进行累加,这块需要针对每个累加后进行判断来减少跟缓存的交互,并且需要把已经累加的数据进行记录,提供回滚资格使用。


以上是针对营销系统的资格设计的一个设计思路和相关实践的简单案例,在具体设计中需要考虑的问题比案例中的更加复杂。比如:用户资格不满足原因的输出、异步动态资格数据入库处理、动态资格校验返回所有不满足原因等等。这些就需要进行相关的扩展和针对目前公司的基础配套设施的情况进行选择设计。


作者介绍 :

王海民,苏宁金融研发中心高级技术经理,主要负责苏宁金融会员及互联网研发中心的营销部门工作。具有营销、电商、支付、金融等相关领域 10 年以上工作经历;擅长互联网产品服务端应用技术架构。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
11天前
|
数据采集 监控 并行计算
基于MCMC的贝叶斯营销组合模型评估方法论: 系统化诊断、校准及选择的理论框架
贝叶斯营销组合建模(Bayesian Marketing Mix Modeling,MMM)作为一种先进的营销效果评估方法,其核心在于通过贝叶斯框架对营销投资的影响进行量化分析。
32 3
基于MCMC的贝叶斯营销组合模型评估方法论: 系统化诊断、校准及选择的理论框架
|
1月前
|
存储 NoSQL 算法
全链路营销|基于事件驱动的流程编排系统
本文主要介绍了 AE 策略中心的技术方案选型与落地实战。
|
6月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的会员制度管理的商品营销系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的会员制度管理的商品营销系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
3月前
|
人工智能 分布式计算 架构师
大数据及AI典型场景实践问题之基于MaxCompute构建Noxmobi全球化精准营销系统如何解决
大数据及AI典型场景实践问题之基于MaxCompute构建Noxmobi全球化精准营销系统如何解决
|
5月前
|
数据可视化 搜索推荐 物联网
室内定位新突破:基于3D可视化与iBeacon技术的商场导航营销系统
**维小帮商场导航系统利用3D GIS、iBeacon定位、VR及物联网技术,提供3D导航、AR实景指引、设施查找及位置分享功能,提升顾客体验,增强商场品牌,推动经济效益增长。通过精准路径规划和沉浸式导航,用户能轻松找店,商场则塑造了智能形象,促进了交易量。**
96 1
室内定位新突破:基于3D可视化与iBeacon技术的商场导航营销系统
|
5月前
|
敏捷开发 存储 前端开发
【美团技术】领域驱动设计DDD在B端营销系统的实践
【美团技术】领域驱动设计DDD在B端营销系统的实践
|
6月前
|
JavaScript Java 测试技术
基于ssm+vue.js的会员制度管理的商品营销系统附带文章和源代码设计说明文档ppt
基于ssm+vue.js的会员制度管理的商品营销系统附带文章和源代码设计说明文档ppt
44 1
|
6月前
|
API
5款最受欢迎的邮件营销系统有什么?
以下是5款热门邮件营销系统:Mailchimp以其易用性和多功能性领先;蜂邮EDM提供专业级邮件创建体验;Sendinblue结合了邮件与短信营销,适合中小企业;GetResponse是全面的营销平台,包含自动化功能;AokSend是老牌系统,提供丰富模板和分析工具,支持API接口。选择合适系统能提升营销效果。
|
6月前
|
API
市面上最常见的几个邮件营销系统,哪个最好用?
本文比较了5个主流邮件营销系统:蜂邮EDM、AokSend、Sendinblue、GetResponse和AWeber。蜂邮EDM和AokSend以其易用性和丰富模板深受初学者和小企业喜爱;Sendinblue以低定价和多功能吸引中小企业;GetResponse是全能营销平台,适合各类企业;AWeber则适合有经验的用户。选择最适合自己的系统能提升邮件营销效率。
|
6月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp微信小程序的会员制度管理的商品营销系统的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的会员制度管理的商品营销系统的详细设计和实现