Today I thought I’d check out session by the CTO of Continuent about their clustering solution. Before heading into the session we checked out Continuent’s booth in the exhibit hall. It certainly sounds like a great product, however the $5,000 per CPU licensing seems a bit Oracle’ish to me.
- A share nothing architecture. Split up into two layers; the controllers and the actual database nodes.
- Low latency.
- Single-copy equivalence for reads.
- Supports load balancing and heterogeneous databases (ie. MySQL and SQL Server sharing the same cluster).
- 100% Java and based on Sequoia.
- They might have an open source version. Will need to check this out.
- Fully transparent (including failover) to the application.
- The controllers act as a proxy to the database. To the applications they appear as the actual database. Below these controllers is where the databases actually sit.
- You need to compile/load your their specific driver, which I think would require a near PEAR DB driver.
- Requests come in where it determines what type of request it is (read vs. write). It then broadcasts writes to all controllers. All requests are executed in identical order. From there it’s sent to the scheduler, which makes sure the underlying databases remain in identical states. These requests can be sent in parrallel to each database server.
- The request controller then aggregates the responses from the databases. If there was an error across all of the systems then it’s a bad query of some sort, if only a single node respondes with an error then that systems is dropped. This can be configured to return a success message once one of the underlying nodes responds with a success.
- Reads are simply load balanced across the underlying nodes to the node with the least number of requests (sounds like LVS’s weighted least connection algorithm).
- Works with MyISAM, InnoDB and heap table types.
- The commits are synchronous.
- Once you have a dump with a starting date you can apply the dump to the new node and then the cluster controllers apply the logs until it’s up to date.
- The open source solution only supports ANSI SQL, doesn’t come with their own group talk protocol (so the clusters can communicate with each other) and doesn’t come with the database-specific dump and load.
- The cluster controllers keep track of the position in the overall sequence of each underlying node and sends reads only to those nodes that are up-to-date with the current position.
- The largest cluster they have are four nodes. Has been tested with as many as 64 nodes and supports tiering.
- Failover between cluster controllers happens in the driver level.
- Stored procedures where a “challenge”. Their approach allows you to tell their controllers what is inside of the stored procedure (what tables it changes, etc.) so the controller knows how to handle each procedure.
After sitting in on the MySQL Clustering tutorial I can honestly say this approach is infinitely better. It supports disk write, InnoDB, MyISAM and, on top of that, allows you to tier the clusters. The only downside I see is that it’s written in Java, but these days I’m not sure if that’s really a downside.