I don’t think I’ve ever met someone saying “I wish my web application would run slower.” Everyone wants their stuff to run faster, but most environments are not willing to pay the cost (rearchitecting the application). Welcome to the wonderful world of PowerPoint “solutions”.
The obvious answer: The Cloud. Let’s move our web servers closer to the clients – deploy them in various cloud regions around the world. Mission accomplished.
Not really; the laws of physics (latency in particular) will kill your wonderful idea. I wrote about the underlying problems years ago, wrote another blog post focused on the misconceptions of cloudbursting, but I’m still getting the questions along the same lines. Time for another blog post, this time with even more diagrams.
Let’s assume your customer sits 10 msec away from your data center.
When the client tries to open a web page for the first time, it takes a long while before the first usable byte arrives at the web browser1:
- One round-trip time (RTT) is spent on TCP SYN/ACK
- Two more RTTs are spent negotiating TLS.
- Another RTT is spent sending HTTP request and receiving the initial few packets of the response.
- At least one more RTT is spent receiving the rest of the HTTP response.
You could solve this conundrum with a new protocol that reduces the number of RTTs needed to establish a session (see: HTTP/3) or you could deploy the web server closer to the client:
Guess what… as I explained several times pulling the web server away from the underlying infrastructure only makes the situation worse – a web application usually makes many back-end requests to collect data needed by a single client request.
The only working solution is thus a web proxy – a local web server that terminates the client session and uses an existing HTTP session with the back-end web server, spending a single RTT for the HTTP request and response.
Using web proxies has another advantage: if you deploy web servers all around the world you have to manage them, but if you settle for a web proxy you can buy it as a service from any CDN provider. I’m using CloudFlare; you could easily get the same service from AWS, Azure, or a dozen other companies.
A lot of discussions are focused on Time to First Byte, but what some companies are interested in is really Time to First Ad ;) ↩︎