Wowza Community

Wowza StreamResolver Plugin / Auto-scaling Ingest/Origin Servers

We’ve been running Wowza Streaming Engine for several years and are currently working on creating a more scalable setup on Amazon Web Services. This past fall we added edge instances to auto-scale out as needed from our two existing origin servers. Each origin server was used for a specific use case.

With the ongoing pandemic, demand can be low for long periods of time but then for several hours we need to ingest 20+ video streams and roughly the same audio streams. It is not economical to run extremely large instance sizes all of the time for ingest and it leaves us at risk if the server encounters an issue (all ingest streams would fail if the server falters). So we would like to do for ingest what we did this past fall for distribution and configure these servers to auto-scale as need.

Our goal is to provide a single ingest endpoint that will dynamically pass the ingest stream to one or more auto-scaled ingest servers. Our edge servers should dynamically locate the stream and repeat it on request.

To test this, we installed the Wowza Stream Resolver plugin. We created multiple ingest servers and a single edge server, configuring the plugin as outlined on this page:

https://www.wowza.com/docs/how-to-dynamically-resolve-edge-server-stream-requests-to-origin-servers-modulestreamresolver

In reviewing our debug logs, I can see the UDP connection initiated from the edge server over port 9777 and locating the stream on one of our origin servers. However, if I use anything other than VLC connecting with an rtmp:// connection, the log reports a warning of playlist not found and the request fails. However, if I have a VLC session running over rtmp:// the server begins repeating the stream – at this point an HTTPS connection to the server via port 1935 can and will begin working. If I stop the VLC player, the server closes the connection and the HTTPS stream fails.

I’ve opened an official support ticket the other day, but my forums access was not working. I’ve created a new account so that I can post to see if anyone else has experienced this or has a suggestions on what we might do to troubleshoot this?

Would it make more sense for us to just use a Wowza Load Balancer for ingest and to point our edge server application to that load balancers URL?

It’s also worth noting that we’ve tested using the AWS Network Load Balancer for balancing ingest streams across multiple servers and while it does work we’ve noticed it to be a bit sporadic in how it allocates resources. With five servers running one had 7 - 8 streams while three others had 2 - 3 streams and the fifth server was often unutilized. We believe we can write a script to simply remove a server from the load balancer target group when it his what we consider to be a maximum ingest for the server size, but we are wondering if the Wowza Load Balancer may also be a better solution to round robin distribute incoming streams?

Maybe this can help you; it’s not a step-by-step guide, but it may give some useful info: https://www.youtube.com/watch?v=aMylTSmOa2U

Personally I’d use the AWS Network LB, combined with an Auto Scaling Group and some custom software that can launch and terminate instances as required. Use a simple database like Redis or DynamoDB to store the stream name and the server name, so that your distribution chain knows which stream must be pulled from which server. We’ve implemented this a number of times on different platforms (AWS, Azure, Google); every implementation is different and it always takes some time to get things done right, but once it’s set up, it works pretty smooth.