51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计一个支持百万级QPS的实时竞价系统,请描述核心模块设计、数据一致性处理、容错机制。

360Web服务端开发工程师-投放方向难度:中等

答案

1) 【一句话结论】实时竞价系统需以分布式架构为基础,通过请求分发、实时计算引擎、缓存+数据库分层存储、消息队列解耦,结合最终一致性策略,实现百万级QPS,核心是“快速路径”与“数据一致性折中”的平衡。

2) 【原理/概念讲解】老师口吻:实时竞价系统的核心是“快速响应”,用户请求(如广告展示请求)需在毫秒级内完成匹配、出价、返回。首先,分布式系统是基础,因为百万级QPS远超单节点承载能力,需水平扩展。流程上,请求先到请求分发层(如Nginx+Consul负载均衡),分发到多个实时计算引擎节点,计算引擎从Redis缓存快速获取广告主信息(避免数据库压力),快速匹配并计算出价,结果返回用户。存储层采用Redis(缓存实时数据)+MySQL(持久化关键数据),消息队列(如Kafka)用于异步处理日志、统计等非实时任务。关于数据一致性,由于QPS极高,采用最终一致性(缓存数据异步同步到数据库),保证数据最终一致但不实时。容错机制包括:请求分发层负载均衡(故障节点自动剔除),Redis集群高可用(主从+哨兵),消息队列持久化+消费重试(确保任务不丢失)。

3) 【对比与适用场景】

方案定义特性使用场景注意点
Redis内存数据库高速读写、支持数据结构、分布式实时数据缓存、会话存储数据持久化需额外配置,单点故障风险
MySQL关系型数据库ACID事务、持久化、事务支持关键业务数据持久化写性能受限于磁盘,需分库分表
Kafka分布式消息队列高吞吐、持久化、分区实时数据流、日志收集启动延迟、消息积压风险
RabbitMQ企业级消息队列延迟低、可靠性异步任务、工作流单点故障影响

4) 【示例】

  • 请求示例(JSON):
    {
      "request_id": "req_12345",
      "user_id": "u_001",
      "ad_slot": "slot_1",
      "timestamp": 1672531200
    }
    
  • 实时计算引擎伪代码:
    def real_time_bid(request):
        # 从Redis获取广告主信息(缓存)
        advertisers = redis.get("advertisers")
        if not advertisers:
            advertisers = db.query("select * from advertisers")
            redis.set("advertisers", advertisers, ttl=60)
        # 匹配广告主并计算出价
        best_bid = 0
        for ad in advertisers:
            bid = calculate_bid(ad, request)
            if bid > best_bid:
                best_bid = bid
        # 返回结果
        return {"request_id": request["request_id"], "winner": "ad_001", "bid": best_bid}
    

5) 【面试口播版答案】
面试官您好,我来回答实时竞价系统百万级QPS的设计问题。核心结论是:系统需基于分布式架构,通过请求分发、实时计算引擎、缓存+数据库分层存储、消息队列解耦,结合最终一致性策略,实现百万级QPS,核心是“快速路径”与“数据一致性折中”的平衡。首先,实时竞价流程是用户请求(如广告展示请求)快速到达分发层,通过负载均衡分发到计算节点,计算引擎从Redis缓存获取广告主信息(避免数据库压力),快速匹配并计算出价,结果返回给用户。存储层采用Redis(缓存实时数据)+MySQL(持久化关键数据),消息队列(如Kafka)用于异步处理日志、统计等非实时任务。数据一致性方面,由于QPS极高,采用最终一致性:缓存数据异步同步到数据库,保证数据最终一致但不实时。容错机制包括:请求分发层负载均衡(如Nginx+Consul),计算节点故障时自动切换;Redis集群高可用(主从+哨兵);消息队列持久化+消费重试,确保任务不丢失。这样系统既能支撑百万级QPS,又能保证高可用和容错。

6) 【追问清单】

  • 问题:如何保证缓存与数据库的数据一致性?
    回答要点:采用最终一致性,缓存数据异步同步(如Redis的发布订阅或数据库触发器),保证数据最终一致。
  • 问题:实时计算引擎如何水平扩展?
    回答要点:通过微服务架构,多个计算节点负载均衡,每个节点独立处理请求,扩展时增加节点即可。
  • 问题:容错机制中,请求分发层如何处理节点故障?
    回答要点:负载均衡器(如Consul)监控节点状态,故障节点自动剔除,请求重新分发到健康节点。
  • 问题:数据库如何应对百万级写入?
    回答要点:分库分表(如按广告主ID分表),读写分离,索引优化,避免全表扫描。
  • 问题:如何监控系统的QPS和延迟?
    回答要点:使用Prometheus+Grafana监控,设置告警阈值,实时跟踪关键指标。

7) 【常见坑/雷区】

  • 忽略网络延迟:分布式系统中网络延迟是主要瓶颈,需优化请求路径(如本地缓存、CDN)。
  • 数据一致性过度追求强一致:强一致会导致性能下降,需根据业务场景选择最终一致性。
  • 模块拆分不合理:如实时计算与存储耦合,导致扩展困难,应解耦为独立服务。
  • 容错机制不完善:如无消费重试机制,导致消息丢失;无监控告警,故障无法及时发现。
  • 缓存未设置过期时间:导致缓存数据过期后,系统依赖数据库,影响性能。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1