In this blog post I’ll compare different CDNs with each other, on the list are:
- Akamai (through MySpace)
- CacheFly
- CloudFront
- EdgeCast (twice, through Speedyrails)
- LimeLight Networks (through mydeo)
- … and Amazon S3 — the pseudo CDN
Thanks to SpeedyRails, EasyBib (CacheFly, Cloudfront, S3) and mydeo for helping with these tests.
What’s a CDN?
A CDN (Content Delivery Network) is a service usually offered by Tier1’s or at least companies that have a so-called global network footprint.
A CDN lets you distribute your assets/content on an array of servers and the nifty technology behind it makes sure that a customer is always transparently routed to a server closer to them, thus making it faster for the client to fetch the assets.
Content, or assets, can be anything such as images, css, JavaScript or media (audio, video). My numbers focus on assets primarily, I haven’t run any tests with larger media files.
An example for CDN usage would be that, let’s say I go to myspace.com — all the required assets are distributed using a CDN run by Akamai. When I browse myspace, the JavaScript files are pulled from a server located in Frankfurt. Whereas when I browse MySpace from the U.K., the files are pulled from a server in the U.K..
All of this is — as I said — transparent, which means that I don’t really notice a difference when I go to the website. It should be faster though.
Performance
I’ll skip over why it makes sense to use a CDN from a pure performance point of view. A much better blog article is available at the Yahoo! developer blog
When is a CDN necessary?
I wouldn’t recommend getting a CDN for a blog — unless you’re TechCrunch and live off of it. In my opinion this is a gray area. If you make money and your traffic is not just local (to the location of your server), consider a CDN, it’s more affordable than you think.
On monitoring
Pingdom is a nifty distributed monitoring service.
What Pingdom does is the following: Pingdom allows you to setup checks (literally within minutes) and then it runs the monitoring from different locations world wide.
The advantage of multiple locations is that you do know if for example your website is not available for everyone, or if it’s a local issue of a backbone provider, etc.. Beyond general availability, Pingdom also gather data on response times (average, fastest and slowest) and lets you filter on all of the above.
The current locations from which your website is monitored include Amsterdam (Netherlands), Atlanta, GA (U.S.), Chicago, IL (U.S.), Copenhagen (Denmark), Dallas, TX (U.S.), Frankfurt (Germany), Herndon, VA (U.S.), Houston, TX (U.S.), London (U.K.), Los Angeles, CA (U.S.), Montreal (Canada), New York, NY (U.S.), Stockholm (Sweden) and Tampa, FL (U.S.). In some locations, Pingdom employs multiple monitors.
The only downside I can see is that Pingdom has no footprint in all of Asia, South America or Africa. So in case you’re target demo is from either of those places, I’d advice you to gather your own numbers.
Well, gathering your own research data might be a good idea regardless.
Numbers
I used a minified jQuery library to compare the results of the various CDN vendors.
Amazon S3
Why do I consider S3 to be a pseudo CDN. Well, for starters — Amazon S3 is not distributed.
By nature, it shouldn’t be used as a CDN. The problem is though that many people still do. Take a look at Twitter and think twice why a page takes so long to load (and the avatars are always last). There’s your answer.
In order to be fair — Twitter also sometimes switches to Cloudfront (216.137.61.222) (or Akamai (213.248.124.139)?). I haven’t really figured out why they don’t stick to a real CDN period.
Besides, I think using Cloudfront is still not the best choice, thinking about it, they should of course use Joe Stump’s project tweetimag.es (which uses EdgeCast).
Stats porn
Spoiler: 100% uptime on all of them! ;-)
But on to the stats!
Akamai
- provider: Akamai
- 7 day period
- average response time: 65 ms
- slowest average response time: 289 ms
- fastest average response time: 19 ms
Akamai is probably the most well-known CDN. The clear advantage of Akamai over others — they are everywhere. And they charge an arm and a leg for it too. ;-) (No offense meant!)
CacheFly
- provider: CacheFly
- 7 day period
- average response time: 132 ms
- slowest average response time: 1,506 ms
- fastest average response time: 69 ms
CacheFly is another older CDN providers (~11 years). Pretty nice support and lots of custom options available when you email them. On their todo is a transparent proxy (WANT).
CacheFly has never failed me in over four years.
Cloudfront
- provider: Amazon Cloudfront
- 7 day period
- average response time: 276 ms
- slowest average response time: 1,983 ms
- fastest average response time: 171 ms
Cloudfront is Amazon’s idea of a CDN. It integrates well with Amazon S3. There’s no transparent proxy option and it’s not as distributed. And remember, it’s all eventually consistent.
EdgeCast
EdgeCast offers two options. Small and large files. Small files are a little more expensive but it’s generally suggested that they work just as well as large files. The small files option distributes your assets on SSD (Solid State Disk!).
The suggested use case is that large is for video and audio assets.
Regardless of the options, check the graphs and the numbers for some serious head scratching.
Large
- provider: EdgeCast (big files)
- 7 day period
- average response time: 77 ms
- slowest average response time: 987 ms
- fastest average response time: 22 ms
Small
- provider: EdgeCast (small files)
- 7 day period
- average response time: 91 ms
- slowest average response time: 1627 ms
- fastest average response time: 28 ms
Limelight
- provider: Limelight through MyDeo
- 7 day period
- average response time: 216 ms
- slowest average response time: 1,668 ms
- fastest average response time: 28 ms
And why is Limelight so slow? I don’t think I can blame it entirely on Limelight. In contrast to other resellers, such as Speedyrails (which resells EdgeCast), MyDeo gives you a url with mydeo.com
. And this domain uses Godaddy’s rather crappy DNS service so I’m guessing that part of the poor performance is due to them.
Amazon S3
ROFLMAO LOL!!!111one
- provider: Amazon S3
- 7 day period
- average response time: 534 ms
- slowest average response time: 2,323 ms
- fastest average response time: 331 ms
Quo vadis CDN?
My first advice to all resellers would be to get Pingdom and constantly run monitoring to make sure the system behaves as expected. Or as the production description suggests. :-)
On Pingdom itself — of course there may be issues as well (not that I noticed). But I don’t think these are a factor here. I’ve been running these tests for almost two months now and a different 7 day time frame didn’t look too different. No one performed much better or far worse.
Here are the numbers again, side by side:
Comment
Akamai is almost in a league of its own. Of all contenders they offer the best CDN hands down. If anyone reselling Akamai at a reasonable price reads this, feel free to leave a comment or email me. Of course I’d be interested.
Still, it’s a little surprising that Akamai is not further ahead of Edgecast.
Cloudfront versus others — from personal testing and also doing the math on S3 (storage, PUT, GET) with the addition of Cloudfront on top of it, I have to say that this is a pretty expensive service and probably only useful in terms of unified billing (one provider to rule them all). If this is not an issue, I suggest you find another.
CacheFly has great support, but lacks feature and it’s also pretty expensive compared to others.
EdgeCast vs. EdgeCast — I have to contact Speedrails to find out if they gave me the wrong URLs or why the more expensive option did worse in these tests. That’ll be interesting to figure out. Regardless of this bit, the performance is pretty stellar and the closest to Akamai.
I’ll revisit Limelight and mydeo later again.
Fin
It’s pretty obvious for us that we are switching from CacheFly to another CDN over the summer.
And not just because of the general performance but also because for example EdgeCast (through SpeedyRails) seems to be a lot more cost effective while offering more features and of course the much better performance at the same time.
In case there are questions, I can extract more numbers.