After visiting PDC 2009 I posted a short blog entry on the upcoming changes to the computing world as a result of cloud adaptation. As I am trying to understand the impact of these changes to software architecture, new patterns have started to emerge. There are four concerns that are repeated in a series of discussions; architecting for cost, integration, security, and data storage.
Architecting for Cost
Having access to thousands of computers in the cloud to run your application is the most cost efficient way of serving your application to your clients, right? Think again. This enormous elasticity comes at a price. Prior to the cloud architects were not extremely cautious about the intranet bandwidth consumed by the system architecture as long as the systems performed. In terms of communication costs the only real variable cost has always been the public traffic bandwidth in communicating with your application’s end users.
With the introduction of cloud, now your application incurs usage charges as soon as it tries to contact one of your N-tiers in your system. Result? As an architect you really need to make sure that you are designing systems that transfer just the minimum required information to complete the task.
What about hardware? It is relatively simple to scale your application in the cloud, just spin up another instance of a virtual machine and all of a sudden the system capacity doubles. Well, not really. If the systems are not designed properly, spinning up another server can significantly increase the internal communication traffic and result in a tremendous spike in your monthly costs. Again, without the proper supporting structure, not well thought architectures will not be compensated for by computing elasticity. In contrast, a carefully designed system will be able to almost double its capacity within a matter of minutes without breaking the bank.
All this can be summed up as: Up in the clouds, bad software architecture will still work and scale at a very high cost to your company’s bottom line.
Integration
If you designed any software systems in the past 30 years or so, most likely you are aware of the never ending integration challenges (there are even entire master’s degrees dedicated to this field). How does this change in the cloud? Firstly, the standards and protocols are converging into just a handful. There are some true and tested patterns. One thing however that stands out is the SLA of your application when you rely on a handful of other services running in the cloud. You need very powerful monitoring/instrumentation solutions such that you can proactively take measures to gracefully degrade your application by turning off features, throttling the requests or creating entirely asynchronous business workflows that can dissipate the load to 3rd parties over time. This is easier than it sounds, it might force a lot of businesses to re-think their process flows.
Security/Privacy
Your data usually travels with your application. Most cloud platforms also provide services to host the data in structured or unstructured way in the cloud. For obvious reasons you should definitely leverage the DB features that your platform of choice offers. However, depending on the vertical you are in there are some real obstacles to moving your application to the cloud. PCI, HIPAA and other regulatory certifications are not yet available for cloud platforms. If you do not plan ahead, you might be forced into using a temporary workaround solution that ships off parts of your sensitive data to specific traditional data centers owned by ISPs that are certified. This negatively impacts your solution from a performance point of view and adds to the overall complexity of the solution. If you are dealing with financial or health data, check before you design your cloud solution.
Data Storage
The cloud offers great facilities for computing but the data side of it has been lagging behind. The most prominent solution is to resort to a key-value-pair like database that scales and replicates across many machines. The new SQL Azure platform tries to re-use the existing SQL Server knowledge of people and offer the same experience in the cloud. Although it is promising it comes with some constraints. So as an architect, you must think very carefully about the implications of migrating your application data to the cloud and how it would change your architecture. One interesting example is how do you ensure atomicity and isolation across many nodes without having the RDBMS facilities that come out of the box today?
If you can answer all these questions prior to your move to the cloud, you are 80% there
