广告投放系统
引用文件
本文引用的文件
- README.md
- launcher-info.md
- launcher-advert.md
- launcher-channel.md
- launcher-advert-controller.java
- launcher-advert-service-impl.java
- launcher-advert-service-nobpm-impl.java
- launcher-advert-do.java
- launcher-advert-service-interface.java
- launcher-config-api-impl.java
- foreign-launcher-controller.java
- launcher-ad-play-detail-controller.java
- launcher-ad-play-count-controller.java
- launcher-ad-play-count-vo.java
- launcher-ad-play-count-service-impl.java
- launcher-ad-play-detail-service-impl.java
- launcher-ad-play-consumer.java
- launcher-ad-play-type-enum.java
- launcher-advert-job.java
- launcher-advert-mapper.java
- launcher-base-info-mapper.java
- launcher-index-mapper.java
- launcher-advert-mysql-schema.sql
- launcher-advert-tdengine-schema.sql
- file-part-upload-service-impl.java
- db-file-client.java
- file-service-impl.java
- three-party-ad-callback-doc.md
目录
简介
本系统为面向机顶盒(Launcher)的广告投放平台,围绕“三级配置架构”实现从基础信息、广告位到资源与策略的完整投放闭环。系统支持图片、视频、网页、应用等多种素材形式,具备规则引擎驱动的智能定向、频控与互斥策略、播放数据的实时采集与统计分析,并提供完善的管理后台 API 与设备端接口。
项目结构
- 模块划分
- Launcher 广告模块:负责广告位、广告内容与策略的配置与下发
- 设备模块:设备画像、渠道、地区等基础数据支撑
- 基础设施模块:文件上传、存储、分片上传、缓存等
- 规则引擎模块:设备画像匹配与业务规则计算
- 数据库与时序数据库:MySQL(配置与元数据)、TDengine(播放明细与时序统计)
图表来源
章节来源
核心组件
- 广告位与广告关联控制器与服务
- 控制器:提供广告位与广告关联的创建、更新、删除、查询、启用/停用、导出等接口
- 服务:实现 BPM 审批流程与无 BPM 直通模式,支持资源文件与 APP 文件校验、互斥启用、版本号更新与缓存清理
- 设备端广告获取接口
- 提供设备启动时获取广告配置的能力,包含 MAC 格式化、设备信息缓存、广告位策略匹配与频控检查
- 播放数据采集与统计
- 实时消费 Kafka 播放事件,落库 TDengine 明细表;定时 Job 聚合生成设备播放次数统计
- 文件与存储
- 支持分片上传、文件存储与删除;DBFileClient 将文件内容落库并生成 URL
章节来源
- launcher-advert-controller.java
- launcher-advert-service-impl.java
- launcher-advert-service-nobpm-impl.java
- foreign-launcher-controller.java
- launcher-ad-play-consumer.java
- file-part-upload-service-impl.java
- db-file-client.java
架构总览
系统采用“三级配置 + 规则引擎 + 频控互斥 + 实时统计”的架构,实现从素材管理到定向策略再到效果统计的全链路闭环。
图表来源
详细组件分析
广告素材管理机制
- 多格式素材支持
- 图片、视频、网页、应用等素材通过文件服务统一管理,素材信息(URL、大小、包名、版本等)自动回填到广告位关联记录
- 存储与分片上传
- 支持分片初始化、上传与合并;DBFileClient 将二进制内容落库并生成 URL
- 版本管理与互斥
- 通过 BPM 审批与“已生效/修改标记/移除标记”状态机管理变更;同一广告位下仅允许一个资 源处于启用状态,系统自动互斥其余资源
- 配置校验
- 创建/更新时校验资源文件与 APP 文件是否存在,避免无效素材上线
图表来源
- launcher-advert-controller.java
- launcher-advert-service-impl.java
- launcher-advert-service-nobpm-impl.java
- launcher-advert-do.java
章节来源
- launcher-advert-controller.java
- launcher-advert-service-impl.java
- launcher-advert-service-nobpm-impl.java
- launcher-advert-do.java
- file-part-upload-service-impl.java
- db-file-client.java
投放策略配置
- 两级配置模式
- 规则引擎模式:基于设备画像(CPU、内存、地区、渠道等)的复杂规则匹配,优先级最高
- 传统限制模式:基于渠道、MAC、地区的简单集合过滤
- 生效逻辑
- 若未配置任何限制,默认对所有设备生效;同一广告位下 多策略命中时按优先级或更新时间取其一(单资源互斥)
- 频控检查
- 若广告设置了“限制推送设备数据”,系统查询 Redis 计数器,超限则不返回该广告
图表来源
章节来源
目标受众定向算法
- 规则引擎匹配步骤
- 输入:设备 MAC/CPU、业务类型
- 信息补全:根据 MAC 查询设备画像(渠道、地区、硬件配置等)
- 初筛候选规则:MAC专属、业务类型、渠道、无设备限制四类集合交并运算
- 规则计算:加载规则详情,先判断地区限制,再注入上下文执行 EL 表达式
- 数量限制:根据匹配规则获取业务 ID 集合,查询剩余数量限制,不足则剔除
- 输出:返回业务 ID 集合
图表来源
章节来源
广告投放效果统计
- 实时数据采集
- 设备端上报播放事件写入 Kafka;消费者实时落库 TDengine 明细表
- 统计聚合
- 定时 Job 按日/月/年维度聚合生成设备播放次数统计,支持按包名、版本、广告位索引、时间标签等维度查询
- 指标体系
- 播放次数、播放时长、按分类(默认/三方)区分的统计
图表来源
- launcher-ad-play-consumer.java
- launcher-advert-job.java
- launcher-ad-play-count-service-impl.java
- launcher-advert-tdengine-schema.sql
章节来源
- launcher-ad-play-detail-controller.java
- launcher-ad-play-count-controller.java
- launcher-ad-play-count-vo.java
- launcher-ad-play-type-enum.java
- launcher-advert-tdengine-schema.sql
广告API接口文档
- 管理后台接口
- 创建广告位与广告关联:POST /launcher/index-advert/create
- 更新广告位与广告关联:PUT /launcher/index-advert/update
- 删除广告位与广告关联:DELETE /launcher/index-advert/delete
- 获取广告位与广告关联:GET /launcher/index-advert/get
- 分页查询:GET /launcher/index-advert/page
- 导出Excel:GET /launcher/index-advert/export-excel
- 启用/停用:PUT /launcher/index-advert/enable, PUT /launcher/index-advert/disable
- 取消变更:PUT /launcher/index-advert/cancel
- 设备端接口
- 获取广告配置:POST /launcher/getLauncher/ads(无需登录)
- 三方广告播放上报
- 接口地址:http://third.ad.akrdinfo.cn:30133/app-api/launcher/ad/play/callback/v2
- 请求参数:mac、cpu、createTime、indexPlayInfos(包含播放时长、包名、版本号、开始时间、广告位索引)
章节来源
实际业务场景配置示例
- 场景一:规则引擎模式
- 在三级配置的“规则配置”标签页中,引用规则中心的复杂规则(如“CPU>4核 且 内存>2GB 且 地区=巴西”),实现精准定向
- 场景二:传统限制模式
- 在“渠道配置管理”标签页中,仅在指定渠道生效;或在“MAC关联/地区关联”中限定特定设备或区域
- 场景三:资源互斥
- 在同一广告位下配置多个资源备选,仅启用一个;启用新资源时系统自动互斥其余资源
章节来源
依赖关系分析
- 组件耦合
- 控制器依赖服务接口;服务实现依赖 Mapper、文件 API、Redis、Kafka、TDengine
- 文件服务与存储客户端解耦,支持多种存储后端
- 外部依赖
- 规则引擎:基于 Redis 的规则集合与缓存
- Kafka:播放事件的异步处理
- TDengine:高吞吐时序数据存储
- MySQL:配置与元数据持久化
图表来源
- launcher-advert-controller.java
- launcher-advert-service-impl.java
- file-part-upload-service-impl.java
章节来源
- launcher-advert-service-interface.java
- launcher-advert-mapper.java
- launcher-base-info-mapper.java
- launcher-index-mapper.java
性能考量
- 缓存与版本控制
- 广告配置变更后更新版本号并清理缓存,确保设备端尽快拉取最新配置
- 高并发与异步处理
- 播放事件通过 Kafka 异步落库,避免阻塞设备端上报
- 存储优化
- TDengine 时序表适合高频写入与按时间标签聚合查询
- 文件上传
- 分片上传降低大文件传输失败风险,DBFileClient 适配小文件存储场景
故障排查指南
- 广告未生效
- 检查审批状态与“已生效/修改标记/移除标记”状态;确认缓存是否清理
- 设备端无法获取广告
- 核对包名/版本号是否正确;检查 Redis 设备信息缓存;确认频控计数器是否超限
- 播放数据缺失
- 检查 Kafka 消费者是否正常;确认 TDengine 明细表写入;核对定时 Job 聚合逻辑
- 文件上传失败
- 检查分片上传初始化与合并流程;确认文件存储客户端配置与权限
章节来源
- launcher-advert-service-impl.java
- launcher-advert-service-nobpm-impl.java
- launcher-ad-play-consumer.java
- file-part-upload-service-impl.java
结论
本系统通过清晰的三级配置、灵活的规则引擎定向、严格的资源互斥与频控策略,以及完善的播放数据采集与统计,实现了从素材管理到效果评估的全链路广告投放能力。结合分片上传、异步消息与时序数据库,系统在高并发与大数据量场景下具备良好的稳定性与 可扩展性。
附录
- 数据库与时序库建表脚本
- MySQL:广告关联表等配置表结构
- TDengine:播放明细与设备播放次数统计的稳定表与标签设计
章节来源