SRS 的集群只有三种角色:origin、edge、forward。 理解了分工,配置就是填空题。
11.2 装的是单机,这一节开始谈多机。 11.3.2 把这些角色落到 cluster 块里。
一、三种角色
① origin 源站:接推流端,把流往外发,不直接服务观众。
② edge 边缘:接观众,向源站回源,再把流分给观众。
③ forward 转发:接推流端,把流原样转给另一个源站。
origin 与 forward 最容易混,区别在方向:
origin 是被动被拉的源头,它知道自己是源;
forward 是主动往外推的中转,它不关心对面是谁。
一句话:前者等着别人来要,后者主动送过去。
为什么要有边缘这一层? 因为观众太多时,源站的出口带宽根本不够。 边缘的作用就是「把一份流复制成很多份」,摊掉出口压力。
二、算一遍边缘省了多少
拿一个具体数:10000 人看 2048 kbps 的一路流。 单机直出要 19.5 Gbps,这在任何一台机器上都不可能。
加边缘之后,源站只需要往每个边缘发一份: 20 个边缘时,源站出口只要 0.04 Gbps。 省下来的倍数正好等于边缘数,这不是什么黑科技,就是分发。
但边缘本身也有上限,这笔账必须一起算: 20 个边缘、每个承担 500 人,每人 2048 kbps, 每个边缘的出口就是 1000 Mbps,刚好压满千兆网卡。 所以「边缘数」不是随便定的,要按单机能扛多少反推。
三、调度与故障,SRS 不管
两件事必须提前想清楚,而它们都不在 SRS 的配置里:
① 选路:观众连哪个边缘? SRS 只负责「你连上我,我就回源」,它不做调度。 调度通常交给 DNS 或专门的调度服务。 ② 故障:边缘挂了怎么办? 观众会重连到别的边缘,那个边缘重新回源。 所以源站必须扛得住「所有边缘同时回源」的那一瞬间。
把这两句记住,选型就不会跑偏: SRS 是「一个边缘的实现」,不是「一套完整的 CDN」。 要做完整的,还得有调度、健康检查、日志汇总、计费。
四、动手 Demo:边缘数怎么定——算源站出口与单机压力
同一份总流量,边缘数从 5 加到 50, 源站出口与每个边缘的压力反着走。
total, kbps = 10000, 2048
# 单机直出要多少
single = total * kbps / 1024.0 / 1024.0
print("单机直出 %.1f Gbps" % single)
# 不同边缘数下,源站与边缘各承担多少
for e in (5, 10, 20, 50):
origin = e * kbps / 1024.0 / 1024.0 # 源站只发 e 份
per = total * kbps / 1024.0 / e # 每个边缘的 Mbps
print(e, "源站 %.2f Gbps" % origin, "边缘 %.0f Mbps" % per)
实跑输出:
--------------------------------------------------------------------
集群简介——源站只接推流,边缘只接观众
--------------------------------------------------------------------
**① 三种角色**
**SRS 的集群只有三种角色,理解它们的分工比记配置重要得多。**
角色 接谁 往外发什么
--------------------------------------------------------
origin 源站 推流端 往边缘发,不直接服务观众
edge 边缘 观众 向源站回源,再分给观众
forward 转发 推流端 把流原样转给另一个源站
**`origin` 和 `forward` 容易混:**
**origin 是「被边缘回源的源头」,它自己知道自己是源;**
**forward 是「主动把流推给别人的中转」,它不知道对面是谁。**
**前者是被动被拉,后者是主动推。**
**② 真算一遍边缘到底省了多少**
**10000 人看 2048 kbps 的一路流,这是本节的基本盘。**
边缘数 源站出口 Gbps 每个边缘 Mbps 省几倍
---------------------------------------------------------
5 0.01 4000 2000
10 0.02 2000 1000
20 0.04 1000 500
50 0.10 400 200
**单机直出要 19.5 Gbps,这显然不可能。**
**20 个边缘时,源站只要 0.04 Gbps——省了 500 倍。**
**这个倍数就是边缘数,不是什么黑科技。**
**但要注意每个边缘的压力:20 个边缘时每个承担 500 人,**
**就是 1000 Mbps,刚好压满千兆。**
**所以「边缘数」不是随便定的,要按单机能扛多少反推。**
**③ 选路与故障,两件事要提前想**
**① 选路**:**观众连哪个边缘?**
**常见做法是按 DNS 或按地域就近,**
**SRS 本身不管这件事,它只负责「你连上我,我就回源」。**
**② 故障**:**边缘挂了怎么办?**
**观众会重连到别的边缘,那个边缘重新回源。**
**所以源站必须扛得住「所有边缘同时回源」那一瞬间。**
**这两件事都不在 SRS 的配置里,**
**它是「一个边缘的实现」,不是「一套完整的 CDN」。**
**要做完整的,还得有调度、健康检查、日志汇总。**
**这一点在选型时要清楚,别指望装个 SRS 就变成 CDN。**
源站出口随边缘数线性涨,每个边缘的压力随边缘数线性落。 省下来的倍数就是边缘数本身,这是分发的定义,不是优化技巧。 20 个边缘时每个压 1000 Mbps,刚好是千兆网卡的线速。 所以边缘数不是越多越好,多到单机扛不住就得上第二层。
30 秒实验
- 把码率从 2048 改成 4096,猜边缘数要翻几倍——翻一倍,因为单机压力与码率成正比。
- 把人数从 10000 改成 100000,看源站出口变不变——不变,源站只跟边缘数有关。
- 边缘数加到 100,猜单机压力还剩多少——每个 200 Mbps,这时候瓶颈已经不在带宽了。
常见误区
- 「边缘越多越好」——每个边缘压力降了,但源站出口在涨。
- 「origin 与 forward 是一回事」——一个被动被拉,一个主动推。
- 「装了 SRS 就有 CDN」——调度、健康检查、日志都得自己做。
自测三问(点开对答案)
1. 三种角色分别接谁? —— **origin 接推流端、edge 接观众、forward 接推流端再转出去。** 2. 10000 人看 2048 kbps,单机直出要多少带宽? —— **约 19.5 Gbps**,任何单机都做不到。 3. SRS 负责观众连哪个边缘吗? —— **不负责**,选路要靠 DNS 或调度服务。- ☐ (本节完,下一节 11.3.2 SRS 集群配置)