
设计千万级请求/秒的信息流广告投放系统,核心是通过分布式请求路由(负载均衡+智能调度)、多级缓存(CDN+分布式缓存+本地缓存)、预加载策略(提前拉取广告素材)、以及容错机制(熔断、降级、重试),结合微服务架构和异步处理,确保系统高可用、低延迟、高吞吐。
以请求路由策略为例:
| 策略类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 轮询 | 按顺序循环分发请求 | 简单,负载均衡效果一般 | 小规模、负载较均匀的服务 | 可能导致节点负载不均 |
| 加权轮询 | 根据节点处理能力分配权重 | 负载均衡更合理 | 大规模、节点能力差异大的服务 | 需要实时监控节点负载 |
| 一致性哈希 | 基于哈希环分发请求 | 节点增删时请求重分布少 | 需要高可用、低切换开销的场景 | 哈希环维护复杂 |
请求路由示例(加权轮询):
# 伪代码:请求路由器
def route_request(request, node_list):
# node_list: [(node_id, load, capacity), ...]
total_capacity = sum(node[2] for node in node_list) # 总处理能力
weight = request.ad_type.weight # 广告类型权重(如视频广告权重更高)
selected_node = None
max_utilization = 0
for node in node_list:
utilization = node[1] / node[2] # 负载率
if utilization < 0.8 and (selected_node is None or utilization < max_utilization):
selected_node = node
max_utilization = utilization
return selected_node[0] # 返回节点ID
“面试官您好,设计千万级请求/秒的信息流广告投放系统,核心是通过分布式请求路由、多级缓存、预加载、容错四大技术,结合微服务架构。首先,请求路由采用加权轮询+动态负载均衡,根据节点处理能力和广告类型权重分配请求,比如视频广告请求优先分配给计算能力强的节点;其次,缓存分三级:CDN缓存静态素材,Redis缓存广告策略结果,服务端缓存热点数据,降低后端计算压力;然后,预加载策略提前拉取下一个广告的素材(如视频预转码、图片预加载),避免用户点击时延迟;最后,容错机制包括熔断(超时率过高时直接失败)、降级(简化功能)、重试(非关键请求),确保系统高可用。具体来说,比如用户请求广告时,路由器根据节点负载和广告权重选择节点,缓存命中则直接返回,否则调用后端计算,同时预加载下一个广告素材,若后端服务超时则熔断,避免级联故障。”