Streaming and high-bandwidth delivery
For video delivery the network port is not a detail of the specification — it is the specification. The rest of the machine exists to keep it full.
Start from the port
Work out your concurrent viewers times your bitrate. A thousand viewers at 5 Mbit is 5 Gbit sustained; that needs a 10 Gbit port with headroom, not a 10 Gbit burst on a 1 Gbit commit.
Then make sure it is genuinely unmetered rather than metered with a generous allowance, because at these rates the difference is the entire bill. See what unmetered actually means and port speeds. This is what we specialise in, and the uplink behind those ports is not oversold.
Keep the working set in memory
Delivery is bound by how fast you can get bytes to the network card. If the popular files are in the page cache, the disk is barely involved and a single machine can saturate 10 or 25 Gbit. If every request reaches the disk, you will not get close.
So: plenty of memory, and fast storage for the long tail. NVMe for hot content, bulk SAS behind it for the archive — see SAS, SATA and NVMe. Watch your cache hit ratio rather than your disk throughput; the ratio is the number that predicts whether you will fall over at peak.
Serving efficiently
- Let the kernel do the copying.
sendfileandtcp_nopushin nginx keep file data out of userspace entirely. - Raise the file descriptor limit. Thousands of concurrent
connections need
LimitNOFILEin the unit andworker_connectionsto match. - Tune the network buffers —
net.core.rmem_maxandwmem_max— for long-distance, high-throughput streams. - Serve HLS or DASH segments as static files where you can. Transcoding on the delivery machine competes with delivery for the same hardware; separate the two roles.
- Use HTTP/2 carefully. For large segment delivery, plain HTTP/1.1 with keep-alive is often faster.
Origin and edge
Past one machine, split the roles: an origin that holds the library, and edges that
cache and serve. nginx with proxy_cache makes a perfectly good edge, and
two edges in Amsterdam behind round-robin DNS will take you a long way before you
need anything more elaborate. See load balancing.
Keep the origin private — reachable from your edges, not from the internet. See connecting your own servers.
The part people skip
If you deliver content uploaded or chosen by other people, you take on obligations. Our acceptable use policy requires that you can actually act on a complaint: a published contact point that is read, and a working way to remove specific material quickly — a takedown mechanism, not a promise to look into it.
Under EU law you must also be able to act on a removal order within a short window, and for terrorist content that window is one hour. Build the tooling before you need it. A service that cannot remove a single item without taking everything down has a problem that only shows up on the worst possible day. See what to do with an abuse notice.
Tell us what you are planning
Sustained multi-gigabit delivery is normal here and we would rather build for it than discover it. Describe the pattern — peak concurrency, bitrate, library size, where the viewers are — and we will quote hardware and a port that fit, and say so if the shape is wrong.
Still stuck? Mail support@novogara.com — an engineer answers, at any hour. Back to the knowledge base