Is Your Application Built for the Cloud?

February 27, 2014 — 4 Comments

Contrary to popular beliefs, skills that apply to building applications on physical servers apply to building applications on the cloud.

Taking an on-premise application and deploying it on a Azure Virtual Machine should be straight forward. The majority of modifications required, include changing configurations in order to accommodate differences in the Virtual Machine’s configuration.

Going to the cloud on a single Virtual Machine is like crossing the ocean on a row boat. You’ll probably get there, but I can’t guarantee anything.

row boat

Once you’ve deployed your application to the cloud, things get interesting because you have opportunities that allow you to solidify your application.

If you are building your application on the Cloud instead of building your application for the Cloud, you’re doing it wrong!

Taking advantage of services offered on Azure allows you concentrate on creating value for your business. The Azure teams takes care of lots of boring stuff like disaster recovery. To me, building applications for the cloud is equivalent of going from a row boat to a fleet of navy destroyers. (Alright, I may be a little overconfident, but you get the picture.)

going to war

Preparing applications to go web scale isn’t a trivial task. Each application is unique and requires different services. You will need to go over your objectives and build accordingly.

Although the planning phase isn’t trivial, augmenting your applications with cloud services isn’t as complicated as some might think. The Azure teams provide an amazing amount of support materials like hands on labs, tutorials and a rich collection of documentation.

Architectural Considerations

Throughout the planning phase of an application on the cloud there are a few architectural strategies that require some extra attention.

Cloud Design Patterns

While designing or augmenting cloud based applications, the following patterns should be consider. While this list isn’t complete, it should be used as a starting point.

For more patterns, take a look at the resources listed at the bottom of this post.

  • Cache-aside Pattern – This is a common technique that we can use to improve the performance and scalability of a cloud solution by temporarily copying frequently accessed data to fast storage located close to the application.
  • Queue-based Load Leveling Pattern – Cloud solutions are submitted to very unpredictable loads and require protection against their own success. By placing queues between clients and the workers who execute tasks, you are protecting yourself against spikes.
  • Competing Consumers Pattern – Enable multiple Cloud Service instances to retrieve messages from the same source.
  • Compute Resource Consolidation Pattern – Consolidate multiple tasks or operations into a single computational unit (Roles, Virtual Machines, Web Sites).
  • Eventual Consistency – Cloud solutions use data that’s dispersed and duplicated across data stores, managing and maintaining data consistency can become a major bottleneck.
  • Leader Election Pattern – A great way to coordinate actions being performed by a group of Cloud Service instances is to elect a leader that can act as the coordinator. This is extremely useful for maintenance tasks and singleton tasks that need fallbacks.
  • Materialized View Pattern – This has got to be one of my favorite cloud patterns. The solutions’ data may not be formatted in a way that favors our query requirements. In order to optimize our queries, it may be desirable to generate pre-populated views whose shapes correspond with our requirements.
  • Pipes and Filters Pattern – We should strive to decompose complex tasks into a series of discrete elements that can be reused.

Succeeding on the cloud is all about architecture, using the right service for the right reasons. This can be a challenge because cloud platforms are continuously evolving. Azure is currently (Jan 2014) on a 3 week release cycle and it can be quite a challenge for all of us to keep up. Fortunately there are blogs, podcasts and online courses that help us along the way.

Learn More

Recorded Sessions

Online Courses

Books

  1. Moving to the Cloud
  2. Developing for the Cloud
  3. Building Hybrid Apps in the Cloud
  4. Developing Big Data Solutions in the Cloud
  5. Cloud Design Patterns

Podcasts

4 responses to Is Your Application Built for the Cloud?

  1. 

    So it looks like you still find value in these former David Chappell articles.

    http://www.windowsazure.com/en-us/documentation/articles/fundamentals-introduction-to-Windows-Azure/

    I’m responsible for updating them.

    Like

    • 

      I do, and I’m really happy to see the “The Components of Windows Azure” diagram. We need more of these graphical maps to help us understand relationships between the available building blocks.

      It’s also really good at showing us the differences between the different options.

      Like

Trackbacks and Pingbacks:

  1. Tackle Distribution, High Throughput and Low-Latency with Orleans – A “cloud native” Runtime Built for #Azure | Alexandre Brisebois - April 6, 2014

    […] Building for the cloud isn’t like building on the cloud. I know, I keep repeating this all the time but we really need to embrace this as a community. […]

    Like

  2. Microsoft #Azure – Where Should I Start? « Alexandre Brisebois - June 30, 2014

    […] Is your application built for the cloud? […]

    Like

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.