Have you ever wondered “How bad is it to run a WordPress site on a $3.80/month virtual machine in Azure?”. I haven’t either. But as I was browsing Azure virtual machine options the other day I came across the B1ls machines and figured I would give it a go. If for no reason other than keeping people from doing it.
Provisioning the Azure B1ls
Azure is most definitely not targeted at your typical WordPress user. Azure specializes in large corporations with complicated infrastructure demands. If you don’t have any experience configuring cloud infrastructure (Azure, AWS, GCP, etc) this could be confusing.
Part of the problem with Azure (versus something like DigitalOcean) is that you have to configure everything. Need an IP address? Add it yourself. Need a hard disk? Add it yourself. Need almost anything that isn’t a VM? Better get cozy because you’re going to be here awhile.
After all was said and done I was able to configure a $3.80 B1ls machine with 1 vCPU, 512MB of RAM, accessible from the internet, with Ubuntu 18.04 installed on it.
Once the VM was provisioned and the network was set up, I was able to install a pretty basic LAMP stack.
- PHP 7.2
During the installation and configuration of WordPress I did notice 1 thing: This VM is SUPER slow. I’m not sure if it’s memory constraints or CPU slowness, but it took forever to install the above packages.
I ran two WordPress load tests against the Azure B1ls instance. The first was 50 concurrent users with no caching and the second was 50 concurrent users with caching enabled. The results were predictable, but I wasn’t prepared for how well this cheap box performed when caching was enabled.
This is the predictable portion of this adventure. It is well known that out of the box WordPress isn’t very performant. Given it’s flexibility this isn’t surprising.
Let’s talk about how we tested this. Using Kernl’s WordPress Load Testing product, I was able to throw 50 concurrent users at the Azure VM from two different regions (New York, San Francisco). The results were not great.
In the graph above you can see that things went OK for a few minutes, but eventually the B1ls VM couldn’t keep up anymore. Eventually all the requests that didn’t get handled timed out leading to the HUGE spike of failures. After that, you can see the failures started to level out.
Response times honestly weren’t awful, but they don’t really matter if the site can’t return content 🙂 At the end of the chart things start to look good, but that’s only because the server was throwing
500 errors almost immediately.
Now is where we start to bump in to the unexpected portion of this adventure. Given how poorly the Azure B1ls VM handled uncached WordPress I really couldn’t imagine them doing much better when cached. Boy was I wrong.
For this test we ran the same exact configuration as the uncached test (50 concurrent, New York, San Francisco), but this time we had W3 Total Cache configured with Memcached.
As you can see from the chart above, the story around running WordPress on the Azure B1ls VM in a cached scenario is VERY different. We maxed out at around 650 requests / second with zero failures.
Now you are probably wondering how we achieved 650 req/s on a 50 user load test. Me too. This is definitely a bug in Kernl’s load testing implementation which should be resolved soon.
Even with our unexpected request volume the response time distribution was pretty great. 100% of requests finished in under 3.5 seconds (this includes outliers). 99% of requests finished in 140ms. Given the number of concurrent requests and the cost of operation, I’m honestly amazed at that number.
Running WordPress on Azure is a choice most of us don’t make. Azure is a big, scary, complicated cloud provider targeted at Enterprise customers. The Azure B1ls virtual machines are an OK fit for WordPress, but only if your workload is cache friendly. As soon as you have to do things more complicated than going to the cache and fetching a page things fall apart quickly.
My conclusion is that the Azure B1ls virtual machines are fine for a WordPress personal blog with limited traffic so long as you cache everything. If you don’t fall into that category, stay away.
Want to load test your own WordPress site? Sign up for Kernl’s 30 day free trial.