Cloud computing is about scaling out all your application tiers, from web application
to the database layer. In fact, the whole promise of Azure is
to pay for just what you need. You need more IIS servers? No problemo... just spin another web server. You expect
to double your storage needs for Azure Tables? No problemo; you are covered there too... just pay for your storage needs.
But what about the database tier,
SQL Azure? How do you add new databases easily, and transparently, so that your application simply uses more of
SQL Azure if its needs to? Without changing a single line of code? And what if you need
to scale back down? Welcome
to the world of database scalability.
There are many terms that describe database scalability, including data federation, multitenant designs, and even NoSQL depending on the technical solution you are implementing. Because
SQL Azure is a transactional database system, NoSQL is not really an option. However data federation and multitenant designs offer some very interesting scalability options that are worth considering. Data federation, a feature of
SQL Azure that will be offered in the future, offers very interesting capabilities available natively on the
SQL Azure platform. More
to come in a few weeks...
Multitenant designs on the other hand are design practices and technologies designed
to help you reach flexible scalability options not available otherwise. The first incarnation of such a method was made available on CodePlex as an open source project (http://enzosqlshard.codeplex.com). This project was an attempt
to provide a sharding library for educational purposes. All that sounds really cool... and really esoteric... almost a form of database "voodoo"...
However after being on multiple Azure projects I am starting
to see a real need. Customers want
to be able
to free themselves from the database tier, so that if they have 10 new customers tomorrow, all they need
to do is add 2 more
SQL Azure instances. It's that simple.
How you achieve this, and suggested application design guidelines, are available in a white paper I just published. The white paper offers two primary sections. The first section describes the business and technical problem at hand, and how
to classify it according
to specific design patterns. For example, I discuss compressed shards through schema separation. The second section offers a method for addressing the needs of a multitenant design using a new library, the big bother of the codeplex project mentioned previously (that I created earlier this year), complete with management interface and such. A Beta of this platform will be made available within weeks; as soon as the documentation will be ready.
I would like
to ask you
to drop me a quick email at
[email protected] if you are going
to download the white paper. It's not required, but it would help me get in touch with you for feedback. You can download this white paper here: http://www.bluesyntax.net/files/EnzoFramework.pdf .
Thank you, and I am looking for feedback, thoughts and implementation opportunities.