TL; DR – You will enjoy rolling your own WordPress instance on Azure until you see the cost of scaling and maintaining the site. I decided to spend more time blogging and less time and money managing the infrastructure by leaving the speed, scale, security, and support of a fully managed WordPress installation to Austin's very own WP Engine.
It did not take long before I hit my first patch of turbulence in the Windows Azure Cloud. My second blog post about using Parallels Desktop® 7 for Mac for a development machine was retweeted by @ParallelsMac to its 18K+ followers. I checked my blog entry for any comments, but was greeted by the message: Error establishing a database connection.
The Cathedral and the Bazaar in the Sky
I had WordPress 3.3.1 configured to run on two Extra Small Azure server instances (Shared CPU Cores and 768 MB Memory) with a SQL Azure backend. I figured this configuration would suffice for a single blog site with no following.
The first action I took during the outage was to start up an additional two instances via the web management interface. This immediately resolved the issue, but I assumed the traffic that caused it was long gone and never to return. Since I was only 3 days into my 90 day free trial of Azure, there was no cost for spinning up additional instances. However, projecting the cost forward under normal conditions after the trial period gave me cause for concern.
Cloud with a Silver Lining
Windows Azure is quite up front about its pricing levels and provides an excellent Pricing Calculator to check out the cost of various configurations. It took me several days, but I finally spotted the Billing link on my management portal page. I checked today to see the net effect of running five Extra Small Azure instances the past couple days. The 6 days worth of statistics made it clear I would not be needing the full 90 day free trial period:
- Database (DB / Month) – Web Edition: 19.355% of 1 db/month
- Compute Hours – Windows Azure Compute: 17.2% of 750 Unit
- Storage Transactions (in 10,000s) – Windows Azure Storage: 3.112% of 5 10,000s
- liData Transfer Out: 0.17 GB of 80GB
- Data Transfer In: 0.39 GB
The free trial period includes 750 hours of compute time per month, but that is only enough for a single Extra Small instance. The recommended configuration by Azure is two instances and that was not even enough for my small burst of traffic.
Seeding Your Own Cloud
I thoroughly enjoyed rolling my own instance of WordPress in the Azure cloud, but the price of scaling it is too much for the average blogger. Change management of the WordPress site is not as straight forward either when running your own cloud. I found this out quickly when using the WordPress administration interface.
I knew from the start that running multiple instances would isolate certain aspects of the framework but not by how much. The Windows-Azure-PHP-Scaffolders included a Windows Azure Storage plug-in to make images and static content available across all instances. In addition, the WordPress database will keep your content and plug-in settings available for all instances. The problem is with the other items that you frequently change when first setting up a new WordPress site:
- Plugins – You cannot install or uninstall plugins using the online admin interface unless you understand the fine art of round robin load balance dancing (F5 or Command-R) to install them on all nodes
- Themes – You cannot install or modify themes using the online admin interface without the same issue
- You could install the certificates to Remote Desktop into the instances, but Azure will use the base image uploaded when starting up any new instances. All component and template changes will be lost on the new instance.
The remedy is to configure the WordPress plugins and theme modifications on your local computer, repackage the changes into a new Azure deployment, and use the Azure management console to stage the upgrade into the Cloud. Azure makes the process quite simple for someone like myself, but it is more complicated than simply using the WP-Admin interface to make the changes online.
Reliability and performance is rarely free or inexpensive, so I went back to where I started 6 days ago looking for hosted WordPress providers. I had no interest in the standard web hosting shared / VPS offerings thereby limiting my search to true SaaS providers like WordPress.com and WP Engine. After seeing the cost of Azure, I did not even bother with exploring Amazon AWS.
WP Engine on the other hand, provides exactly what I was attempting to accomplish on my own, but without the change management opportunity and scaling costs. I also like the idea of supporting a locally operated Austin business. If I am not mistaken, I only know of WP Engine by word of mouth of them either sponsoring or helping out at some Austin technical user group meeting or something. This just goes to prove that more tech companies should be sponsoring local tech user groups with beer and food.
The best part, it literally only took me 43 minutes from the time I received the Welcome to WP Engine! email until the moment I logged into Namecheap.com to update my DNS settings to point my CNAME record directly to WP Engine.
In the end, Azure is fun but WP Engine will get it done. I enjoyed the experience of understanding the finer points of packaging and deploying to Azure, but I am not willing to spend the dollars necessary to operate successfully on it. Stay tuned, I have only been on WP Engine for 5 hours now.
- Eric S. Raymond (1999). The Cathedral & the Bazaar. O'Reilly. ISBN 1-56592-724-9