专栏名称: 聊聊架构
聊聊架构
目录
相关文章推荐
架构师之路  ·  爸爸!除了你,沈括,沈万三... ... ·  2 天前  
字节跳动技术团队  ·  ByteBrain团队EuroSys25 ... ·  昨天  
InfoQ Pro  ·  Redis 之父:哪怕被喷我也得说,AI ... ·  昨天  
51好读  ›  专栏  ›  聊聊架构

爱奇艺广告平台的架构设计与演进之路

聊聊架构  · 公众号  · 架构  · 2018-05-01 11:52

正文

请到「今天看啥」查看全文


接入层 包括 QLB(iQiYi Load Balance)、Nginx 前端机,主要做流量的反向代理和整体的限流与降级功能。

流量分发层 :包括策略服务和流量平台服务;策略服务支持公司层面的策略控制和日常的运营需求;流量平台服务主要控制流量在各投放平台上的分配和请求逻辑,投放平台包括品牌广告投放平台,效果广告投放平台和外部 DSP。

投放服务 :前文介绍的业务逻辑都包含在这里,由单一的模块来实现。

日志收集 :接收曝光点击等日志,主要完成计费、频控和去重等业务逻辑,也是由单一的模块来实现。

计费系统 :利用 Redis 主从同步机制把订单的实时消耗数据同步到投放服务。

频次系统 :使用 Couchbase 机群来做用户数据存储。

数据同步层 :这一层涉及的数据种类很多,其中相对较重要的有两种:业务数据和日志数据,业务数据主要包括广告的定向、排期和预算等内容。

我们利用业务数据做了两方面的优化工作:

  1. 通过业务数据分发一些对时效性要求不高的数据给到投放服务,避免了一些网络 IO;

  2. 在业务数据中进行空间换时间的优化,包括生成索引及一些投放服务所需要的数据的预计算,譬如提前计算计费系统中的 key 值。

随着业务增长,架构也遇到了一些挑战。

  1. 流量增长:系统上线之后很好地满足了广告主对转化效果的要求,这个正向的效果激发了广告主对流量的需求,为此产品和运营团队不断地开辟新的广告位,同时爱奇艺的用户数和流量也在持续增长,这些原因共同为效果广告平台带来了巨大的流量。

  2. 广告主数量和订单数量增长:这个增长包括两方面,一方面与流量增长相辅相成,相互促进;爱奇艺的优质流量和良好的转化效果吸引了更多的广告主;另一方面,由于商务政策上的原因,广告主和订单量在季度末会有阶段性的增长。

  3. 性能问题:流量和订单量的增长使得系统的负载快速增加,因为订单是全量召回的,当订单量增长到一定数量之后,会使得长尾请求增多,影响整体服务性能,无法通过水平扩容解决。

  4. 超投问题:由于曝光和点击的延迟,以及投放计费环路的延迟,不可避免的存在超投问题,这也是广告系统的固有问题;品牌广告是先签订合同,投放量达到即可按照合同收款,超出部分不会对广告主收费,品牌广告预定量都很大,超投比率较小;和品牌广告不同,效果广告实时扣费,如果沿用品牌思路的话,超投部分会造成多余的扣费,而中小广告主对此非常敏感,也会增加技术团队问题分析排查工作,同时因为效果广告的预算少,预算调整变化很快,使得超投比率要比品牌广告大;针对效果广告的超投问题,技术团队要做的事情分成两个层面,一是保证超投的部分不会计费,不给广告主带来损失,二是从根本上减少超投,即减少我们自己的收入损失;分别称为 超投不计费 减少超投

针对上面的几个情况,我们的架构做了调整,如下图:

对比上线伊始的架构,此阶段架构调整体现在以下几个方面:

  1. 投放服务性能优化 – 包括索引分片和增加粗排序模块,主要解决了上述流量增长、广告主数量订单增长等方面带来的性能问题

  2. 索引分片是把原来的一份索引拆分成多份,对应的一个请求会被拆分成多个子请求并行处理,这样每个请求的处理时间会减少,从而有效减少长尾请求数量。

  3. 粗排序:全量召回的好处是收益最大化,缺点是性能会随着订单量增加而线性下降;粗排序在召回阶段过滤掉没有竞争力的低价值的(ECPM 较低的)广告,低价值广告被投放的概率和产生转化的概率很低,因此粗排序的过滤对整体收入影响很小,同时能有效减少进入后续核心计算逻辑(包括精排序及其他的业务逻辑)的订单数量,使得服务压力不随订单量而线性增长。

  4. 计费服务架构优化 - 主要是提升系统的可扩展性和解决超投问题

可扩展性通过服务拆分来解决,把单一模块的计费服务拆分成三个模块,拆分之后日志收集模块对外提供服务,主要职责是接收日志请求并立即返回,保证极低的响应时间;然后对计费日志和非计费日志进行不同的处理;检测过滤模块主要职责是进行定向检查和异常日志识别。计费服务把有效计费数据更新到计费系统。拆分成三个模块之后,每个模块都很简单, 符合微服务基本原则之一:单一职责







请到「今天看啥」查看全文