One of the things that I get asked about often is whether or not applications will port to the cloud. “It depends,” is a common answer.
Certainly most modern applications can port over with relative ease, though it’s clear that older, legacy applications with strong affinity to hardware platforms and strong hard integration points will be some of the last to move to cloud environments.
However, I think that a whole new set of applications will be written that will take advantage of some new capabilities of the Cloud. In this post, I hope to catalog some of the changes I hope to see in applications, which include:
- Heterogeneous data access mechanisms: As programmers have become more familiar with relational database management systems (RDMS), this has also become somewhat of a crutch. We’ve embedded structured query language (SQL) in code, used relational databases for a multitude of data storage, and generally defaulted to traditional data access mechanisms. However, this comes at a price of scalability (and performance) even though the ubiquity of SQL offers some portability. If you look at projects such as Cassandra, Volt, Cloud MapReduce, and Hadoop, it’s clear that there’s a definite “right tool for the job” in cloud data architectures. Will relational go away? No, but I do think that most apps will employ a wide range of data access mechanisms and architectures in the emerging cloud world.
- Expectation of failure: I believe that applications will evolve from traditional fault-resistant apps to fault-expectant apps. With cloud, I believe it’s incumbent on developers to expect failure at every level of the stack and to handle that failure gracefully, even in the process of advancing application processing. I think that we’ll come to design apps that are far more forgiving of failure, and hence more likely to run on disparate hardware platforms, as a rule.
- Elastic aware applications: One of the things that excites me about the possibility of writing apps for the cloud is the ability to make service calls to the cloud platform from code. We’ve certainly used load balancers in the past, but I envision more complex business related control. Have an important customer log in? Direct their processing to lightly loaded services. We have just begun to model some of this higher level optimization of services, but the ability to control cloud services from code opens up some interesting avenues in terms of provisioning just the right level of service for business goals.
- Multitenancy: As a rule, I believe that you only get one shot at multitenancy. I think this is an emerging area of application architecture, but if you’re building an app, why not treat the single tenant case as merely the special case of multitenancy? In other words, build it in from the start as you’ll never really get a second chance. It’s a new area, and skills are scarce in the space, but it will pay off dividends, especially for those companies looking to ‘SaaS-ify’ their applications at some point.
What other application paradigms do you see changing in this world of cloud?
Joe Tobolski is Global Lead of Infrastructure at Accenture Technology Labs