广告竞价为什么要拼毫秒级速度?揭秘 RTB 实时广告系统背后的数据流水线设计

简介: 广告竞价为什么要拼毫秒级速度?揭秘 RTB 实时广告系统背后的数据流水线设计

广告竞价为什么要拼毫秒级速度?揭秘 RTB 实时广告系统背后的数据流水线设计

作者:Echo_Wish
方向:大数据架构 / 实时计算 / AI系统设计

你有没有想过:

打开一个网页,短短几百毫秒后,一张广告图片已经精准出现在你面前。

你看到的是一张广告。

但在广告平台眼里,这背后可能刚刚经历了一场“百亿级别的小型战争”。

用户点击页面 → 浏览器发起广告请求 → 多家广告主参与竞价 → 系统预测点击概率 → 计算广告价值 → 完成竞价 → 返回广告素材。

整个过程通常要求:

100毫秒以内完成决策。

这就是 RTB(Real-Time Bidding,实时竞价)系统。

很多人认为广告系统就是“存数据 + 展示广告”,其实真正的大厂广告平台,本质上是一个:

实时数据流处理系统 + 机器学习预测系统 + 高性能交易系统。

今天我们聊聊,一个广告 RTB 平台背后的数据流水线应该怎么设计,以及为什么很多系统一上量就崩。


一、RTB到底是什么?一次广告展示就是一次实时交易

先简单理解一下。

比如你打开一个新闻网站:

页面有一个广告位。

网站:

“我这里有一个用户流量,现在出售。”

广告平台:

“这个用户价值多少钱?”

多个广告主:

“我要出价!”

最终:

最高价值广告获得展示机会。

整个过程类似股票交易。

区别是:

股票交易可能几秒。

广告交易:

几十毫秒。

因为用户不会等你。

所以 RTB 系统必须解决三个问题:

  1. 数据实时进入
  2. 数据实时计算
  3. 数据实时决策

二、RTB数据流水线整体架构

一个典型广告实时竞价系统,大概长这样:

用户请求
   |
   v
广告网关
   |
   v
实时竞价服务
   |
   +------------+
   |            |
   v            v
用户画像      广告库
   |            |
   +------------+
          |
          v
     竞价模型计算
          |
          v
      返回广告


同时:

点击日志
曝光日志
交易日志

        |
        v

Kafka

        |
        v

实时计算 Flink

        |
        v

用户画像更新
模型训练
数据分析

这里最核心的是:

实时数据流。


三、第一道难题:广告数据为什么不能直接写数据库?

很多初学者设计系统:

用户点击广告:

insert mysql

分析数据

看起来没问题。

但是实际广告系统:

每天可能产生:

  • 100亿曝光日志
  • 10亿点击日志
  • 千万级广告请求 QPS

如果全部写 MySQL:

数据库直接“冒烟”。

例如:

INSERT INTO ad_click_log
(
 user_id,
 ad_id,
 click_time
)
VALUES
(
 '10001',
 'A001',
 NOW()
);

一天几十亿次:

MySQL:

CPU 100%

IO等待

连接池耗尽

系统雪崩

所以广告系统第一原则:

日志不要直接进入业务数据库。

而是进入消息队列。


四、Kafka为什么成为广告系统标配?

广告系统通常第一站:

Kafka。

例如:

用户点击:

{
   
 "userId":"U10001",
 "adId":"AD9001",
 "event":"click",
 "timestamp":1720000000
}

发送:

from kafka import KafkaProducer
import json


producer = KafkaProducer(
    bootstrap_servers=[
        "localhost:9092"
    ],
    value_serializer=lambda x:
        json.dumps(x).encode()
)


event={
   
    "userId":"U10001",
    "adId":"AD9001",
    "event":"click"
}


producer.send(
    "ad_click_topic",
    event
)


producer.flush()

Kafka负责:

  • 削峰
  • 解耦
  • 缓冲

比如:

广告活动突然爆发:

平时:

10万QPS

突然:

100万QPS

Kafka:

生产速度:
100万/s


消费速度:
20万/s


剩余80万:

先进入队列

慢慢处理

不会直接击穿后端。


五、实时计算:为什么广告需要Flink?

广告系统最关心:

不是昨天的数据。

而是:

刚刚发生的数据。

例如:

一个用户:

过去5分钟:

搜索:

“新能源汽车”

浏览:

“特斯拉”

点击:

“电动车报价”

那么下一秒广告:

应该推荐:

新能源相关广告。

这个过程需要实时计算。

Flink代码示例:

DataStream<Event> stream =
env
.fromSource(
 kafkaSource,
 WatermarkStrategy.noWatermarks(),
 "click"
);


stream
.keyBy(
 Event::getUserId
)
.window(
 SlidingEventTimeWindows
 .of(
   Time.minutes(5),
   Time.minutes(1)
 )
)
.aggregate(
 new UserInterestAggregator()
)
.print();

含义:

按照用户ID分组。

统计最近5分钟行为。

实时更新用户兴趣。

例如:

用户画像:

之前:

{
   
"user":"U1001",
"interest":[
 "手机"
]
}

实时变化:

{
   
"user":"U1001",
"interest":[
 "手机",
 "新能源汽车",
 "智能家居"
]
}

六、RTB真正难点:毫秒级竞价计算

广告竞价不是简单:

谁价格高谁赢。

现在广告系统一般计算:

广告价值 =
出价
×
点击概率
×
转化概率
×
用户价值

例如:

广告A:

出价:

2元

点击概率:

5%

转化概率:

10%

价值:

2 × 0.05 × 0.1

=0.01

广告B:

出价:

1元

点击概率:

20%

转化概率:

30%

价值:

0.06

虽然B出价低。

但是系统选择B。

这就是:

智能广告。


七、机器学习模型如何进入RTB?

广告平台通常会训练:

CTR模型:

Click Through Rate

预测点击率。

例如:

输入:

用户年龄
地域
兴趣
历史行为
广告类型
时间
设备

输出:

点击概率

简单模型:

from sklearn.linear_model import LogisticRegression


model=LogisticRegression()


X=[
 [25,1,3],
 [40,0,2],
 [30,1,5]
]


y=[
1,
0,
1
]


model.fit(
 X,
 y
)


prob=model.predict_proba(
[
 [28,1,4]
]
)


print(prob)

输出:

点击概率:

0.73

广告系统根据:

预测概率 × 出价

决定排序。


八、性能优化:为什么广告系统喜欢内存计算?

RTB最大的敌人:

慢。

如果每次查询:

MySQL:

用户画像
广告信息
模型参数

查询:

10ms
20ms
30ms

加起来:

几十毫秒没了。

所以:

大量数据放:

Redis。

例如:

用户画像:

key:

user:10001


value:

{
age:30,
interest:[
AI,
汽车
]
}

查询:

import redis


r=redis.Redis(
host="localhost",
port=6379
)


profile=r.get(
"user:10001"
)


print(profile)

Redis:

微秒级响应。


九、数据冷热分离,是广告系统的生存技巧

广告数据非常特殊。

比如:

最近一分钟点击:

非常重要。

三年前点击:

基本没人看。

所以:

冷热分离。

热数据

存:

Redis

Flink State

特点:

高速访问。


温数据

存:

HBase

ClickHouse

例如:

最近30天广告效果。


冷数据

存:

HDFS

对象存储

用于:

模型训练。

架构:

实时数据

 Kafka

   |

 Flink

   |

 Redis
   |
实时决策


历史数据

 HDFS

   |

 Spark

   |

模型训练

十、真正的大规模RTB系统,优化重点在哪里?

我认为有三个关键。

第一:不要让数据库承担实时计算

数据库负责:

存储。

计算交给:

Flink/Spark。


第二:减少网络调用

RTB一次请求:

可能调用:

用户画像

广告库

模型服务

风控服务

如果:

10个服务 × 5ms

直接超时。

所以:

需要:

  • 服务合并
  • 本地缓存
  • 模型预加载

第三:数据链路必须可观测

广告系统最怕:

“不知道哪里慢。”

所以需要:

监控:

Kafka lag

Flink checkpoint

接口耗时

模型响应时间

QPS

错误率

例如:

Prometheus:

- job_name:
    rtb-service

  metrics_path:
    /metrics

Grafana展示:

RTB响应时间

P99:

85ms


Kafka延迟:

2000


模型耗时:

15ms

十一、写在最后:RTB其实就是大数据时代的“高速交易系统”

很多人学习大数据,只关注:

Hadoop

Spark

Hive

但真正工业级应用:

不是离线分析。

而是:

实时决策。

广告RTB只是其中一个代表。

类似架构还应用于:

  • 推荐系统
  • 风控系统
  • 智能客服
  • 自动驾驶
  • 金融交易

它们都有共同特点:

数据不断产生。

系统不断计算。

决策必须实时。

未来的大数据竞争,不是谁存的数据多。

而是谁:

能够最快把数据变成行动。

这也是为什么:

实时计算、流式架构、AI模型服务,会成为未来数据工程师必须掌握的核心能力。

—— Echo_Wish

数据不会自动产生价值,真正产生价值的是:让数据在正确的时间,做出正确的决策。

目录
相关文章
|
2月前
|
存储 算法 数据安全/隐私保护
为什么RAR有RAR3、RAR5,唯独没有RAR4?一文彻底搞懂RAR加密原理与密码恢复
本文揭秘RAR格式命名之谜:所谓“消失”的RAR4实为RAR3(Format 2.9)的历史别称;梳理RAR2→RAR3→RAR5演进脉络,详解AES-128到AES-256、SHA-1到PBKDF2的加密升级,并解析密码恢复工具为何只标“RAR3/RAR5”——关键在加密结构,不在版本号。(239字)
515 6
|
2月前
|
人工智能 缓存 负载均衡
一文说明白 AI API中转站是什么?
AI API中转站是连接国内开发者与海外大模型(如OpenAI、Claude)的代理平台,破解网络、支付、注册三重壁垒。支持微信/支付宝充值、统一OpenAI格式调用、智能路由与自建号池,以“倍率”计费(官方价×倍率)。适合中小团队降本提效,但需警惕低价掺水、数据安全与服务稳定性。
|
2月前
|
Cloud Native Linux 测试技术
挥别20年“幽灵”:Linux 7.2 移除 UDP-Lite 释放 10%
在 Linux 内核的演进史中,Linus Torvalds 曾定下过一条铁律:“永不破坏用户空间”。然而,在 Linux 7.2 的开发周期中,内核团队罕见地打破了这一原则,正式将沉睡了 20 年的 UDP-Lite 协议从网络栈中彻底移除。这一看似“破坏兼容性”的果断举措,不仅清理了约 2500 行陈年代码,更直接让常规 UDP 的包转发性能飙升了 10%。
|
2月前
|
人工智能 安全 芯片
OpenClaw免费安装教程,TopClaw零基础本地部署+1000万token领取
本文介绍TopClaw——一款专为小白设计的OpenClaw开源大模型“傻瓜式”本地部署工具。无需编程基础,Windows/Mac一键安装,中文界面友好,自带1000万免费token,全程离线运行,兼顾高效与隐私安全。
313 2
|
2月前
|
人工智能 自然语言处理 数据安全/隐私保护
阿里云百炼Token Plan订阅计划支持哪些AI模型?千问 / DeepSeek / 万相全模型清单共11款
阿里云百炼Token Plan订阅计划聚合11款主流AI模型,涵盖通义千问、DeepSeek、智谱GLM及万相、HappyHorse等多模态模型,支持文本、图像、音视频生成。提供Lite个人版(39元/月)与企业标准席位(150元起),享qwen3.8-preview 1折、夜间qwen3.7系列2折等限时优惠。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
709 1
|
2月前
|
Ubuntu Linux 虚拟化
【VM】VMware下载、安装和创建虚拟机一篇搞定(附官网安装包)
虚拟机(VM)是在现有系统中运行另一操作系统的技术,如Windows里开Linux窗口。VMware Workstation Pro免费易用,性能稳定、兼容性好,支持快照、克隆等高级功能,是学习、开发与测试的理想选择。(239字)
|
2月前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
4543 147
|
6月前
|
人工智能 Linux API
一行命令打造多龙虾Agent军团!阿里云/本地部署OpenClaw+多Agent+百炼api配置实战指南
2026年,AI代理框架OpenClaw凭借ACP协议与多Agent架构彻底颠覆AI协作模式,从早期单兵作战的草莽工具,进化为支持多智能体隔离、通道独立绑定、专业分工协同的正规军平台。中文社区亲切称其为**龙虾**,如今通过一行`openclaw agents add`命令,即可快速创建专属AI助手军团,实现写作、开发、作图、选题等任务的专业化分工,彻底告别上下文混乱、记忆污染、权限交叉等痛点。本文从多Agent核心逻辑讲起,提供完整命令、可直接复制的配置文件,同时覆盖2026年阿里云云端部署、MacOS/Linux/Windows11本地部署,以及阿里云百炼Coding Plan免费API配
1280 1
|
2月前
|
SQL 人工智能 缓存
阿里云 EMR Serverless StarRocks(Stella 2.2.0)发布:多模态处理与分析闭环,内表与湖表统一检索
Stella 2.2 面向 AI 时代的数据基础设施,打通“多模态数据处理—向量化与理解—多路检索—分析消费”的完整闭环。无论数据沉淀在 Paimon 湖表,还是 StarRocks 存算分离内表,都可以在统一 SQL 入口下组合结构化分析、全文检索、向量检索与 AI Function,服务智能驾驶、具身智能、内容与商品理解、企业知识库和 RAG 等场景。
484 2
|
2月前
|
人工智能 自然语言处理 BI
阿里云QoderWork完全指南:从入门到精通,打造全能AI工作搭档
QoderWork是阿里云Qoder团队打造的桌面端AI智能体工具,定位为可自主执行多步骤任务的“AI实习生”,能在本地环境完成文件管理、数据处理、文档生成、办公自动化等全场景工作,无需复杂命令,用自然语言即可驱动。它以本地沙盒运行、细粒度权限控制、可扩展Skill系统、多模型自由切换为核心优势,完美适配个人办公、团队协作与企业级任务需求,是替代传统AI助手、提升工作效率的全能搭档。本文从核心定位、安装配置、核心功能、模型接入、Skill开发、实战技巧、常见问题等维度,提供从入门到精通的完整指南,帮助用户快速掌握并最大化发挥QoderWork的价值。
1169 5