干货|互联网广告系统架构实践方案 (多图)


大家好,我是用白话文聊技术的女程序猿如意。广告,是互联网企业最常见的盈利手段之一。几乎是绝大部分互联网平台最主要的营收手段,业务的重要性不言而喻。从技术角度来说,广告业务主要涉及的技术方向有:算法、高可用架构、大数据处理等。本文依托本人在某大厂广告业务的工作经验,同时参照业界优秀案例,来聊一聊广告系统的架构实践方案。内容包括以下三部分

  • 广告业务简介
  • 核心技术挑战
  • 系统架构详解

广告业务简介

互联网广告从技术上和产品上颠覆了传统广告实现的逻辑。它无处不在,比如你在找菩提手串,突然推荐了你特别喜欢的款式。而推荐的这个款式,就是商家投放,经过强大的算法计算、筛选而展示出来的。

一、核心业务流程:

二、常见模式:

· 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. 对维护系统稳定性、监控、告警等方面,本文未做涉及,后有机会和大家探讨。

创作不易,麻烦大家转发、收藏、评论支持一下呀。有想要了解的知识也欢迎私信我

相关文章

现在Java桌面应用程序能做到什么程度(SpringBoot+JavaFX2开发)

内容目录Spring Boot - JavaFX 2.0应用技术背景 - Java 8的新特性之JavaFX2.0Spring Boot+JavaFX2 Demo介绍示例代码 Spring Boot...

哪个是用于开发 Java 应用程序的最佳操作系统?

经常引起很多争论的一个主题是,哪个是用于开发 Java 应用程序的最佳操作系统。这篇文章就这个问题给出了一种看法。经常引起很多争论的一个主题是,哪个是用于开发 Java 应用程序的最佳操作系统。这篇文...

java开发工具MyEclipse使用教程:JSF 演示登录应用程序

MyEclipse官方最新版免费下载试用,历史版本下载,在线文档和帮助文件下载-慧都网本教程介绍了一个使用MyEclipse的 JSF 演示登录应用程序。JSF 和/或 MyEclipse 的先前知识...

深入解析Java工厂模式及其应用场景

Java工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳实践,这种模式提供了一种抽象工厂,通过使用工厂方法来创建对象。工厂方法将对象的创建推迟到子类中,这样就...

java高级用法之:绑定CPU的线程Thread-Affinity

简介在现代计算机系统中,可以有多个CPU,每个CPU又可以有多核。为了充分利用现代CPU的功能,JAVA中引入了多线程,不同的线程可以同时在不同CPU或者不同CPU核中运行。但是对于JAVA程序猿来说...

干货:开发一个Web应用程序(PWA)需要做的一些准备工作

自苹果推出了iPhone应用商店以来,App成为了我们生活中不可或缺的一部分,而对于实体业务也是如此,现在各行业都在推出自己的App,但有没有人想过这样一种场景,如果自己的潜在客户还没有安装你的App...