During a move to cloud computing, people talk about porting applications to cloud computing providers such as Microsoft and GoGrid. They even build new applications in the clouds on platforms such as Google App Engine and Engine Yard, but they've yet to focus on good application design for use on cloud computing platforms. Perhaps it's time we all put some thought into this.
Thought leadership around application design/architecture for cloud computing typically centers on a particular cloud provider. While that's certainly important, there should be some provider-neutral general application design guidelines. Also, I assert that most of the best practices for designing and creating applications for cloud computing platforms are consistent with, well, good application design practices in general -- in other words, nothing radically different, even though it feels like it should be.
[ Get the no-nonsense explanations and advice you need to take real advantage of cloud computing in the InfoWorld editors' 21-page Cloud Computing Deep Dive PDF special report, featuring an exclusive excerpt from David Linthicum's new book on cloud architecture. | Stay up on the cloud with InfoWorld's Cloud Computing Report newsletter. ]
That said, here are some general guidelines to consider, removing security and governance for now:
Leverage a three-tiered architecture when possible. One of the advantages of cloud computing is that you can place specific application components -- typically the database, application processing, and user interface processing -- on separate providers or, perhaps, a mixture of on-premise and cloud computing-delivered systems. This is possible because each tier is functionally independent from the other. Thus, you can build your user interface using Java within an on-premise system, which talks to an application server on your cloud infrastructure provider -- say, 3Tera -- which in turn talks to a database service on another provider (for example, Amazon.com's new RDS).
If you're thinking about having all three tiers reside on the same platform for simplicity, reliability, and performance, that's fine. However, using this type of architecture will provide you with options down the road, and you may want to mix and match platforms (cloud computing and on-premise) for each tier to maximize performance and minimize costs. In other words, you're designing for architectural agility.