
How to implement a multi-CDN strategy - jlouazel
https://blog.streamroot.io/how-to-implement-a-multi-cdn-strategy-everything-you-need-to-know/
======
jloveless
This is a nicely written article, however it's worth noting that the
performance/reliability/availability differences across CDNs at a particular
moment in time are pretty much non existent. These providers share the same
backbone networks, same IX PoPs etc and thereby have little diversification
benefit. See [https://blog.edgemesh.com/understanding-diversification-
netw...](https://blog.edgemesh.com/understanding-diversification-networks-and-
nobel-prizes-114bf61247c4) )

Where multi-CDN really shines is helping with regional specific solutions
(e.g. China , India, Brazil, Argentina etc). It's probably worth nothing that
the team at Streamroot helps do this client side and their p2p style option
helps localize traffic as well. The former is certainly the way to go and the
latter really helps add network level diversification. Of course - I'm biased
as we offer similar lower level solutions.

~~~
Jormundir
This statement is not even close to true. At a particular point in time,
different CDNs can have very different performance even for the same ISP in
the same region.

~~~
joshenders
Absolutely. If you were a CDNs only customer this may be true but the reality
is that you’re not and they are always going to be over-subscribed. Having
worked at a CDN provider (Cloudflare), I can tell you that they are constantly
battling resource contention via DDoS or other reliability issues.

Multi-CDN is the way to go for performance and availability, though as a
customer it can be challenging because you’re forced to limit your
configuration to the lowest common denominator of features and there’s not a
great way to test consistency of your configurations across all vendors.

This article is essentially a high level sales pitch though; I didn’t find it
all that useful. I implemented multi-CDN at Pinterest using Cedexis (DNS
based), though with modern DNS providers like NSOne, Cloudflare, Dynect, a
modern spark-based ETL pipeline, and the browser navigation timing API (RUM),
it wouldn’t be too challenging to build something resembling Cedexis yourself.

~~~
eldod
Indeed the article is more an introduction to multi-CDN concepts, but take
into account that it was written for the HTTP video streaming use-case, and
not static content CDNs. A client-side implementation of switching would not
be very useful for that kind of content.

For Cedexis, I think the strenght is not only in the configurable DNS routing
system, but also because they set up a lot of probes for different CDNs &
clouds, and share global aggregated data that anyone can access, which can be
useful when you don't a Alexa top1000 traffic.

------
SilasX
Shower thought: what if html/http/browsers supported, as a primitive, the
concept of "fetch this asset from url A, or if that doesn't work, B, or if
that doesn't work, C ..."?

~~~
tyingq
Internal browser support for local caching based on a hash versus "where it
came from" would be helpful as well.

~~~
dougb
Doesn't work for streaming Live Events (pay per view), which is the main use
case for multi-CDN

~~~
tyingq
Their list of redundancy, agility, and cost doesn't seem exclusive to video.
Though perhaps more compelling given the time sensitive nature and bandwidth
amount.

------
dougb
This sounds similar to
[https://www.conviva.com/precision/](https://www.conviva.com/precision/)

Unfortunately you need to know a lot more and the devil is in the details.
Supporting the various streaming devices/browsers is a huge pain in the ass.

Full Disclosure: I worked for both Conviva, and Akamai.

~~~
eldod
Nikolay from Streamroot.io here, co-author of the article.

Yes Conviva provides a service that can give you information about the QoS for
the CDN by aggregating data from their customers (they provide a video
analytics solution), but it doesn't make the switching (nor on the server side
or on the client side), so the video player would need to implement its own
logic themselves.

The solution from Streamroot can use this kind of APIs like Conviva Precision,
or the one from its competitors like Youbora and Cedexis, and the real value
it adds is the client-side switching capability to the players, so it's quite
complementary to those solutions.

And indeed the devil is in the details, that's why we built this client-side
SDK so the customers don't have to implement all the logic themselves on each
platform and device. It was easier for us as we already have SDKs and plugins
for most players for our P2P hybrid delivery solution.

------
fasteddy760
There are several factors to consider in a multi-CDN delivery solution.

First, is it VoD or Live? HLS (and DASH) have a second URL option (base URL in
DASH), for the client to determine when to choose that Fallback URL. If
playback falls back to the second URL, that fallback experience to the viewer,
could have had some buffering, or bitrate downshifts triggering that player
decision.

Although stream playback recovers/continues, the user experience could have
and likely was impacted. Here a second CDN in the multi-CDN deployment was
accessed by the client. There is no intelligence here, in the provider
selection. Typically the (perceived) most reliable CDN gets that first spot,
and the backup CDN gets the Fallback position (second URL) in the
manifest/MPD.

In Live, you have the opportunity to provide intelligent CDN selection on
every manifest/MPD refresh. If your multi-CDN selection layer has
intelligence, access to performant metrics, in real time, that manifest can
now point (directed) to the alternate CDN. This requires a level of manifest
management on the session level, so that the m3u8 retains the proper
historical CDN selection so as not to break playback for that session (in most
if not all cases).

There are client solutions, DNS solutions, and cloud solutions that are
neither client (sdks), or DNS based. You get to decide how you want
integration to be managed and how much work your team can/can't invest in your
solutions ongoing level of effort.

Why is most important to consider is the viewer experience, and how playback
can best be delivered to avoid buffering, downshifts, the things that cause a
viewer to abandon your content and possibly not come back.

If a CDN is performant, and N+1 users are now beginning to watch a stream on
that providers network, capacity could be (often is) an issue. Continuing to
send users to that CDN may be a sub-optimal experience. Metrics measuring
playback determine that bitrates are dropping, buffering increasing, and serve
new requests with an alternate CDN providing a better playback experience.

Video is a tightly controlled series of events. We work with chunks of 10s,
6s, 2s, for large buffers, and fast start times. Continually trying to balance
the benefits of both.

With an SDK client based solution, you have engineering effort to keep up with
OS/hardware updates, testing new code in SDKs, and then pushing out across
several platforms, players, etc. Can be daunting.

With DNS, you have TTLs to manage, while lower is better, faster for that next
user, there is no mid-stream switching with intelligence once the client is
pulling manifests from a specific provider.

With a cloud based solution, each individual stream/user/device is measured
and Can selection performed in real time for Live, and for _each_ request on
VoD.

Disclaimer, I work at DLVR, and formerly Cedexis. = ]

~~~
Jakob
For VoD I like the approach where you use a fast and reliable CDN for the
first seconds and in the background buffer the rest of the video from a cheap
location/CDN.

This works if you download video faster than real time which is almost always
the case. That way you get the best of both worlds.

~~~
fasteddy760
That's clever!

What do metrics show for UX for that workflow? (Bonus: What tool for capturing
play data?)

------
mahesh_rm
Using this comment thread to plug a question: Is there a way to use Cloudflare
(or other DNS server providers) in order to dynamically fallback to CDN A
(e.g. Cloudfront) in case CDN B (e.g. Netlify CDN) is down?

~~~
edaemon
I don't think Cloudflare Load Balancing can do this (yet), but Dyn can:
[https://dyn.com/active-failover/](https://dyn.com/active-failover/)

The crucial part is CNAME compatibility. Most DNS services I've had experience
with can only do failover between IPs.

~~~
mahesh_rm
Thank you, will try to implement this with Dyn

------
nik736
off topic: the cookie banner is completely hiding the navbar/logo/navigation.

~~~
eldod
Thanks for noticing! We'll make sure to improve this

------
zzzcpan
I guess they only care about video. But for websites multi-CDN means
essentially building your own CDN where using other CDNs isn't even a good
idea, since they don't provide enough granularity of control to monitor and
choose nodes and therefore limit you in what you can achieve in terms of
latency and availability. DNS is also your biggest and often the only friend
here, learning and deploying it yourself is critical, don't rely on any vendor
to do it.

