CloudFlare vs Incapsula Performance Benchmarks

hartator
6 min readDec 9, 2015

--

CloudFlare and Incapsula are web services that act as a proxy between your visitors and your server. It helps with performance by caching static content and serving it through their CDNs and with security by mitigating DDoS attacks.

I am particularly interested by the caching system and their CDN proxy performances. I am reviewing the free plans at both services.

The web server is hosted by OVH and located in Roubaix, France near Paris.

Results From Paris, France

Direct web server without any CDN proxy:

➜ Alive git:(master) ab -n 5000 -c 5 http://www.motojump.com/m/js/jquery.js 
This is ApacheBench, Version 2.3 <$Revision: 1663405 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.motojump.com (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software: nginx/1.4.1
Server Hostname: www.motojump.com
Server Port: 80
Document Path: /m/js/jquery.js
Document Length: 91342 bytes
Concurrency Level: 5
Time taken for tests: 483.515 seconds
Complete requests: 5000
Failed requests: 0
Total transferred: 458425000 bytes
HTML transferred: 456710000 bytes
Requests per second: 10.34 [#/sec] (mean)
Time per request: 483.515 [ms] (mean)
Time per request: 96.703 [ms] (mean, across all concurrent requests)
Transfer rate: 925.89 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 40 56 35.5 51 1249
Processing: 258 428 176.0 405 4458
Waiting: 40 57 23.3 53 558
Total: 304 483 186.7 458 4500
Percentage of the requests served within a certain time (ms)
50% 458
66% 469
75% 479
80% 487
90% 518
95% 580
98% 736
99% 915
100% 4500 (longest request)

Proxied by CloudFlare:

➜ Alive git:(master) ab -n 5000 -c 5 http://www.iqchallenger.com/m/js/jquery.js
This is ApacheBench, Version 2.3 <$Revision: 1663405 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.iqchallenger.com (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software: cloudflare-nginx
Server Hostname: www.iqchallenger.com
Server Port: 80
Document Path: /m/js/jquery.js
Document Length: 91342 bytes
Concurrency Level: 5
Time taken for tests: 448.942 seconds
Complete requests: 5000
Failed requests: 0
Total transferred: 459145000 bytes
HTML transferred: 456710000 bytes
Requests per second: 11.14 [#/sec] (mean)
Time per request: 448.942 [ms] (mean)
Time per request: 89.788 [ms] (mean, across all concurrent requests)
Transfer rate: 998.76 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 36 53 31.5 50 1244
Processing: 176 396 80.1 391 1294
Waiting: 39 58 13.5 56 301
Total: 222 449 87.3 443 1992
Percentage of the requests served within a certain time (ms)
50% 443
66% 458
75% 471
80% 477
90% 505
95% 535
98% 630
99% 775
100% 1992 (longest request)

Proxied by Incapsula:

➜ Alive git:(master) ab -n 5000 -c 5 http://www.podiumracer.com/m/js/jquery.js
This is ApacheBench, Version 2.3 <$Revision: 1663405 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.podiumracer.com (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software:
Server Hostname: www.podiumracer.com
Server Port: 80
Document Path: /m/js/jquery.js
Document Length: 667 bytes
Concurrency Level: 5
Time taken for tests: 299.893 seconds
Complete requests: 5000
Failed requests: 1749
(Connect: 0, Receive: 0, Length: 1749, Exceptions: 0)
Non-2xx responses: 5000
Total transferred: 5790960 bytes
HTML transferred: 3334948 bytes
Requests per second: 16.67 [#/sec] (mean)
Time per request: 299.893 [ms] (mean)
Time per request: 59.979 [ms] (mean, across all concurrent requests)
Transfer rate: 18.86 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 37 252 1294.8 42 68734
Processing: 39 47 32.3 42 746
Waiting: 38 47 32.3 42 746
Total: 77 299 1295.3 85 68776
Percentage of the requests served within a certain time (ms)
50% 85
66% 91
75% 96
80% 102
90% 1088
95% 1126
98% 2108
99% 3113
100% 68776 (longest request)

Results From Dallas, TX

Direct web server without any CDN proxy:

➜ ~ ab -n 5000 -c 5 http://www.motojump.com/m/js/jquery.js
This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.motojump.com (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software: nginx/1.4.1
Server Hostname: www.motojump.com
Server Port: 80
Document Path: /m/js/jquery.js
Document Length: 91342 bytes
Concurrency Level: 5
Time taken for tests: 592.671 seconds
Complete requests: 5000
Failed requests: 0
Total transferred: 458425000 bytes
HTML transferred: 456710000 bytes
Requests per second: 8.44 [#/sec] (mean)
Time per request: 592.671 [ms] (mean)
Time per request: 118.534 [ms] (mean, across all concurrent requests)
Transfer rate: 755.36 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 112 115 1.5 114 120
Processing: 450 478 43.2 458 917
Waiting: 112 115 1.5 114 124
Total: 563 592 43.5 572 1033
Percentage of the requests served within a certain time (ms)
50% 572
66% 583
75% 585
80% 589
90% 684
95% 691
98% 701
99% 702
100% 1033 (longest request)

Proxied by CloudFlare:

➜ ~ ab -n 5000 -c 5 http://www.iqchallenger.com/m/js/jquery.js
This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.iqchallenger.com (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software: cloudflare-nginx
Server Hostname: www.iqchallenger.com
Server Port: 80
Document Path: /m/js/jquery.js
Document Length: 91342 bytes
Concurrency Level: 5
Time taken for tests: 9.891 seconds
Complete requests: 5000
Failed requests: 0
Total transferred: 459145000 bytes
HTML transferred: 456710000 bytes
Requests per second: 505.52 [#/sec] (mean)
Time per request: 9.891 [ms] (mean)
Time per request: 1.978 [ms] (mean, across all concurrent requests)
Transfer rate: 45333.79 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 1 4.9 1 344
Processing: 5 9 33.4 7 1060
Waiting: 2 5 30.9 3 1056
Total: 5 10 33.7 8 1061
Percentage of the requests served within a certain time (ms)
50% 8
66% 8
75% 9
80% 9
90% 10
95% 12
98% 17
99% 22
100% 1061 (longest request)

Proxied by Incapsula:

➜ ~ ab -n 5000 -c 5 http://www.podiumracer.com/m/js/jquery.js
This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.podiumracer.com (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software:
Server Hostname: www.podiumracer.com
Server Port: 80
Document Path: /m/js/jquery.js
Document Length: 90972 bytes
Concurrency Level: 5
Time taken for tests: 9.428 seconds
Complete requests: 5000
Failed requests: 0
Total transferred: 459035204 bytes
HTML transferred: 454860000 bytes
Requests per second: 530.32 [#/sec] (mean)
Time per request: 9.428 [ms] (mean)
Time per request: 1.886 [ms] (mean, across all concurrent requests)
Transfer rate: 47545.92 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 1 0.6 1 6
Processing: 5 8 5.5 8 216
Waiting: 2 3 3.3 2 186
Total: 6 9 5.5 9 217
Percentage of the requests served within a certain time (ms)
50% 9
66% 10
75% 10
80% 10
90% 11
95% 12
98% 13
99% 15
100% 217 (longest request)

Conclusion

Obviously, your mileage may vary. Incapsula performs the best from our Dallas origin with an average of 1.886 ms per request (lower is better) compared to CloudFlare with an average of 1.978 ms per request or without any CDN proxy, an average of 118.534 ms (!) per request.

However, our tests from our Paris location wasn’t conclusive. Incapsula and CloudFlare performs again better than the web server alone — respectively, 59.979 ms and 89.788 ms against 96.703 ms. However, Incapsula was blocking the majority of our requests and was responding with almost empty 403.

References

  1. http://www.motojump.com
    Website without any CDN proxy.
  2. http://www.iqchallenger.com
    Website with CloudFlare.
  3. http://www.podiumracer.com
    Website with Incapsula.

--

--

hartator

Passion for beautiful code, lunatic enterprises and ludicrous dreams