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

快手直播在双11等大促期间,单场直播峰值可达百万级观众,如何设计系统架构来保证低延迟(目标≤1秒)和稳定性(SLA≥99.9%)?请从服务器部署、网络传输、数据同步等角度分析。

快手运营类难度:困难

答案

1) 【一句话结论】
针对百万级观众直播的低延迟(≤1秒)和99.9% SLA,需采用微服务拆分+弹性伸缩+CDN+消息队列+缓存组合架构,通过服务独立部署、动态扩缩容、边缘节点缓存、异步解耦通信,确保高并发下的低延迟和高可用。

2) 【原理/概念讲解】
老师口吻解释关键技术:

  • 微服务拆分:将直播系统拆分为流媒体服务(处理视频流推拉)、互动服务(处理弹幕、点赞)、数据服务(用户数据、直播数据),每个服务独立部署,便于按需扩展。
  • 弹性伸缩:借助K8s的Horizontal Pod Autoscaler(HPA),根据CPU利用率(如超过70%)动态调整Pod数量,流量高峰时快速扩容(如从3个副本扩到50个),避免资源不足。
  • 网络传输优化:CDN边缘节点缓存直播流,用户请求由离用户最近的边缘节点响应,减少公网传输延迟(控制在200ms内);采用HTTP/3协议,降低连接建立时间(相比HTTP/2减少50%以上)。
  • 数据同步解耦:互动消息通过Kafka(消息队列)解耦流媒体与互动服务,保证高吞吐(百万级QPS)和低延迟;分布式缓存(如Redis)缓存热点数据(如主播信息、弹幕模板),减少数据库压力。
  • 数据一致性:采用最终一致性(如弹幕消息异步处理,数据库最终同步),避免强一致性导致延迟过高。

3) 【对比与适用场景】
以微服务 vs 传统单体为例:

方面传统单体架构微服务架构
定义所有功能部署在一个应用中,统一部署按业务功能拆分为多个独立服务,独立部署
特性部署复杂,扩展困难每个服务独立,可独立扩展
使用场景小规模应用,功能较少大规模系统,业务复杂,需要快速迭代
注意点耦合度高,故障影响大服务间通信复杂,需管理服务注册发现

4) 【示例】

  • 服务器弹性伸缩(K8s HPA):

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: live-streaming-service
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: live-streaming
      template:
        metadata:
          labels:
            app: live-streaming
        spec:
          containers:
          - name: live-streaming
            image: kuaishou/live-streaming:latest
            ports:
            - containerPort: 8080
    ---
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: live-streaming-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: live-streaming-service
      minReplicas: 3
      maxReplicas: 50
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 70
    
  • 消息队列解耦(Kafka示例):
    流媒体服务将视频流推送到Kafka,互动服务消费消息处理弹幕:

    // 流媒体服务发送消息到Kafka
    POST /kafka/send
    Content-Type: application/json
    {
      "topic": "live-stream",
      "partition": 0,
      "key": "stream-123",
      "value": {
        "streamId": "123",
        "videoData": "base64编码的视频流",
        "timestamp": "2023-11-11T12:00:00Z"
      }
    }
    
    // 互动服务消费Kafka消息
    CONSUME /kafka/live-stream
    {
      "streamId": "123",
      "videoData": "base64编码的视频流",
      "timestamp": "2023-11-11T12:00:00Z"
    }
    

5) 【面试口播版答案】
面试官您好,针对百万级观众直播的低延迟(≤1秒)和99.9% SLA,核心思路是通过微服务拆分+弹性伸缩+CDN+消息队列+缓存的组合方案。首先,服务器部署上,将直播系统拆分为流媒体、互动、数据等微服务,每个服务独立部署,并通过K8s的HPA根据CPU利用率动态扩容,比如流量高峰时从3个副本扩到50个,保证处理能力。网络传输方面,采用CDN边缘节点缓存直播流,用户请求由离用户最近的边缘节点响应,延迟控制在200ms内;同时使用HTTP/3协议,减少连接建立时间。数据同步上,互动消息通过Kafka解耦流媒体和互动服务,保证高吞吐和低延迟,缓存热点数据(如主播信息、弹幕模板)在Redis中,减少数据库压力。这样,整体延迟能控制在1秒以内,SLA达到99.9%。

6) 【追问清单】

  • 问题1:如何保证服务间的数据一致性?
    回答要点:采用最终一致性,如弹幕消息通过消息队列异步处理,数据库最终同步;关键数据(如订单)通过分布式事务(如两阶段提交或Saga模式)保证强一致性。
  • 问题2:弹性伸缩的触发条件是什么?
    回答要点:根据CPU利用率(如超过70%)或QPS(如超过10万/秒)动态调整Pod数量,避免资源浪费或不足。
  • 问题3:网络抖动时如何容灾?
    回答要点:CDN节点自动切换到备用节点,或使用多路径传输(如QUIC协议的多路径);同时部署网络监控,实时检测抖动并快速切换。
  • 问题4:缓存雪崩的应对措施?
    回答要点:设置缓存过期时间(如5分钟),并采用热点数据预热;当缓存雪崩时,通过限流(如令牌桶算法)控制请求速率,避免数据库过载。
  • 问题5:故障时的熔断降级策略?
    回答要点:服务间调用采用熔断器(如Hystrix),当调用失败率超过阈值时,熔断后续请求,降级到静态页面或历史直播回放,避免级联故障。

7) 【常见坑/雷区】

  • 忽略网络路径优化,仅关注服务器处理能力,导致延迟过高;
  • 微服务拆分不合理,导致服务间通信复杂,影响系统性能;
  • 忽视数据一致性,强一致性要求导致延迟超过1秒;
  • 弹性伸缩阈值设置不合理,资源浪费或扩容不及时;
  • 缓存未设置过期策略,导致数据不一致或雪崩。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1