Over the last several months I’ve had number of opportunities to present about Native Cloud Application (NCA) and I think deserves a bit more explanations. I’ll try to give very practical introduction to what stands behind this new type of applications (and something that GridGain is so squarely aimed at).
First critical thing to understand is where we stand today in the cloud computing technology development. Surprisingly, many with whom I talked had real problem pinpointing what exactly is today’s state of the cloud computing…
The answer is, however, is pretty simple. Absolute majority of anything that is related to cloud computing today directed to answering two principle questions:
- How do I build the cloud?
- How do I provision (i.e. deploy) my application on the cloud?
Often, these two questions are the same as clouds internally are mostly about managing VM images and application provisioning is mostly about image management too. There is a growing number of companies providing software for building clouds and provisioning applications on it. And there are pure cloud providers (like Amazon, GoGrid, Joyent, etc.) that eliminate even the need to build the internal (a.k.a. private) clouds in the first place for many potential customers.
Do you see what is missing in this picture? What question is not being answered?
Well, the million dollar question is this: How do I build application for the cloud?
Early cloud technology companies made an implicit assumption that your business applications will just magically run on 100s of computers much the same way as they run on single one. Even more – they will automatically scale… I’m saying that this assumption was implicit as early companies were trying to attack the low hanging fruits like building the clouds and VM image management – and rightly so – these were the necessary technologies. However, this assumption proved to be dead wrong.
Let me ask you a question: how many J2EE-based business applications do you know that will automatically take full advantage of application server instance that just came online on the LAN? What about J2EE-based business application that will spawn a new application server instance or kill the existing one in response to increased or decreased load?
I’ve seen dozens upon dozens of such applications in the real life and I don’t know of a single one that would just full-scale automatically – and very few, if any, would even work in such setup (let alone improve on some metric). That is unless these applications were developed from the get go to expect and utilize such scenario. Now, developed from the “get to” may be too harsh but at the very least these applications must be retrofitted to take advantage of on-demand resource availability enabled by cloud computing.
Some applications that have been developed in the last 2-3 years using clustering capabilities of J2EE application servers (or similar technologies) are better prepared than others as they have some limited capabilities to scale on demand at least for some aspects of their work. Yet still this is largely inadequate.
Native Cloud Application
NCAs have three distinct characteristics. None of them is unique in of its own – but in combination they present a new type of applications:
1. Internally massively parallel
2. Utilize cloud provided services
3. Cross-cloud paradigm
Let me try to spell these out.
Internally Massively Parallel
Being massively parallel internally means employing parallelization of execution and data storing in every aspect of your application. In technical speak think of computational and data grids being bread and butter of your application implementation. Almost everything (that makes sense) is kept in in-memory data grids and almost every aspect of processing is potentially distributed via computational grids.
Utilize Cloud Provided Services
Think of EC2, S3, SimpleDB and many other services that are available at a particular cloud provider. Can you start an instance on EC2 via simple Java call when some threshold is breached? Can you just “put” data into S3 bucket as simply as with local hash map with one line of Java code? With NCAs the answers are always "yes". With NCAs, cloud provider’s services are becoming a simple API available to everyone at any moment. This is no longer something that you have to jump through myriad of WS-* or REST calls to get a handle of – it is a part of the native platform API an every developer would regularly uses.
Different cloud providers provide different type of clouds. Your application will also require different types of clouds. NCAs can seamlessly run across multiple cloud providers and utilize their services in uniform fashion. Drawing upon the previous example you are able to start or stop an instance on EC2 and GoGrid cloud with exactly the same one line of Java code.
We at GridGain
project are working hard on materializing these concepts. Many of them already work. We already provide support for massive internal parallelization and cross-cloud paradigm. In fact, we are the first cloud middleware that enabled this setup. But many more things to come in GridGain 3.0.