三种分配方式
后两种都会出现同一个频道分布在多个节点上,节点之间自动级联转发(只转发有人订阅的流),
对用户和业务系统透明:客户端和业务接口都不需要改动,进的还是同一个频道。
按负载分配(默认)
- 一个频道的第一个人进来时,平台在可用节点中选负载较低的一个,之后同频道的人都进这个节点
- 负载按节点实际的转发量(包速率)、出口带宽和 CPU 综合评估;CPU 超过熔断阈值(默认 90%)的节点不再接新频道
- 节点满载后,新频道分到其它节点;已在该节点上的频道再进人会被拒绝,客户端收到错误码
1035(流媒体节点已满载)
满载溢出
在默认方式的基础上,频道所在节点满了之后不再拒绝,而是把后面的人分到其它有余量的节点:就近接入
把媒体节点按机房/地区分成若干服务器分组,业务系统在为用户获取加入频道 token 时带上 这个用户所属的分组(获取加入频道 token 的sg 参数),
平台就把他分到本组的节点:
- 同一场会议里,广州用户的流只在广州节点上收发,跨地区只走一份节点间级联,节省跨地区带宽
- 分组内有多个节点时,组内再按负载分配;组内节点都满时是否溢出到组内其它节点,取决于是否同时开启「满载溢出」
- 用户所属分组暂时没有可用节点时,平台会把他分到其它分组的节点,保证能进会
- 用户属于哪个分组由业务系统决定(例如按用户所在单位、园区),平台不按 IP 自动判断
分组和内外网线路是两回事:分组决定用户进哪台节点,线路决定用户用哪个地址连这台节点。
同一个分组的节点同样可以有内网、外网两条线路。
容量与调度配置
在管理后台 运维管理 → 媒体节点 页点「调度配置」编辑,保存后 30 秒内生效,不需要重启服务。 同页的节点列表会显示每个节点实际生效的承载上限,可以据此确认配置是否生效。
容量可以按节点单独配置,配置不同的服务器混合部署时各自填写即可。
部署前提
- 所有媒体节点共用同一套数据库、Redis,由同一个管理后台统一管理
- 节点之间 39002/UDP 双向互通,且丢包很低(同机房内网或专线)。开启溢出、就近接入前务必先确认,否则跨节点的用户之间会没有声音画面
- 各节点的网络线路配置保持一致:线路名称相同,每个节点各自填自己的媒体地址
- 多个节点共用同一个公网 IP 时,每个节点用不同的媒体端口(例如 39001、39011),防火墙按端口分别映射到对应节点,端口号保持不变
- MCU、设备网关、语音录制、语音识别网关要能访问每个媒体节点的媒体端口:它们以成员身份进会,频道落在哪个节点就连哪个节点,这是最容易漏放通的一条
- 各服务器时钟同步(NTP):时钟偏差会让通话质量指标失真,私有化内网要单独准备时间源
节点故障时
- 节点停止上报心跳后,平台不再往它分配新用户,后续进会和重连会分到其它在线节点
- 故障节点上的用户会断开并由客户端自动重连到其它节点;如果其它节点也满载,客户端会持续重试直到有空余容量
- 建议按「坏一台,剩下的仍能扛住全部负载」预留容量
限制
- 节点之间的级联按内网/专线设计,不支持节点之间跨公网级联
- 就近接入的分组由业务系统指定,平台不做按 IP 的地理位置判断
- 单场超大规模的「少数人发言、大量人观看」场景,更适合用 MCU 转推直播分发给观众,具体请联系我们评估