mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-10-05 09:16:54 +08:00
3.5 KiB
3.5 KiB
Monibuca 集群架构设计
本文档描述了 Monibuca 的集群架构设计,包括推流负载均衡和拉流负载均衡的实现方案。
整体架构
graph TB
subgraph 负载均衡层
LB[负载均衡器/API网关]
end
subgraph 集群节点
N1[节点1]
N2[节点2]
N3[节点3]
end
subgraph 服务发现
Redis[(Redis/etcd)]
end
Client1[推流客户端] --> LB
Client2[拉流客户端] --> LB
LB --> N1
LB --> N2
LB --> N3
N1 <--> Redis
N2 <--> Redis
N3 <--> Redis
%% 节点间互通连接
N1 <-.流媒体同步.-> N2
N2 <-.流媒体同步.-> N3
N1 <-.流媒体同步.-> N3
节点间流媒体同步
sequenceDiagram
participant C as 拉流客户端
participant N2 as 节点2
participant R as Redis/etcd
participant N1 as 节点1(源流所在)
C->>N2: 请求拉流(Stream1)
N2->>R: 查询Stream1位置
R-->>N2: 返回Stream1在节点1
N2->>N1: 请求Stream1
N1-->>N2: 建立节点间流传输
Note over N1,N2: 使用高效的节点间传输协议
N2->>R: 注册Stream1副本信息
N2-->>C: 向客户端推送流
推流负载均衡
sequenceDiagram
participant P as 推流客户端
participant LB as 负载均衡器
participant R as Redis/etcd
participant N1 as 节点1
participant N2 as 节点2
P->>LB: 发起推流请求
LB->>R: 获取可用节点列表
R-->>LB: 返回节点信息
LB->>LB: 根据负载算法选择节点
LB-->>P: 返回推流节点地址
P->>N1: 建立推流连接
N1->>R: 注册流信息
拉流负载均衡
sequenceDiagram
participant C as 拉流客户端
participant LB as 负载均衡器
participant R as Redis/etcd
participant N1 as 源节点
participant N2 as 边缘节点
C->>LB: 发起拉流请求
LB->>R: 查询流信息
R-->>LB: 返回流所在节点
alt 就近节点已有流
LB-->>C: 返回就近节点地址
C->>N2: 建立拉流连接
else 需要回源
LB-->>C: 返回边缘节点地址
C->>N2: 建立拉流连接
N2->>N1: 回源拉流
N2->>R: 注册流信息
end
关键特性
-
高可用性
- 节点故障自动切换
- 无单点故障设计
- 服务自动发现
- 多节点流媒体冗余备份
-
负载均衡策略
- 基于节点负载的动态调度
- 就近接入原则
- 带宽占用均衡
- 考虑节点间流量成本
-
扩展性
- 支持水平扩展
- 动态添加删除节点
- 平滑扩容/缩容
- 节点间按需同步流
-
监控和管理
- 集群状态实时监控
- 流量统计和分析
- 节点健康检查
- 跨节点流媒体质量监控
实现考虑
-
服务发现
- 使用 Redis 或 etcd 存储集群节点信息
- 定期更新节点状态和负载信息
- 支持节点心跳检测
- 维护流媒体在各节点的分布信息
-
负载均衡算法
- 考虑 CPU 使用率
- 考虑内存使用情况
- 考虑带宽使用情况
- 考虑地理位置因素
- 考虑节点间网络质量
-
容错机制
- 节点故障自动摘除
- 流媒体自动切换
- 会话保持机制
- 节点间流媒体备份策略
-
节点间通信
- 高效的流媒体转发协议
- 节点间带宽优化
- 流媒体缓存策略
- 按需拉流和预加载策略
- QoS保证机制