Presenting Mediasoup Horizontal
Edit on GitHubAlthough Mafalda SFU is mainly focused on vertical scaling of Mediasoup and the WebRTC stack, the main problem I've found companies are facing is about how to easily implement Medisoup horizontal scaling. I've been working on a solution for this problem for a while now because since Mafalda is build on top of Mediasoup, it's also needed to help it to provide transparent vertical and horizontal scaling, so let's see how it works.
Mediasoup-Horizontal
is a manager that allow to remotely control multiple
instances of Mediasoup, providing a simple and easy to use API based on the
Javascript
Set
one. It allows to add and remove Remote Mediasoup Connection
objects and
manage them, although is not directly tied to them so you can provide your own
objects following that same API, for example to also control a local Mediasoup
instance in addition to the remote ones.
When adding a Remote Mediasoup Connection
object to the Mediasoup-Horizontal
instance, it checks that all the Remote Mediasoup instances are compatible
between them, so you don't have to worry about in what instance your Mediasoup
objects are being created. After that, it monitors the creation of new objects,
and also does it with the Connection
current objects in case they are later
destroyed.
Mediasoup-Horizontal
also provides a Mediasoup compatible API, so by using it
you can auto-magically enable your application to scale horizontally without
needing to change your current code. The "magic" happens by using objects that
provides the same API of Mediasoup
Worker and
Router, but
internally proxing the calls to the Connection
objects. This is done this way
to be transparent to the actuals references being done at Mediasoup-Horizontal
level.
After that, implementation of pipeToRouter()
is fairly trivial. Code is an
optimized version of original Mediasoup one, just only with fine-grain errors
management and with some performance optimizations to reduce delay of events
propagation so general behaviour is the same, although there's space for
improvements. In fact, I proposed to
move it out officially to a
separate library so it can be reused by other projects like this one, but the
proposal was rejected.
And that's it, that's how Mediasoup-Horizontal
works. Needs steps I'm planning
about are to improve performance and resilience, allowing it to better recover
from network re-connections, and also works towards implementing a tool for
monitoring in real time the status of all the Remote Mediasoup instances.
Comment on Twitter
You can leave a comment by replying this tweet.