首页 存档 技术 查看内容

OTT广告系统设计与实现

2018-3-30 13:00 |来自: 互联网 334 0

摘要: 来源:彗星计划 摘要 在中国在线视频行业,相比PC端和移动端,电视屏具备一定的权威性,用户对电视屏幕上的广告持更高的信任和认同,电视屏幕具备极高的广告变现价值。因此一个高性能、高可用的OTT广告系统将对企业 ...

来源:彗星计划


摘要


在中国在线视频行业,相比PC端和移动端,电视屏具备一定的权威性,用户对电视屏幕上的广告持更高的信任和认同,电视屏幕具备极高的广告变现价值。因此一个高性能、高可用的OTT广告系统将对企业产生巨大的商业价值。本文内容为作者所在公司自主研发以及运营的“微鲸广告平台”的研究成果。


引言


当前正处在家庭互联网浪潮即将到来的时代,智能电视作为家庭互联网及客厅经济的中心,以其大屏震撼视听效果牢牢地抓住了用户的眼球。用户收看行为改变之下,一场会让整个OTT广告发生实质性颠覆的变革正在不断酝酿。从人口覆盖角度看,根据《2016年中国互联网电视行业研究报告》显示,2016年中国互联网电视保有量将突破1.3亿,57.7%的OTT用户都是三口之家,这意味着一次广告曝光将触动更多受众。用户主要集中在华东和华南,而且用户群体趋于年轻化,66%为中青年人群,这些用户教育程度高,消费能力强,基本属于社会上的中高端消费人群。

互联网电视改变了传统电视单一的线性排播,用户更愿意主动去选择观看自己喜爱的影片,互联网电视可以最大程度的满足人们自由观影的需求。同时,互联网电视提供的舒适的后仰式观影体验和较短的广告时间,使得广告投放效果最有效。《2016中国互联网电视生态链发展白皮书》显示,消费者对电视广告信赖度达到54%,是所有传播渠道首位。OTT广告通过智能电视这块家中最大的交互屏幕,以优质的视频或图文形式呈现,提升用户的感官体验的同时增强了用户对产品的记忆度,广告投放价值被放大了数倍。

但目前来看,OTT TV这个广告平台并没有被广告主真正接受,互联网电视广告市场还属于前期探索阶段。一个高性能、高可用的OTT广告系统将对探索和推动OTT广告市场产生重要影响。

“家庭围绕”战略,广告定制化

未来OTT会面向“家庭围绕”战略来展开,依托大数据分析,来满足每一个家庭的需求,让用户享受定制化的体验。如图2-1和2-2所示,OTT广告基于用户模型和内容模型,结合大数据技术架构,可针对用户进行精准广告投放,做到“广告即信息”。


图2-1 用户模型、内容模型


图2-2 广告系统大数据架构图


广告个性化投放对于广告主来说非常有吸引力,但对系统的高性能提出了更高的要求。对于传统系统,每个用户接受到的内容是一致的,对于非实时性要求的内容,可采用CDN技术来缓解后端服务压力。对OTT个性化广告系统来说,在满足内容实时性、差异性要求的同时,使系统具备高性能、高可用是一个巨大的挑战。

本文后续内容将提出具备个性化广告投放能力的OTT广告系统的设计方案,并对技术实现细节做了详细阐述。


OTT广告系统结构


广告系统架构图

广告系统架构如图3-1所示,主要由路由模块、检索模块、排序模块、DMP系统、计费系统、投放系统、长连接系统、转码系统、分发系统、监控模块、数据高速通道、终端系统等组成。下面几个小节将详细介绍重点模块的功能和使用到的关键技术。


图3-1 广告系统架构图


广告系统部署图


图3-2 广告系统部署图


大系统小做

广告系统在设计时坚持“大系统小做”的理念,将功能复杂的广告系统,化大为小,减少模块耦合,降低相关联性,用独立小系统或模块相互协作来实现整体功能。从3.1小节我们可以看出,广告系统整体架构复杂,但各个小系统或模块独立运行和部署,使得广告系统故障更易排查,维护成本更低。广告系统各个子系统采用小团队敏捷方式运作,能快速适应需求变化,开发效率更高,为复杂广告系统提供了质量保证。


关键技术说明


多域名下发

为保证广告系统稳定、高可用,系统采用了多域名下发策略进行请求分流,同时降低域名劫持和CDN故障对系统性能的影响。

如图4-1所示,电视机在开机时会向终端系统请求域名策略,终端系统识别用户后会下发域名A和域名B,电视机会依次检测域名可用性,在用户侧达到请求分流目的。采用多域名还可有效防止域名封杀、域名屏蔽等问题,提升系统可用性。


图4-1 多域名下发示意图


同时,为了防止域名劫持和CDN故障带来的服务不可用问题,每个域名又配置了多个CDN集群和服务集群,减小域名劫持和CDN故障可能带来的用户影响面。


集装箱模型:广告服务高效运营

在系统设计过程中,集装箱模式是根据业务特征进行规模化扩容或部署而建立的基础资源模型。广告系统检索端采用集装箱模型进行设计,主要用于解决故障扩散、单点失效问题和应对用户及业务增加带来的服务压力,通过水平方向上的模块分组、数据分块实现请求分流,提升系统性能。


  • 防止故障扩散、损失最小化


如图4-2所示,系统检索端路由层根据一致性HASH算法对用户进行划分,不同的用户请求被路由到不同的SET单元。当SET-B中任何一个环节出现问题导致SET故障时,只会对这部分用户产生影响,其他SET中用户可正常请求广告,有效防止故障扩散。

同时,当监控到某一个SET发生故障时,系统自动通过一致性HASH算法进行数据漂移,当该SET单元的数据全部漂移到其他SET单元后,在路由层摘除该SET,用户请求重新路由,做到损失最小化。


图4-2 SET单元失效故障转移示意图


  • 动态扩容、缩容


集装箱模型的每一个单元SET具备全部业务服务能力,当SET数量不足以支撑业务压力时,可完全克隆一个SET单元分担业务压力,同时通过一致性HASH算法进行数据漂移,实现动态扩容,过程如图4-3所示。扩容以后,整个系统的业务能力提高了50%,实现节点和业务能力的线性增长。

业务压力下降时,可通过下线部分SET单元进行动态缩容,节约运营成本。


图4-3 SET单元动态扩容示意图


  • 灰度发布和AB测试


在集装箱模式下,每个SET单元具有一定的独立性,系统具备灰度发布和AB测试的能力。当新功能需要灰度发布和进行AB测试时,可对部分SET单元进行升级,检测系统指标和用户反馈,系统功能升级更具可控性。


柔性可用:服务优雅降级

在系统压力剧增的情况下,为防止系统雪崩和保证核心服务的正常运行,系统会根据当前流量和业务形态对服务进行优雅降级。服务优雅降级主要采用了如下2种方式。


  • 服务分级管理



广告系统服务等级示意图


如图4-4所示,系统对包含的服务和操作都做了分级,当监测到系统压力超出阈值时,会逐级对服务进行降级,即抛弃部分次要功能,提供有损服务。服务等级越高,优先开始降级。服务的分级管理可使服务降级实现自动化,更加及时的保护核心服务。


  • 接口随机拒绝服务


当系统无法承受异常压力时,在防护层会随机拒绝服务,即检索端不提供广告,此时电视机不播放广告或者只播放本地广告。这样可以让一部分用户正常请求到广告数据,保证广告的基本收入。同时,对于被拒绝服务的用户来说,可以进行正常观影,不影响用户体验。


两级内存缓存

为进一步提升广告检索端性能,系统采用了两级内存缓存数据,分别为实例内存高速缓存和REDIS高速缓存,如图4-5所示。广告索引树数据存储在检索节点的实例内存中,相比其他存储方式,基于内存的检索速度可到达毫秒级别。


图4-5 两级内存缓存示意图


对于非实时、写频繁的数据,系统把这部分数据存储在内存数据库REDIS节点中,再通过持久化模块离线写入数据库。


数据异构冗余和调用异步化


  • 数据异构冗余


如图4-6所示,为降低系统耦合性和服务调用成本,系统采用数据异构的方案,把终端系统、会员系统、内容系统和特征系统等系统的数据异构到广告检索系统中,减少支撑系统故障对检索功能的影响,提升广告系统整体性能和可用性。


图4-6 数据异构冗余示意图


  • 调用异步化



图4-7 异步调用示意图


为进一步提升系统性能,在广告检索端实现调用异步化。如图4-7所示,当检索端接收到广告计数请求时,不实时更新广告索引树,而是向数据高速通道发送计数消息,快速结束计数生命周期,减短请求在检索层流转时间。当消息中间件收到广告计数消息时,通知计费系统处理。计费系统判断广告到达计费阈值时,再通过消息中间件、数据高速通道通知检索层更新广告索引树,可最大程度减少检索层的写操作锁,加快广告检索速度。


双层布尔检索:极速广告检索服务


  • 布尔检索


在OTT精准广告投放中,复杂的定向条件对检索性能提出了很高的要求。广告检索的上下文关键词和用户标签比较丰富,广告查询词会较长长,利用基于倒排索引的搜索引擎技术,从性能和检索结果看,都不能达到广告检索的要求。

有复杂定向条件的广告可以看成是一个布尔表达式,用析取范式(DNF)表示如下:


a1 = (age∈{20,30}∩geo∈{广东}∩gender∈{男}) ∪ (age∈{40,50}∩geo∈{广东}∩gender∈{男})

a2 = (age∈{25,45}∩geo∈{广东})

引入另外一个符号j(conjunction)表示析取范式中的各个交集:

j1= (age∈{20,30}∩geo∈{广东}∩gender∈{男})

j2= (age∈{40,50}∩geo∈{广东}∩gender∈{男})

j3= (age∈{25,45}∩geo∈{广东})


图4-8 布尔检索倒排索引示意图


因此,广告a1,a2可以表示为:

a1 = j1 ∪ j2

a2 = j3

建立的倒排索引如图4-8所示。


  • 双层布尔检索


布尔检索存在需要匹配很多conjunction的问题,这对性能有较大的影响。为解决该问题,可采用“先剪枝再遍历”的方法,尽量减少需要匹配的conjunction,即双层布尔检索。

引入剪枝变量size,表示某个conjunction需要同时满足多个条件,即定向条件包含几个子条件。引入size变量后,倒排索引如图4-9所示。

广告请求:30岁,广东,双层布尔检索过程如下:


1.剪枝


广告请求定向条件数为2(size=2),所以size

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部