Create long-running applications

In order to create long-running applications both reliability and availability must be considered. Simply moving an application to the cloud does not guarantee the service levels required. Cloud native applications, i.e. those developed to run in Azure are inherently more suited to the cloud. SLAs associated with Azure services should be understood when designing a service.

Multi-instancing is often a requirement to achieve the desired availability. In order to support multi-instancing two approaches are homogeneous instances and primary-secondary instances.

Considerations when designing for system-level availability:

  • Avoiding Single Points of Failure (SPOF)
  • Alternative Services
  • Cross-Region Deployments

Considerations when designing for system reliability:

  • Distribute service across Azure Update Domains and Fault Domains
  • Handle transient errors with retries (Azure SDK supports error handling)
  • Loose coupling of service components avoids system wide failures due to a single component failure, architectures which address this include SOA, Microservices and Message-Based
  • Health Monitoring (with Azure Application Insights or 3rd party solutions including New Relic and AppDynamics)

Considerations when designing for scale:

  • Scale up (limited) vs. Scale out
  • Scheduled scaling – for predictable workload changes
  • Reactive scaling – for unpredictable or unexpected workload changes
  • Container technologies can support sub-second deployment of instances
  • Workload partitioning is an alternative to load balancing for distribution of workloads based on dynamic or static partitioning (where distribution is predetermined)

The Azure Autoscale service supports scheduled and reactive scaling of VMs, Cloud Services and Web Apps.

Cloud Services is an Azure PaaS service for building scalable n-Tiered applications. Cloud Services are made up of one or more roles of the following types:

  • Worker Role – A long running process, e.g. listen to a job queue the Web Role sends requests to
  • Web Role – ASP.NET project which delivers the application presentation layer

Cloud Services expose services via Endpoints:

  • Input Endpoint – External access to the service through the Azure balancer
  • Internal Endpoint – Communication between role instances
  • Instance Input Endpoint – Access specific instances on a different port

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s