优酷用户触达平台技术大揭秘( 三 )


文章图片
在执行阶段 , 执行引擎根据策略编排规范 , 逐一执行各个节点 。 当然 , 前置数据预处理、调度逻辑已经在人群、事件入口已完成 。 执行引擎执行顺序如下:
接收人群分区任务、事件任务以及等待任务 。
执行上下文数据预处理 , 并进行执行引擎数据收集 。
定位首个执行节点 , 等待任务需要从上一次终端节点下一个节点开始执行 。
执行首个节点对应控制器 。
节点执行结束 , 获取后续节点列表 , 并逐一执行 。
执行引擎的职责比较明确 , 需要保证触达任务高效稳定的执行 。 主动触达场景对执行引擎的执行效率没那么大的要求 , 只是针对大人群的触达 , 因为耗时较久 , 目前主要的瓶颈还是下流服务 。 对执行引擎主要性能要求 , 于被动触达场景 , 因为面向C端 , 对RT及RT稳定性有很大的要求 。 这块将是后续执行引擎优化的重点 , 同时对任务间的资源隔离也是需要着重考虑的点 。
三物料及数据源
触达平台的物料 , 泛指渠道节点依赖的素材 。 物料基于渠道模板配置 , 且支持事件、自定义数据源的占位符渲染能力 。 模板能力相对简单 , 但在物料模块实现上需要对模板进行对应的支持 , 所以模板的实现应该较为的通用 , 便于后续模板的扩展及改动 。 物料的渲染是对预设占位符的变量能力的替换 , 从而实现不同用户触达的个性化能力 。 目前我们已支持事件占位符、数据源占位符 。
事件占位符只针对事件流程 , 可以对事件体内容进行逻辑加工处理 , 产出我们需要的占位符变量 。
数据源占位符相对通用 , 不局限于流程类型 , 对定义的数据源结果进行二次加工产出需要的占位符变量 。 这个的数据源一般是一个外部的服务 , 需要预先确认服务 , 方法 , 以及入参出参的映射 。
数据源难点及实现
物料渲染阶段 , 相对较为复杂的是数据源占位符的渲染 , 有以下难点:
数据源入参不足 事件、导入人群 , 因人群本身就携带了业务参数 , 使用相对方便 , 一般数据源入参都能映射到人群变量上;离线人群本身只携带了用户id , 所以在很多业务场景使用数据源能力会受限 , 非常受到限制; 实现方案 a) 任务配置环节 , 通过与其他平台的交互 , 引入对应的业务入参 , 业务参数在任务级别是静态的 , 通过数据源调用在实现个性化; b) 通过ODPS业务数据表导入 , 人群信息同时携带业务信息;借助ODPS的能力以及数据动态能力 , 能覆盖各类负载的触达需求 。
复杂业务配置受限 数据源能力目前仅支持在物料占位符上 , 一个数据源配置一个服务调用 , 对需要多个服务组合调用场景并不能很好的支持;目前需要通过硬编码的形式再产出一个新的服务 实现方案 a) 将数据源的能力扩展至前置节点中 , 通过串行编排 , 实现数据源链式执行的能力; b) 支持数据源之间的联动 , 通过上下文传递数据源占位符等信息 , 作为后续节点的输入 。
高并发场景 离线人群使用阿里分布式调度服务MapReduce模型 , 事件人群直接是对队列的消费 。 在流程执行中 , 对物料模块会产生极大的压力 , 数据源服务方的RT参差不齐 实现方案 a) 基于入口节点的高并发执行场景 , 数据源不适合异步化 , 异步执行在高并发场景时会使数据源任务场景大量的堆积 , 最终会产生大量的内存压力; b) 权衡整体的平台负载及触达性能 , 我们采用了数据源的同步调用 , 针对多数据源场景进行并发调用以提高整体的执行效率 。
数据能力
数据回流
优酷用户触达平台技术大揭秘
文章图片
总结及展望
目前 , 优酷统一触达平台能力基本完善 , 通过人群圈选、事件对接各类触达业务的能力;通过策略编排 , 结合实时条件边、数据定义等能力 , 能够承接复杂触达编排业务场景 。 在性能方面 , 目前平台承接了大量业务事件链路 , 执行引擎能在毫秒级别完成策略的执行 , 真正做到实时触达;同时每日执行的人群任务 , 能在小时级别内完成千万级别人群的触达 , 同时支持多任务并发执行 , 真正做到高效触达 。 在稳定方面 , 为了避免任务间相互影响 , 我们通过执行线程预分配进行隔离 , 保证各业务链路的稳定性 。 同时利用限流的匀速器模式 , 保证资源及外部数据源的平稳执行 , 减少流量尖刺等带来的异常 。


推荐阅读