All of these issues means that building for the cloud requires new thinking about the system architecture and an emphasis on leveraging massive scale, Tucker says. "There's no magic here. [Building scalable applications for the cloud] still requires solid engineering and design," he says.
But the cloud platforms can help. In some cases, such as with Google App Engine, scaling is automatically implemented for a restricted set of applications, while in other cases, design patterns can be used to horizontally scale applications, Tucker says. And Amazon.com Elastic Compute Cloud (EC2) provides Multiple Availability Zones, so developers can distribute an application across multiple locations. "Previously, only very large companies had the scale to do this," says spokeswoman Kay Kinton. And a capability called Elastic IP in EC2 allows for rapid remapping of an Internet address from a failed instance to a working one.
Databases aren't the same in the cloud
The uses of abstraction and statelessness also have database implications. For example, Azure presents developers with a different perspective on databases than the standard relational model, said Ben Day, president of Benjamin Day Consulting. The Azure storage engine does not use a standard relational database, so "a lot of the stuff you would do if you were developing a standard app using a standard relational database just doesn't make a lot of sense anymore," Days says. He cites as an example the relational database concept of stored procedures, in which query logic is close to the actual data itself. This is no longer applicable in the Azure cloud.
"The problem is with Azure is there's no guarantee that the data that you're going for lives in any particular location or datacenter or any particular device," Day says. "You end up writing basically SQL queries against the store because the stored procedures aren't relevant anymore," Day stresses. Plus, the Azure storage engine is different than the SQL Data Services cloud-based version of SQL Server planned by Microsoft, he notes, so developers need to be careful as to which they're writing for. As an example, Azure stores a 1MB file as a blob, unlike SQL Server, which stores it in a table.
[ Microsoft is accelerating use of relational capabilities in Azure, while still offering a table storage option for non-relational data storage. ]
It's not just Azure that has these database differences. For example, "Google App Engine abstracts away not only the actual physical hardware but any concept of a machine," says Pete Koomen, Google's App Engine product manager. That means a developer uploads code, then Google manages it and splits up the database. "Because we are automating much more of the process, there's a certain model that developers have to follow" that differs from a traditional SQL model, Koomen says.