货拉拉技术

货拉拉-营销活动-玩法引擎建设

Image

背景

Image
Image
Image
Image

随着货拉拉业务的不断发展,业务侧不断探索精细化活动运营策略,以拉新、促活、转化和留存等多个环节为切入点,不断丰富和完善营销活动玩法。随着营销活动玩法的不断迭代,原有的活动玩法架构已经不足以支撑活动玩法的开发迭代。原有的活动玩法代码在玩法间存在高度耦合,不利于后续需求的迭代,如活动玩法新增、玩法代码改动;改动到玩法的公共代码时,影响的活动玩法都需要回归测试,增加测试工作量;代码中还存在滥用ThreadLocal传递参数、再次查询缓存和db的情况,影响了服务性能。基于以上问题,我们设计了营销活动的“玩法引擎”,玩法引擎不仅有一套开发契约,活动玩法遵循该契约就能实现代码开发隔离、运行隔离;也有一套可以规避代码腐化的开发机制,活动玩法开发必须遵循该机制;还有一套用于业务流程编排的能力抽象设计,用于支持活动玩法的流程编排。

Image
Image

1.活动玩法介绍

Image
Image
Image
Image

2. 玩法引擎介绍

Image
Image
Image

2.1 为什么要设计玩法引擎?

2.1.1 活动玩法现状

Image
Image

2.1.2 为什么要自建引擎?

为什么要自建引擎,而不用成熟的流程引擎?

Image

玩法引擎的设计目标:

Image
Image
Image

2.2 玩法引擎设计

2.2.1 玩法引擎分层设计

玩法引擎在活动玩法上分三层,最上层是活动玩法层,中间层是能力编排层,最底层是流程节点层。

Image
Image

2.2.2 玩法能力构建

Image

能力构建演化

Image

为什么能力存储使用二级存储结构?

Image

为什么流程节点标识作为一级存储结构,玩法类型作为二级存储结构?

Image

基于以上几点考虑,最终选择了第二种方式;把流程节点前置,玩法后置,理念有点类似于倒排索引。这种设计思想,可以适用于各个业务,并支持在已有能力的基础上赋能新业务。

Image
Image

2.3 玩法引擎编排

2.3.1 引擎编排维度

Image

2.3.2 玩法能力接口

Image
Image

为什么玩法能力接口是两个方法,而不是一个方法?

Image

2.3.3 能力编排设计

Image

不同活动的页面渲染编排举例

Image
Image
Image

2.4 引擎执行流程

2.4.1 玩法配置文件

Image

2.4.2 玩法执行流程

Image
Image

3. 玩法配置举例说明

Image
Image
Image

3.1 抽奖活动玩法样例

使用到的能力

Image

抽奖活动页面渲染编排举例

Image

流程编排配置文件

{    "start":"load.model",    "load.model": {        "成功":"risk.access#lottery"    },    "risk.access#lottery":{        "准入":"activity.access",        "不准入":"page.error"    },    "activity.access":{        "准入":"activity.page#lottery",        "不准入":"page.error"    }}
Image
Image

4.2 邀请好友活动玩法样例

使用到的能力

Image

邀请好友活动页面渲染编排举例

Image

流程编排配置文件

{    "start":"load.model#inviteFriends",    "load.model#inviteFriends": {        "成功":"activty.access#inviteFriends"    },    "activty.access#inviteFriends":{        "准入":"risk.access#inviteFriends",        "不准入":"page.error"    },    "risk.access#inviteFriends":{        "准入":"activity.page#inviteFriends",        "不准入":"page.error"    }}
Image

4. 未来规划

Image
Image

1.  玩法引擎后续将提供丰富的可视化功能,如能力的可视化、玩法流程的可视化。

2.  玩法配置文件后续将支持动态创建、动态加载、动态生效功能,支持活动玩法的一键上线。

3.  玩法引擎的编排暂不支持单个能力多次调用的编排(如A->B->A,此时A会出现循环调用),后续玩法引擎扩展将支持更多的流程编排文件解析器

Image