I have been following this thread on Maximum number of participants to understand capacity planning for higher number of concurrent users. I understand that we can achieve this by provisioning multiple videobridges. I also understand that we can exploit Octo’s
SplitBridgeStrategy to split a conference call across multiple bridges even if they were in the same geographical region.
However, I’d like to understand capacity planning in a situation where all connections are essentially being relayed via a TURN server. Other than CPU, I understand JVB2 is also limited by network bandwidth. So assuming that:
- All participants are on Chrome web browsers (that support simulcast)
- All participants can have their audio and video on at the same time
- Each JVB is capable of supporting up to 100 participants with 8 vCPUs running at 70% at peak loads and 16Gbps network speed.
- Max participants per room can be effectively limited to <=35
- Total number of participants across multiple rooms is <=500, so I can provision 5 or 6 JVBs to support that capacity.
I have observed that in usual cases with max participants <100, my JVB uses around 20MB per concurrent user or 160Mbps. So to provision for max capacity of 100 concurrent users, I usually set up an instance with 16Gbps connectivity and that works very well.
However, I need to force all connections to use p2p, due to firewall restrictions. Thus, I have
useStunTurn set to
true for p2p as well as videobridge configuration in
config.js. I have
useTurnUdp set to
false to force TCP-only connections to port 443 of my dedicated Coturn server. So I am assuming that every chunk of data is being relayed to and from the JVB and my TURN server in this setup.
In this situation, if I added more JVBs for higher capacity, I’d end up adding support for 16x5 = 90 Gbps network bandwidth at peak loads. But since I’m only using one TURN server at 16Gbps network, would this server become the bottleneck and not allow participants from connecting once 16Gbps was reached on TURN, even though I had capacity on JVB? If yes, then:
- Would provisioning multiple TURN servers solve the issue? Of course, I’ll need to update my prosody config’s
turncredentialsmodule to advertise all of my TURN server names to clients.
- Is there any additional configuration that would be needed?
- In case of auto-load-balanced or elastic setups, I’d either need to have all TURN servers running all the time, or add/remove them to prosody config anytime my TURN server count changed and reload prosody. Is there a way to reload Prosody config without restarting Prosody, as restarting would drop all ongoing calls?
My comments and questions are based on assumptions mentioned above. Please feel free to counter any of those. I’d greatly appreciate if someone could help me with accurate information on this topic.