如何打造⾼质量的SSP⼴告引擎(内部⼲货分享)
当今互联⽹有⼏种主流的商业模式:⼴告、游戏、增值服务等。毫⽆疑问“⼴告推送”带给互联⽹公司的收⼊绝对是相当可观。今天⼩主就为⼤家分享⼀篇来⾃360⼿机卫⼠团队分享的SSP⼴告引擎,这么⾼质量的内部⼲货不拿出来分享实在对不起⼤家。
PS:丰富的⼀线技术、多元化的表现形式,尽在“HULK⼀线技术杂谈”,点关注哦!
⼀、概述
当今互联⽹有⼏种主流的商业模式:⼴告、游戏、增值服务等。今天我想谈⼀谈⼴告系统中的SSP引擎。SSP(全称:Sell-Side Platform)是⼀个媒体服务平台,该平台通过⼈定向技术,智能的管理媒体⼴告位库存、优化⼴告的投放,助⽹络媒体实现其⼴告资源优化,提⾼其⼴告资源价值,达到帮助媒体提⾼收益的⽬的(以上摘⾃360百科)。⼤⽩话就是: 各种端(app端)SSP要⼴告, SSP 选出⼀批⼴告, 并告诉这些端,按照某些样式展⽰。SSP负责如何去选⼴告, 以及相应的样式是什么样⼦。SSP不断优化选择⼴告和确定样式的策略,让各个产品能赚到更多的钱。
⼀个好的SSP系统应该具备那些能⼒? 我总结了五点,列在下⾯:
1. 灵活扩展能⼒
快速接⼊各种⼴告源
快速接⼊各个产品
快速验证⼴告的不同样式
快速调整⼴告页⾯布局
快速调整⼴告策略
2. ⾼性能、⾼并发能⼒
3. ⾼效发布和在线灰度能⼒go语言能做什么
4. 快速调试定位错误能⼒
5. 强⼤的数据处理和分析能⼒
精准的⽤户画像刻画
准确的⼴告推荐
分钟级数据监控
⽀持海量数据细粒度的多维数据查询
⼆、SSP系统架构
SSP作为⼀个⼤型的业务系统, 系统结构还是⽐较复杂的,架构上可以分为以下六层:产品层、接⼝层、业务中间层、微服务层、数据处理层、数据存储层。分层系统架构图见图2-1, 详细架构图见图2-2
三、Flexible and Scaling (灵活扩展性)
在上⼀章 SSP 系统架构图中所展⽰的,系统灵活扩展能⼒主要体现在业务中间层,从⼤到⼩我们分了四个层次来为系统提供⾜够的灵活扩展性, 分别是架构层、业务层、⼴告控制层、⼴告展⽰层。 我们抽象出四个概念⽤来对应,Micro Service对应架构层, Topology Organizer对应的是业务层, Rule Manage System 对应的是⼴告控制层, Template Manage System对应的⼴告展⽰层。
3.1 Micro Service
micro service 翻译过来是微服务, 与微服务对应的是单体式架构(传统⽅式),单体式架构特点是所有功能打包在⼀起,基本没有外部依赖,优点是开发管理简单;⽽微服务架构整个系统由多个⼦服务组成,各个服务功能独⽴,服务之间通过消息传递来耦合,最⼤优点是系统耦合性低,有⾮常好的扩展性,架构⽰意图见 图3.1-1 和 图3.1-2。
从第⼆章的SSP系统架构图上可以看到, SSP是⼀个⾮常复杂的系统, 并且SSP有个特点就是各个⼦服务(各个DSP, ⽤户画像,红
包等)之间⼏乎没有什么关系, 如果想要快速的接⼊⼀个⼴告源,快速的上线⼀个产品,具有⾮常灵活的DSP上下线规则, 那么微服务
架构是我们唯⼀的选择。
3.2 Topology Organizer (based DAG Algorithm)
系统架构层我们采⽤了微服务解决了独⽴⼦服务接⼊的灵活性,那么业务逻辑的多变组合如何来⾼效解决呢? 在Topoplogy Organizer 框架中我们给出了⽐较好的⼀个解决⽅案。该框架包含DAG, topology, stage, context四个概念,我们把业务拆解成⼀个功能单元的组合体, 每个功能单元叫做stage, DAG代表了stage 的执⾏逻辑图,topology⽤来控制stage的执⾏先后顺序,context⽤来做stage之间的数据交换,这个结构只有数据耦合,具备并⾏操作的基础(这在migo架构中会详细说)。不同业务可以共⽤stage模块代码,⼤⼤减少了代码的重复开发量,提⾼了开发效率。⽰意图如下:
图中左右两个业务的DAG表⽰图,可见初始化规则库、请求解析、⽤户画像服务、过滤服务、返回⼴告等stage是可以共⽤的,
业务可以由这些stage灵活组合⽽成。
3.2.1 DAG
DAG(有向⽆环图), 如图3.2-1所⽰, 业务可以组织成DAG,这种图结构保证了功能模块的执⾏顺序, 定义好⼀个DAG也就
定义好了⼀个业务的流程。
3.2.2 topology
topology算法⽤来实现DAG的功能块执⾏顺序,保证功能块的次序不会被颠倒,如图3.2-1的左图, 通过topology会被分解成初始化规则库-> 请求解析->⽤户画像->点睛DSP(或⾃运营DSP、MAX DSP, 以上可以通过异步技术⼿段并⾏化处理)->过滤服务 ->重排服务 ->返回⼴告
3.2.3 stage
我们把每个功能模块称为stage, 负责完成某⼀特定功能。stage模块可以逐步沉淀出很多公共模块,为代码共享,加快开发提供了很好的基础。⽐如各类DSP stage 可以抽象出公共DSP stage, 公共DSP stage负责完成和下游DSP的RPC交互操作,派⽣的DSP stage 只⽤改写⾃⼰的各种参数即可。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。