Over the last few days I finished moving Digraph from DigitalOcean to Linode. This was a valuable and eye-opening experience for me, and I thought I might go into it a little here.
DigitalOcean is a platform-as-a-service provider that makes available the server instances that power dynamic web apps like Digraph. It is a competitor to Amazon Web Services and similar offerings. I had been using DigitalOcean’s hosted Kubernetes service, which, together with a load balancer, special software that lets people connect to your web app from a browser, was running around $22 per month. The price felt high for the kinds of things that Digraph is doing. Most of the excess cost was from the load balancer, which in the case of Kubernetes on DigitalOcean is a necessity, but which would not be needed in a more simple setup on DigitalOcean. If my primary goal had been to save money, I could have accomplished the same thing without Kubernetes and the load balancer for about $5 to $10 per month. But I like Kubernetes and wanted to learn more about it, and Kubernetes does a lot to make life easier, so the extra cost has been worth it for me.
Recently I upgraded the Kubernetes cluster from v1.15 to v1.20. Around the same time, I started seeing inexplicable pauses in the responsiveness of Digraph. You’d click on a link, and in most cases it would quickly take you to the next view as it had in the past. But occasionally things would get stuck, and nothing would happen, and then after 60 seconds you’d see an error page. The new behavior wasn’t going to work, but troubleshooting the root cause was hard. Eventually I started suspecting that there was an issue in DigitalOcean’s network itself that might be to be interrupting communication between servers from time to time. After a few months of living with the behavior, I finally decided to try setting the app up on Linode, partly out of curiosity about Linode’s comparable service, and partly to see if the problem was due to something in Digraph or in DigitalOcean’s infrastructure.
In one evening, I got a version of the app set up on Linode, which you could get to from a bare IP address. The configuration was straightforward, and the immediate results were promising. The app was faster, and I didn’t see any of the inexplicable pauses I was seeing on DigitalOcean. It seems that the issue might have been in DigitalOcean’s networking after all. The decision to move Digraph to Linode was an easy one. The most challenging part of the setup was getting HTTPS configured with Let’s Encrypt, a free service that makes HTTPS available to any website that needs it. After tinkering around for another evening, I also got that working. The whole process probably took four to six hours.
Despite the slightly higher cost than I would have liked, I’ve appreciated DigitalOcean’s service and ease of use over the past two years. I look forward to seeing how Linode’s service compares. The experience of migrating Digraph from DigitalOcean to Linode was an eye opening one that taught me something about hosted infrastructure. If your app is based on a platform-agnostic set of tooling along the lines of Kubernetes and is not deeply integrated with the APIs of the service provider, it is not much effort at all to switch to a new provider. I will be interested to see whether the competition made possible by technologies like Kubernetes eventually brings down the cost of hosted infrastructure.