1. 项目总体目标
设计一个 高可用、高并发、可扩展的海外广告投放系统,主要目标包括:
-
支持全球广告投放和计费(多币种、多语言、多时区)
-
高并发广告请求响应(广告请求延迟 <50ms)
-
精准统计曝光、点击、转化数据
-
灵活支持多种广告形式(Banner、Video、Native、Interstitial)
-
数据驱动的智能竞价和优化
核心理念:
-
微服务 + 事件驱动 + CQRS + 缓存优化
-
广告请求低延迟、高吞吐
-
可扩展支持全球业务
2. 系统业务模块 & 设计模式
| 模块 | 功能点 | 设计模式 | Java 技术实现 |
|---|---|---|---|
| 广告管理 | 创建、审核、投放 | 建造者模式(广告素材构建)、策略模式(投放策略) | Spring Boot + MyBatis-Plus |
| 广告投放 | 实时竞价、广告请求分配 | 策略模式(竞价策略)、责任链模式(广告规则链) | Spring Boot + Redis + Kafka |
| 用户与受众管理 | 用户画像、兴趣标签 | 观察者模式(画像更新)、组合模式(标签树) | MongoDB + Redis |
| 数据采集 | 曝光、点击、转化 | 观察者模式(事件订阅)、适配器模式(SDK多平台适配) | Kafka + Flink |
| 报表分析 | 实时分析、历史分析 | 责任链模式(分析流程)、观察者模式(数据变动通知) | ClickHouse + Flink |
| 支付结算 | 广告主充值、扣费 | 策略模式(支付方式)、状态模式(订单状态流转) | 支付宝/Stripe SDK |
| 投放优化 | 智能竞价、A/B测试 | 策略模式(优化算法)、模板方法模式(测试流程) | AI/ML 服务 + Spring Boot |
| API 网关 | 统一入口、安全、限流 | 责任链模式(过滤器链)、代理模式 | Spring Cloud Gateway + Sentinel |
| 系统监控 | 监控请求延迟、报警 | 观察者模式(告警事件)、单例模式(监控客户端) | Prometheus + Grafana + SkyWalking |
| SDK/第三方接入 | 移动端、Web端 | 适配器模式 | Java SDK + REST API |
3. 技术栈 & 中间件选型表
| 层级 | 技术 / 中间件 | 说明 | 并发/性能能力 |
|---|---|---|---|
| 网关层 | Spring Cloud Gateway + Sentinel | 请求限流、灰度发布 | 50万 QPS(集群) |
| 应用层 | Spring Boot + Spring Cloud | 微服务开发 | 水平扩展可支持百万级广告请求/秒 |
| 缓存层 | Redis Cluster | 热数据缓存、广告位分配 | 100万 QPS(集群) |
| 消息队列 | Kafka | 实时事件流、曝光点击统计 | 100万 TPS(单集群) |
| 数据层 | MySQL 主从 + ShardingSphere | 交易数据、广告主账户 | 单库 5万 TPS(可分库分表扩展) |
| 数据分析 | ClickHouse / Flink | 实时和批量广告统计 | 支撑千万级事件/秒 |
| 搜索与推荐 | ElasticSearch | 广告索引与匹配 | 10万 QPS |
| 分布式事务 | Seata / TCC | 跨服务支付结算一致性 | 秒级补偿 |
| 文件存储 | MinIO / OSS | 素材存储(图片/视频) | 带宽依赖云存储 |
| 调度中心 | Quartz / ElasticJob | 定时任务、广告过期 | 秒级任务调度 |
| 监控 | Prometheus + Grafana + SkyWalking | 链路追踪、性能监控 | 毫秒级报警 |
4. 核心设计模式 Java 示例
4.1 策略模式(广告投放策略)
public interface AdStrategy {
void execute(AdRequest request);
}
public class CPCStrategy implements AdStrategy {
public void execute(AdRequest request) {
System.out.println("按点击付费策略执行广告投放:" + request.getAdId());
}
}
public class CPMStrategy implements AdStrategy {
public void execute(AdRequest request) {
System.out.println("按千次展示付费策略执行广告投放:" + request.getAdId());
}
}
public class AdContext {
private AdStrategy strategy;
public AdContext(AdStrategy strategy) { this.strategy = strategy; }
public void run(AdRequest request) { strategy.execute(request); }
}
4.2 观察者模式(曝光事件通知)
public interface Observer {
void update(String event);
}
public class AnalyticsService implements Observer {
public void update(String event) {
System.out.println("曝光事件统计: " + event);
}
}
public class EventBus {
private List<Observer> observers = new ArrayList<>();
public void register(Observer observer) { observers.add(observer); }
public void notifyAll(String msg) { observers.forEach(o -> o.update(msg)); }
}
4.3 责任链模式(广告规则链)
public abstract class AdFilter {
protected AdFilter next;
public void setNext(AdFilter next) { this.next = next; }
public abstract boolean filter(AdRequest request);
}
public class GeoFilter extends AdFilter {
public boolean filter(AdRequest request) {
if(request.getCountry().equals("US")) return true;
return next != null && next.filter(request);
}
}
public class DeviceFilter extends AdFilter {
public boolean filter(AdRequest request) {
if(request.getDevice().equals("Mobile")) return true;
return next != null && next.filter(request);
}
}
5. 高并发设计方案
| 技术手段 | 目的 | 并发/性能能力 |
|---|---|---|
| Redis 热缓存 | 广告位快速匹配 | 100万 QPS |
| Kafka 异步事件 | 曝光、点击统计 | 100万 TPS |
| 分库分表 | 广告主账户、投放日志 | 水平扩展百万级 TPS |
| CDN + Edge 缓存 | 素材分发 | 全球快速加载 <50ms |
| API 限流 | 防止突发请求压垮系统 | 50万 QPS |
| 灰度发布 | 广告策略和SDK更新 | 0宕机升级 |
6. 架构逻辑图(简化)
广告请求 | API网关(限流、鉴权) | ┌─────────┼──────────┐ 广告服务 用户画像服务 投放优化服务 | | | Redis MongoDB AI/ML | | | Kafka <-> Flink / ClickHouse | MySQL + OSS
7. 核心特点总结
-
业务层面:支持多币种、多语言、全球投放
-
技术层面:微服务 + 高性能中间件 + 设计模式落地
-
性能层面:支撑百万级广告请求、秒级曝光统计
-
可扩展性:新增广告形式、智能竞价策略或全球区域快速扩展
1352

被折叠的 条评论
为什么被折叠?



