
1) 【一句话结论】
针对百万级观众直播的低延迟(≤1秒)和99.9% SLA,需采用微服务拆分+弹性伸缩+CDN+消息队列+缓存组合架构,通过服务独立部署、动态扩缩容、边缘节点缓存、异步解耦通信,确保高并发下的低延迟和高可用。
2) 【原理/概念讲解】
老师口吻解释关键技术:
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) 【追问清单】
7) 【常见坑/雷区】