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

设计一个支持百万级用户同时在线的在线教育直播课系统,请从架构设计、技术选型、高并发处理、容灾方案等方面进行阐述。

好未来后端 - Golang难度:困难

答案

1) 【一句话结论】
采用微服务架构,以WebRTC+信令服务器为核心实时通信,结合RTMP服务器+CDN加速音视频流,消息队列解耦音视频处理,多机房容灾,确保百万级用户同时在线的直播课系统低延迟、高可用。

2) 【原理/概念讲解】
讲解直播课系统的核心组件及原理:

  • 信令服务器:负责用户连接建立、媒体能力交换的中间服务器(类比电话交换机,用户A拨号后交换对方信息,再直接通话,用于建立WebRTC连接)。
  • WebRTC:端到端音视频/数据传输协议(浏览器原生支持,低延迟,直接传输音视频流,但需信令服务器辅助建立连接)。
  • RTMP服务器(如Nginx-RTMP/Wowza):音视频流从服务器到客户端的传输,结合CDN加速(将音视频流缓存到CDN节点,用户就近访问,减少服务器带宽压力)。
  • 消息队列(如Kafka):解耦音视频流生产者(录制/转码)与消费者(播放端),支持高吞吐异步处理(类比快递,生产端打包后放入队列,消费者取货,减少实时依赖)。
  • 负载均衡(如Nginx):分发请求至多实例,确保请求均匀分布(类比交通枢纽,分流车辆,提升系统吞吐)。
  • 缓存(如Redis):缓存用户状态、课程信息(热点数据,减少数据库压力,类比超市货架,提前备货减少排队)。
  • 数据库分库分表:MySQL按课程ID分库(按业务分库,避免跨库事务)、按时间分表(如按月分表),MongoDB存储日志(非结构化数据,按内容分片,提升读写性能)。

3) 【对比与适用场景】

组件定义特性使用场景注意点
信令服务器负责用户连接建立、媒体能力交换的中间服务器处理大量短连接,支持会话管理WebRTC连接建立需高并发处理,单点故障影响连接
WebRTC端到端音视频/数据传输协议低延迟,端到端加密直播课音视频传输需信令服务器辅助建立连接
RTMP服务器音视频流传输服务器(如Nginx-RTMP)支持RTMP协议,处理音视频流转发音视频流从服务器到客户端传输需结合CDN加速,避免服务器带宽瓶颈
CDN内容分发网络将内容缓存到边缘节点,用户就近访问音视频流分发,提升访问速度需与RTMP服务器配合,缓存音视频流
消息队列(Kafka)分布式消息系统,解耦生产者与消费者高吞吐、持久化、异步音视频流处理(录制、转码、分发)延迟通常在毫秒级,需优化以减少对实时性的影响
负载均衡(Nginx)分发请求至多实例的服务器均匀分布请求,提升系统吞吐整个系统请求分发需配置会话保持(如cookie),避免状态不一致

4) 【示例】
信令服务器转发SDP的流程(用户A向用户B发起连接):
用户A连接信令服务器,发送SDP:

{
  "type": "offer",
  "from": "userA",
  "to": "userB",
  "sdp": "v=0\r\no=- 123456 7890 IN IP4 192.168.1.1\r\ns=WebRTC Call\r\nc=IN IP4 192.168.1.1\r\nm=audio 10000 RTP/AVP 0\r\nm=video 10001 RTP/AVP 94\r\na=media-candidate:... (ICE候选地址)"
}

信令服务器将SDP转发给用户B,用户B返回SDP(answer),信令服务器再转发给用户A,用户A和用户B根据SDP建立WebRTC连接,直接传输音视频流。同时,RTMP服务器接收音视频流(如录制后转码为H.264),通过CDN分发到用户端。

5) 【面试口播版答案】
(约90秒)
“面试官您好,针对百万级用户同时在线的在线教育直播课系统,我的设计思路是采用微服务架构,以实时通信技术为核心。首先,系统核心是WebRTC技术,用于端到端音视频传输,但需要信令服务器辅助建立连接(比如用户A和用户B通过信令服务器交换媒体流信息后,直接建立WebRTC连接)。技术选型上,信令服务器用Go语言实现,部署多实例,通过Nginx负载均衡。音视频流处理用Kafka消息队列,解耦生产者和消费者,支持高吞吐。前端用WebSocket连接信令服务器,实时交换信令。缓存层用Redis缓存用户状态、课程信息,减少数据库压力。数据库方面,MySQL按课程ID分库、按时间分表,MongoDB存储日志。高并发处理上,负载均衡Nginx分发请求,Redis缓存热点数据,消息队列处理音视频流。容灾方案采用多机房部署,主备切换,RTO控制在秒级。另外,音视频流传输采用RTMP服务器结合CDN加速,将音视频流缓存到CDN节点,用户就近访问,减少服务器带宽压力。总结来说,通过微服务拆分、实时通信技术、消息队列、缓存和数据库分片,以及多机房容灾和CDN加速,确保系统支持百万级用户同时在线,保证低延迟和高可用。”

6) 【追问清单】

  • 问题1:信令服务器的负载如何处理?
    回答要点:通过Nginx负载均衡,多实例部署,并使用Redis缓存用户状态(如用户ID、连接信息),减少信令服务器的直接压力,同时配置连接池限制每个实例的并发连接数(如每个实例限制5000并发连接),避免资源耗尽。
  • 问题2:音视频流如何保证低延迟?
    回答要点:WebRTC端到端传输,结合CDN加速(将音视频流缓存到CDN节点,用户就近访问),以及消息队列的异步处理(生产端录制后放入队列,消费者快速取流,减少中间环节),通常延迟控制在200-500ms内,满足教育直播的实时性需求。
  • 问题3:数据库分片后,事务如何处理?
    回答要点:采用分库分表策略,按课程ID分库(每个课程独立数据库,避免跨库事务),按时间分表(如按月分表),避免跨库事务,若必须跨库,使用分布式事务方案(如两阶段提交,但需权衡性能,通常适用于关键业务,如用户支付与课程记录的同步)。
  • 问题4:如何处理缓存击穿?
    回答要点:设置热点数据预热(如课程列表、热门课程信息提前放入缓存),或使用互斥锁(当缓存失效时,只有一个请求去数据库加载并更新缓存,其他请求等待锁,避免大量请求同时访问数据库)。
  • 问题5:容灾方案中,如何实现主备切换?
    回答要点:通过健康检查(如数据库查询、服务心跳),主库故障时,备库自动切换,RTO控制在秒级(如通过数据库的读写分离配置,备库实时同步数据,故障时立即接管),RPO控制在分钟级(备库可能存在少量数据延迟,但影响业务连续性)。

7) 【常见坑/雷区】

  • 忽略流媒体传输组件:若只考虑WebRTC,未提及RTMP服务器和CDN,会导致音视频流传输效率低,服务器带宽压力大,需明确RTMP服务器用于音视频流转发,CDN用于加速。
  • 信令服务器单点故障:只部署单实例,高并发下连接建立失败,需多实例+负载均衡,并配置连接池限制,避免资源耗尽。
  • 数据库分片导致事务问题:跨库事务处理不当,导致数据不一致,需合理设计分库分表策略,按业务分库,避免跨库操作。
  • 缓存击穿处理不当:热点数据未预热,导致大量请求访问数据库,需设置缓存过期时间(如设置较长的过期时间,或使用互斥锁)。
  • 负载均衡的会话保持问题:用户会话数据未正确传递,导致状态不一致,需配置Nginx的cookie会话保持(通过设置cookie,确保用户请求始终路由到同一实例)。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1