How do you scale a WordPress installation? Or more importantly, how do you make it so that your WordPress installation is always available? I asked this question about a year ago in a post, Suggestions for “clustering” WordPress MU servers? Or mirroring servers?, and I still don’t have a great answer. Sure, I have a system in place now that regularly syncs backups to a standby server that is just waiting there to be brought online. If anything happened to the main blog server we could be back online within a short time period.
But I don’t want to go through that process – I just want the content to be always available.
The big challenge with a multi-server WordPress installation is this:
how do you keep the database in sync between the servers?
I can set up multiple WP servers. Install the same WP software. Install the same plugins. I could even set up DNS to do a round-robin between the servers… but all that only works if the servers have the same database of posts, comments, etc.
Yes, we’ve drawn up a plan to set up a MySQL sync between two servers, etc., etc…. but I haven’t implemented that yet in part because I just haven’t made the time but more because it’s just uglier than I want.
What intrigues me instead is the idea of using Cassandra or another one of the so-called “NoSQL” databases (like MongoDB, CouchDB, SimpleDB, etc) as the underlying database. The main difference from MySQL is that Cassandra is a distributed database from the start. Forget the “master / slave” relationship you have to set up with MySQL… all Cassandra nodes are equal.
In theory, subject to replication timing (which you could also force in Cassandra, requiring the writing to all replicas before the item is truly committed) this would give you the same database layer across multiple servers with WP installed.
Of course, in reality, this would be a decidedly non-trivial change.
WordPress is entirely written around the use of a relational database (and specifically MySQL) so moving the code to work on a NoSQL base would require a good bit of work. It’s good to see that there are suggestions into the WordPress team around this:
- WordPress + Cassandra (annoyingly you cannot comment on this post to express support)
- Suggestion: support MongoDB, HyperTable or other noSQL storage
- No-sql alternative!
I was also pleased to see someone announced their intent to create a NoSQL fork of WordPress over on StackOverflow back in October… but it looks like that’s been put on hold until this coming summer.
I don’t personally have the cycles (nor really the NoSQL background) to work on a modification of WordPress like this, but if someone else is out there working on one, I’d sure be willing to help with some testing or other assistance. I think this would definitely be a great way to enable availability for WordPress sites.
What do you think? What do you do now for a multi-server WordPress install? Do you think a NoSQL alternative would be useful? Which NoSQL database do you think might work best?
P.S. For readers who aren’t aware of what the whole “NoSQL” world is about, this RWW post may be useful: Is the Relational Database Doomed?
No related posts.