实时营销引擎在vivo营销自动化中的实践 | 引擎篇04( 二 )

  • 业务数据的统一标识补全,将多源数据进行打通关联 。
  • 对业务数据进行各种指标计算 。常见的是基于时间窗口和会话窗口的流式计算,一般使用Flink来搭建 。
  • 目标用户匹配 。常用的用户直接交并差集计算,能够更好的对目标用户进行实验 。
  • 业务规则匹配 。基于业务逻辑对用户的数据进行匹配 。
  • 数据输出层
    负责结果数据输出分发,主要目的是数据调配和触达发送策略 。
    数据管理
    保存事件元数据的配置 。
    数据仓库
    离线数据的储存,作用于流程中各种数据处理流程 。
    三、关键组件和流程设计3.1 事件实时接入的扩展性设计由于公司内部业务技术栈不尽相同,需要支持多种业务事件数据接入方式,比如通用HTTP接口,Java技术栈的DUBBO接口、和MQ消息队列的方式,为了系统内部可以进行统一管理,最后转成MQ的方式进行统一分发 。
    3.1.1 接入队列设计由于事件数据源的不同 , 需要对宿主业务进行MQ队列流量管控隔离 。不同业务系统事件接入需求有以下不同的设计方案:
    方案一:为每个接入的事件创建一条新队列,不同事件使用不同队列 。
    实时营销引擎在vivo营销自动化中的实践 | 引擎篇04

    文章插图
    • 优点:最小粒度的流量控制,不同事件接入之间可以做到隔离,互不影响 。
    • 缺点:每次接入新事件都需要申请创建队列,随着事件接入数据增加,队列维护成本比较高 。
    方案二:同一接入方的事件使用同一队列,不同接入方使用不同队列(目前消息中心的方案)
    实时营销引擎在vivo营销自动化中的实践 | 引擎篇04

    文章插图
    • 优点:按接入方来进行流量控制,接入方之间进行隔离,同一接入方只需在首次接入使用时创建队列,后续接入新事件无需创建 。
    • 缺点: 不同接入方接入时需要创建队列,同一接入方不隔离,有相互影响的风险 。
    方案三:不同接入方、事件均使用同一队列
    • 优点:业务方使用友好 , 后续接入无需变更 , 耦合度?。奖闱谢籑Q中间件 。
    • 缺点:最大粒度的流量控制,无法做到隔离 , 风险较高,需要经常进行队列扩容 。
    方案四:事先评估每个事件的优先级(如流量),高优先级的事件单独创建一条队列,低优先级的事件共用同一队列
    • 优点:按事件的维度进行流量控制 。
    • 缺点:对接入方使用不够友好,不同业务接入时需要创建队列 。
    各方案对比如下:
    实时营销引擎在vivo营销自动化中的实践 | 引擎篇04

    文章插图
    结论:按照当前项目优先级综合评估来看,业务隔离性>可伸缩性>可维护性>接入方友好性 。
    方案二比较适合。(不同的项目可以根据自己的实际情况按优先级进行合适的选型)
    3.1.2 动态消息监听背景:当需要做好业务间风险隔离时,就必须按业务或者事件的维度进行队列拆分 。此时若进行新接入事件就可能需要重新创建新的队列 。
    初期方案:采用公司中间件vivo-rmq, 当接入方需要新增队列时 , 需要修改代码新增队列监听,重新发版,这样做的问题是重新发版成本较高,按照项目流程管理进行效率低 。
    优化方案一: 修改启动加载类加载指定目录下的配置文件,新增队列时修改配置文件上传 。
    • 优点:无需发版 。
    • 【实时营销引擎在vivo营销自动化中的实践 | 引擎篇04】缺点:仍需要重启服务器 , 同时需要维护配置文件目录等信息 。
    优化方案二:保存队列配置信息到数据表中 , 启用定时任务在服务器运行时动态监听数据库配置,新增或者下线队列配置记录后,自动进行队列变更 。
    • 优点:无需发版和重启 。
    • 缺点:定时任务实时性稍差,必须确保队列监听成功后在通知业务方接入 。
    结论:采用方案二 , 新增事件无需对系统进行重新部署,使用运行时动态方式进行消息队列接入 。

    推荐阅读