Cloud computing, which involves accessing applications and services on hosted servers over the Internet, certainly has become the hot tech trend for 2009. The volume of cloud applications can only be expected to grow, and this fact brings both new benefits and responsibilities for developers.
While cloud deployments can save developers from having to deal with infrastructure issues, there are some new nuances they must deal with as well. These include changes in how developers work with databases, an emphasis on stateless applications, and dealing with different frameworks.
Statelessness and server failures are givens in the cloud
"The big change now is that software itself is able to provision the resources that the application needs," says Lew Tucker, Sun's CTO of cloud computing. Using APIs, developers writing applications for the cloud can design them so that they request more resources from the cloud provider.
Developers need to design for redundancy and acknowledge that commodity machines are being leveraged in the cloud, says Amitabh Srivistava, Microsoft's corporate vice president for the Windows Azure cloud platform. "It's a guarantee the machines are going to fail, so you have to design your application that you're running in the cloud for redundancy," he says.
Building for the cloud requires designing stateless applications, Srivistava says. "If you have state, then that becomes a problem. The model in the cloud is if something dies, you kill it and reincarnate it" by designing stateless applications, he notes. With the cloud, "there's no concept of a local disk. There's no registry, for example. But that's all encapsulated by being a stateless app."
Sun's Tucker notes that "the easiest kind of applications are stateless. However, the interesting applications always have some kind of state, which is why we still need databases or object [stores] to store some state" for maintaining items such as user information, Tucker says. But parts of the applications that need to scale, such as the Web front end, are stateless in the cloud.
Another cloud difference: Different parts of an application might be in many places in the cloud. For example, a presentation layer might be on Facebook, storage could be on Amazon.com's S3, and application logic could run somewhere else entirely, Tucker says. "Before, people would just develop the entire app on their own servers," Tucker says.
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.