干货|互联网广告系统架构实践方案 (多图)
大家好,我是用白话文聊技术的女程序猿如意。广告,是互联网企业最常见的盈利手段之一。几乎是绝大部分互联网平台最主要的营收手段,业务的重要性不言而喻。从技术角度来说,广告业务主要涉及的技术方向有:算法、高可用架构、大数据处理等。本文依托本人在某大厂广告业务的工作经验,同时参照业界优秀案例,来聊一聊广告系统的架构实践方案。内容包括以下三部分
- 广告业务简介
- 核心技术挑战
- 系统架构详解
广告业务简介
互联网广告从技术上和产品上颠覆了传统广告实现的逻辑。它无处不在,比如你在找菩提手串,突然推荐了你特别喜欢的款式。而推荐的这个款式,就是商家投放,经过强大的算法计算、筛选而展示出来的。
一、核心业务流程:
二、常见模式:
· CPC(Cost per click or cost per click-through): — 点击一次广告对应的价格
· CPT(Cost Per Time):按时间计费的商业产品,比如直播频道的资源位指定,用于直播间促销活动、粉丝节等快速引流、吸粉;
· CPM(Cost per Mile or cost per thousand impressions): — 对应广告被显示1000次的价格
· CPS(Cost Per Sale):按成交计费的商业产品,站外引流,站外长尾流量,用于推广商品/店铺;
· CTR(Click-through rate): — 广告的点击率,即广告点击率占广告展示次数的百分比
核心技术挑战
广告计费因与钱息息相关,对系统的稳定性、数据一致性、高可用等要求非常高,系统不稳定,将直接造成资金的损失。
一、高并发
1. 缓存;从一个点击到最终扣费的链路是很长的,通过缓存的方式,减少对DB的连接调用。
2. 并发;运用多线程处理,缩短系统响应时间,提高系统吞吐量。
3. 异步化;减少不必要的依赖,将第三方依赖剥离主流程,避免影响扣费逻辑。
4. 分库分表。分库分表解决数据容量问题和冷热分离。首先垂直拆分,将计费库从广告库中单独拆分出来;然后,水平拆分,多机多schema,然后分表。
5. 降级;针对弱依赖埋好开关,在出现性能瓶颈时及时关闭;
二、高可用
熔断和限流。为避免由于网络、某个时间段请求过大或系统下游第三方出现故障时,瞬间对当前系统造成极大压力、甚至是故障的情况,需要启用限流、熔断等微服务自理策略,来保障系统的运行。限流比较主流的三种算法:漏桶、令牌桶、滑动窗口,本系统采用sentinal也是就滑动窗口来实现限流。
熔断和限流,不仅可以有效保障自身系统的正常执行,还可以在下游第三方出现故障时,避免更大面积的“雪崩”情况出现。
三、数据一致
1. 保证系统幂等性。比如点击扣费,需要保证幂等,避免重复扣费
首先,为实现幂等,必须先保障数据的唯一性,日志生产时,该条日志唯一的traceCode标记,消费时,借由redis做消费标记。
其次,做广告主点击不扣费、同一用户点去重等逻辑,来保障计费逻辑的准确性;用点击时间、用户id、bizId, UUID共同组成DB的唯一索引,保证计费的去重逻辑
2.事务性。经过一连串的数据校验、数据组装、数据计算等,实际扣费时涉及:广告账户表、点击流水表、支付流水表。尽量保证这3张表的更新操作在一个事务中,要么全部更新成功、要么全部更新失败。如果实在无法保障强一致性,也要设法保证最终一致性。
系统架构详解
一、整体架构
了解了广告业务的目标和技术挑战后,接下来详细介绍下广告系统的整体架构和技术方案。
下面针对各个子模块做下说明:
- 广告管理:供平台的广告运营使用,核心功能包括库存排期、福利卡管理、流量包管理、活动管理的等各种运营工具。
- 广告算法推广:承接C端的高并发请求,负责从海量广告库中筛选出几个或者几十个广告并在各渠道透出,实时性要求高。
- 广告竞价购买:供广告主使用,核心功能包括广告计划管理、物料投放、数据披露、广告账户充值等。
- 广告结算:负责实时扣费,和收入直接挂钩,可用性要求高。
二、CPC数据流程
CPT、CPM、CPC这几种模式在我们的业务中都有应用,其中以CPC最为核心,下面以CPC作为基础来介绍我们的广告系统,下图即为CPC的数据流程
三、CPC核心流程详解
1、click接收及处理:首先,当有用户click广告商品时,系统接收sls日志并做数据过滤,根据业务类型和打点类型,确定需要处理的Pipeline。
2、数据校验及处理:校验数据完整性、时间、有效性校验等,并做数据补全。
3、幂等处理:用户点击去重、设备上限等避免重复计费。
4、预算校验:检查广告主推广预算。
5、持久化:将click数据持久化到db中。
6、实时扣费:调用支付做实时计费扣费并更新click数据。
总结
1. 本文从整体上介绍了广告业务、业务核心技术挑战、系统架构并详细介绍了cpc数据流程。
2. 对维护系统稳定性、监控、告警等方面,本文未做涉及,后有机会和大家探讨。
创作不易,麻烦大家转发、收藏、评论支持一下呀。有想要了解的知识也欢迎私信我