KeyCDN vs AWS CloudFront

29 April 2019   1 comment   Web development, Web Performance

Before I commit to KeyCDN for my little blog I wanted to check if CloudFront is better. Why? Because I already have an AWS account set up, familiar with boto3, it's what we use for work, and it's AWS so it's usually pretty good stuff. As an attractive bonus, CloudFront has 44 edge locations (KeyCDN 34).

Price-wise it's hard to compare because the AWS CloudFront pricing page is hard to read because the costs are broken up by regions. KeyCDN themselves claim KeyCDN is about 2x cheaper than CloudFront. This seems to be true if you look at cdnoverview.com's comparison too. CloudFront seems to have more extra specific costs. For example, with AWS CloudFront you have to pay to invalidate the cache whereas that's free for KeyCDN.

I also ran a little global latency test comparing the two using Hyperping using 7 global regions. The results are as follows:

KeyCDN on Hyperping.io
KeyCDN on Hyperping.io

CloudFront on Hyperping.io
CloudFront on Hyperping.io

RegionKeyCDNCloudFrontWinner
London27 ms36 msKeyCDN
San Francisco29 ms46 msKeyCDN
Frankfurt47 ms1001 msKeyCDN
New York City52 ms68 msKeyCDN
São Paulo105 ms162 msKeyCDN
Sydney162 ms131 msCloudFront
Mumbai254 ms76 msCloudFront

Take these with a pinch of salt because it's only an average for the last 1 hour. Let's agree that they both faster than your regular Nginx server in a single location.

By the way, both KeyCDN and CloudFront support Brotli compression. For CloudFront, this was added in July 2018 and if your origin can serve according to Content-Encoding you simply tell CloudFront to cache based on that header.

Although I've never tried it CloudFront does have an API for doing cache invalidation (aka. purging) and you can use boto3 to do it but I've never tried it. For KeyCDN here's how you do cache invalidation with the python-keycdn-api:

api = keycdn.Api(settings.KEYCDN_API_KEY)
call = "zones/purgeurl/{}.json".format(settings.KEYCDN_ZONE_ID)
all_urls = [
    'origin.example.com/static/foo.css',
    'origin.example.com/static/foo.cssbr',
    'origin.example.com/images/foo.jpg',
]
params = {"urls": all_urls}
response = api.delete(call, params)
print(response)

I'm not in love with that API but I know it issues the invalidation fast whereas with CloudFront I heard it takes a while to take effect.

Comments

Jonathan Kosgei

This page says Cloudfront has 176 edge locations - https://aws.amazon.com/cloudfront/features/.

Your email will never ever be published

Related posts

Previous:
I think I might put my whole site behind a CDN 23 April 2019
Next:
WebSockets vs. XHR 2019 05 May 2019
Related by Keyword:
How I simulate a CDN with Nginx 15 May 2019
WebSockets vs. XHR 2019 05 May 2019
I think I might put my whole site behind a CDN 23 April 2019
KeyCDN vs. DigitalOcean Nginx 12 April 2019
Comparing KeyCDN and DigitalOcean's new Spaces CDN 28 September 2018