Synchronizing databases in different geographic locations
Friday, December 7, 2007 at 11:32AM
HighScalability Team in General Discussion, database replication, high availability
Our company offers a web service that is provided to users from several different hosting centers across the globe.

The content and functionality at each of the servers is almost exactly the same, and we could have based them all in a single location. However, we chose to distribute the servers geographically to offer our users the best performance, regardless where they might be.

Up until now, the only content on the servers that has had to be synchronized is the server software itself. The features and functionality of our service are being updated regularly, so every week or two we push updates out to all the servers at basically the same time. We use a relatively manual approach to do the updating, but it works fine.

Sometime soon, however, our synchronization needs are going to get a bit more complex.

In particular, we'll soon start offering a feature at our site that will involve a database with content that will change on an almost second-by-second basis, based on user input and activity. For performance reasons, a complete instance of this database will have to be present locally at each of our server locations. At the same time, the content of the database will have to be synchronized across all server locations, so that users get the same database content, regardless of the server they choose to visit.

We have not yet chosen the database that we'll use for this functionality, although we are leaning towards MySql. (We are also considering PostgreSQL.)

So, my question for the assembled experts is: What approach is the best one for us to use to synchronize the database instances across our servers?

Ideally, we'd like a solution that is resilient to a server location becoming unavailable, and we'd also prefer a solution that makes efficient use of bandwidth. (Processing power doesn't cost us a lot; bandwidth, on the other hand, can get expensive.)

FWIW ...

(1) Our servers run Apache and Tomcat on top of Centos.
(2) I've found the following "how to" that suggests an approach involving MySQL that could address our needs: http://capttofu.livejournal.com/1752.html

Thanks!
Article originally appeared on (http://highscalability.com/).
See website for complete article licensing information.