Security (SSL) has a Performance Tax
While on a call with a customer last week, I was faced with the question of why the customer’s site had slowed down, even after they had switched to full SSL.
Well, to be honest, it’s pretty obvious; SSL is more expensive from a web performance perspective. However, it wasn’t until I saw this chart that I realized how bad it has gotten.
Every metric jumped, and jumped by a lot! The worrisome spikes here are obviously the render start, onload, and webpage response.
The problem is that when you introduce SSL, you are also forcing everything on your website (images, third parties, etc.) to also use SSL.
Some of these third parties are better than others at handling SSL. In this case, the customer relies on a marketing third party called Criteo, and unfortunately they failed the test.
Let’s take a look at how the domains associated with this third party impacted this etailer:
The hostnames that were present before and after the SSL transition doubled in size! Again SSL is slower, but when you combine it with latency, it’s a performance nightmare for end users.
In this case:
From Los Angeles going to static.criteo.com I ended up in Amsterdam:
Traceroute to static.criteo.com (178.250.2.75), 64 hops max, 52 byte packets
- 1 192.168.1.1 (192.168.1.1) 0.586 ms 0.401 ms 0.406 ms
- 2 rrcs-xxxx.west.biz.rr.com (xxxx) 5.815 ms 13.928 ms 10.891 ms
- 3 142.254.236.121 (142.254.236.121) 19.880 ms 22.241 ms 22.791 ms
- 4 agg61.lsapcawv02h.socal.rr.com (24.30.169.101) 17.487 ms 15.217 ms 24.056 ms
- 5 agg20.lsaicaev02r.socal.rr.com (72.129.19.10) 20.255 ms 19.686 ms 14.779 ms
- 6 agg26.tustcaft01r.socal.rr.com (72.129.17.2) 28.060 ms 86.273 ms 32.855 ms
- 7 bu-ether26.tustca4200w-bcr00.tbone.rr.com (66.109.3.232) 26.927 ms 45.653 ms 26.746 ms
- 8 * lag-24.ear2.newyork1.level3.net (4.68.111.101) 26.402 ms 25.614 ms
- 9 ae-225-3601.edge5.amsterdam1.level3.net (4.69.162.146) 171.798 ms 177.958 ms 170.846 ms
- 10 criteo.edge5.amsterdam1.level3.net (212.72.41.226) 177.036 ms 173.708 ms 166.786 ms
- 11 n7k01-inet-am5-eth4-1.eu.criteo.net (178.250.7.116) 207.144 ms 192.979 ms
- 178.250.7.138 (178.250.7.138) 206.408 ms
- 12 static.criteo.com (178.250.2.75) 175.349 ms 181.355 ms 169.982 ms
or to Paris:
Traceroute to static.criteo.com (178.250.0.75), 64 hops max, 52 byte packets
- 1 192.168.1.1 (192.168.1.1) 0.569 ms 0.412 ms 0.357 ms
- 2 rrcs-xxx.west.biz.rr.com (xxx) 2.728 ms 2.707 ms 9.438 ms
- 3 142.254.236.121 (142.254.236.121) 18.537 ms 27.040 ms 24.838 ms
- 4 agg61.lsapcawv02h.socal.rr.com (24.30.169.101) 58.938 ms 31.111 ms 34.907 ms
- 5 agg20.lsaicaev02r.socal.rr.com (72.129.19.10) 29.830 ms 30.030 ms 20.014 ms
- 6 agg26.tustcaft01r.socal.rr.com (72.129.17.2) 37.169 ms 28.472 ms 23.341 ms
- 7 bu-ether26.tustca4200w-bcr00.tbone.rr.com (66.109.3.232) 21.238 ms 24.953 ms 22.439 ms
- 8 * lag-24.ear2.newyork1.level3.net (4.68.111.101) 105.589 ms 20.029 ms
- 9 ae-4-90.edge5.paris1.level3.net (4.69.168.200) 174.507 ms
- ae-2-70.edge5.paris1.level3.net (4.69.168.72) 179.457 ms 169.571 ms
- 10 ae-2-70.edge5.paris1.level3.net (4.69.168.72) 184.136 ms 169.041 ms
- ae-1-60.edge5.paris1.level3.net (4.69.168.8) 166.249 ms
- 11 criteo.edge5.paris1.level3.net (213.242.111.98) 181.880 ms 163.970 ms 170.280 ms
- 12 178.250.7.240 (178.250.7.240) 159.588 ms
- 178.250.7.242 (178.250.7.242) 169.325 ms
- 178.250.7.240 (178.250.7.240) 165.443 ms
- 13 static.criteo.com (178.250.0.75) 163.561 ms 192.055 ms 175.467 ms
Going to static.criteo.net I either went to SFO or to NY
- 1 192.168.1.1 (192.168.1.1) 0.563 ms 0.357 ms 0.334 ms
- 2 rrcs-xxx.west.biz.rr.com (xxx) 12.283 ms 9.262 ms 5.900 ms
- 3 142.254.236.121 (142.254.236.121) 14.034 ms 29.089 ms 18.924 ms
- 4 agg61.lsapcawv02h.socal.rr.com (24.30.169.101) 27.351 ms 23.018 ms 23.657 ms
- 5 agg20.lsaicaev02r.socal.rr.com (72.129.19.10) 22.151 ms 23.728 ms 25.857 ms
- 6 agg26.tustcaft01r.socal.rr.com (72.129.17.2) 44.198 ms 29.502 ms 39.897 ms
- 7 bu-ether16.tustca4200w-bcr00.tbone.rr.com (66.109.6.64) 32.621 ms 24.070 ms 23.089 ms
- 8 * * *
- 9 ae-1-5.bar1.sanfrancisco1.level3.net (4.69.140.149) 34.351 ms 38.145 ms 39.065 ms
- 10 ae-1-5.bar1.sanfrancisco1.level3.net (4.69.140.149) 39.776 ms 39.770 ms 40.181 ms
- 11 criteo.bar1.sanfrancisco1.level3.net (4.53.132.34) 40.056 ms 49.411 ms 35.027 ms
- 12 * 74.119.116.175 (74.119.116.175) 32.932 ms *
- 13 * * *
- 14 * static.criteo.net (74.119.117.74) 47.464 ms *
Because I use Google DNS and OpenDNS, I told myself that maybe that’s what was causing this weird routing.
But, then I traced from five of our nodes in the US:
Denver TWTC
Tracing route to static.criteo.com [178.250.0.75] over a maximum of 30 hops:
- 1 <1 ms <1 ms <1 ms 10.109.40.1
- 2 1 ms <1 ms 1 ms 74-202-23-213.static.twtelecom.net[74.202.23.213]
- 3 1 ms 7 ms 1 ms den1-pr2-xe-2-1-0-0.us.twtelecom.net[66.192.245.198]
- 4 * * * Timed Out
- 5 120 ms 121 ms 120 ms ae-4-90.edge5.paris1.level3.net[4.69.168.200]
- 6 120 ms 125 ms 123 ms ae-4-90.edge5.paris1.level3.net[4.69.168.200]
- 7 123 ms 124 ms 127 ms criteo.edge5.paris1.level3.net[213.242.111.98]
- 8 120 ms 120 ms 120 ms 178.250.7.240
- 9 120 ms 120 ms 119 ms static.criteo.com[178.250.0.75]
SF Level3
Tracing route to static.criteo.com [178.250.2.75] over a maximum of 30 hops:
- 1 <1 ms <1 ms <1 ms 10.113.30.1
- 2 6 ms <1 ms <1 ms lag-ae7-255.ear2.losangeles1.level3.net[4.31.61.117]
- 3 165 ms 166 ms 219 ms ae-226-3602.edge5.amsterdam1.level3.net[4.69.162.150]
- 4 167 ms 162 ms 163 ms criteo.edge5.amsterdam1.level3.net[212.72.41.226]
- 5 141 ms 141 ms 141 ms n7k01-inet-am5-eth4-1.eu.criteo.net[178.250.7.116]
- 6 141 ms 141 ms 141 ms static.criteo.com[178.250.2.75]
Miami CenturyLink
Tracing route to static.criteo.com [178.250.2.75] over a maximum of 30 hops:
- 1 <1 ms <1 ms <1 ms 10.115.20.1
- 2 <1 ms <1 ms <1 ms mia-edge-03.inet.qwest.net[63.237.255.221]
- 3 6 ms 2 ms 3 ms nap-brdr-01.inet.qwest.net[67.14.29.102]
- 4 1 ms <1 ms <1 ms mai-b1-link.telia.net[80.239.195.141]
- 5 26 ms 26 ms 26 ms ash-bb3-link.telia.net[62.115.141.74]
- 6 101 ms 142 ms 102 ms ldn-bb3-link.telia.net[80.91.246.69]
- 7 110 ms 110 ms 128 ms adm-bb3-link.telia.net[213.155.136.105]
- 8 106 ms 106 ms 106 ms adm-b2-link.telia.net[62.115.141.51]
- 9 117 ms 121 ms 120 ms 62.115.8.190
- 10 107 ms 107 ms 107 ms n7k02-inet-am5-eth4-1.eu.criteo.net[178.250.7.119]
- 11 107 ms 107 ms 107 ms static.criteo.com[178.250.2.75]
SF VZN
Tracing route to static.criteo.com [178.250.2.75] over a maximum of 30 hops:
- 1 1 ms 1 ms 1 ms 10.117.20.1
- 2 2 ms 1 ms 2 ms 120.gigabitethernet3-0.gw2.sjc7.alter.net[63.65.128.45]
- 3 3 ms 13 ms 10 ms bundle-ether14.gw3.sjc7.alter.net[140.222.235.53]
- 4 4 ms 3 ms 4 ms teliasonera-gw.customer.alter.net[152.179.48.214]
- 5 70 ms 113 ms 69 ms ash-bb4-link.telia.net[213.155.130.212]
- 6 259 ms 140 ms 141 ms ldn-bb2-link.telia.net[213.248.65.97]
- 7 151 ms 151 ms 145 ms adm-bb4-link.telia.net[213.155.136.79]
- 8 159 ms 165 ms 151 ms adm-b2-link.telia.net[62.115.141.11]
- 9 147 ms 149 ms 144 ms 62.115.8.190
- 10 169 ms 147 ms 143 ms 178.250.7.158
- 11 144 ms 143 ms 143 ms static.criteo.com[178.250.2.75]
DC Cogent
Tracing route to static.criteo.com [178.250.2.75] over a maximum of 30 hops:
- 1 <1 ms <1 ms <1 ms 10.111.10.1
- 2 <1 ms <1 ms <1 ms gi0-2-1-18.216.rcr21.iad01.atlas.cogentco.com[38.122.67.73]
- 3 <1 ms <1 ms <1 ms be2955.rcr21.iad02.atlas.cogentco.com[154.54.30.190]
- 4 1 ms 1 ms 2 ms be2658.ccr41.dca01.atlas.cogentco.com[154.54.47.137]
- 5 8 ms 7 ms 7 ms be2806.ccr41.jfk02.atlas.cogentco.com[154.54.40.105]
- 6 76 ms 76 ms 76 ms be2317.ccr41.lon13.atlas.cogentco.com[154.54.30.186]
- 7 86 ms 107 ms 86 ms be12194.ccr41.ams03.atlas.cogentco.com[154.54.56.94]
- 8 86 ms 86 ms 86 ms be2499.rcr21.b031955-0.ams03.atlas.cogentco.com[130.117.1.150]
- 9 87 ms 87 ms 87 ms 149.14.34.114
- 10 84 ms 84 ms 84 ms n7k01-inet-am5-eth4-1.eu.criteo.net[178.250.7.116]
- 11 86 ms 86 ms 86 ms static.criteo.com[178.250.2.75]
The challenge here is not only SSL, but the combination of SSL and geographically induced latency that makes things even worse.
It’s also important to compare Hostname A with Hostname B. In this case, I compared www.google-analytics.com vs. static.criteo.com during the switch over to Full SSL. Again, it’s normal that the SSL request should take a bit longer. Obviously, Google has some advantages: massive internet presence, geo load balancing, amazing consistent performance (notice the flat line vs. the jittery blue line), anycast network, people dedicated to monitoring and an environment where performance is part of the core DNA of every employee, even the air we used to breath there contained performance ions!
As we often said, your weakest link on a page is a third party that is not ready to handle your load or performance requirement. Switching to all SSL is a great feature from a security perspective, but at the cost of performance. Please make sure you keep an eye on your third parties when you switch to SSL.
What’s worrying me the most is what will happen when we move to HTTP 2.0, where it’s all secure. I know the benefits of HTTP/2, but I am very concerned by how all these third parties are going to impact websites when they switch.
Mehdi