Microservices Application Architecture: One Customer’s Journey from Azure Cloud Services to Service Fabric
In this post, Senior Application Development Consultant, Greg Roe, shares insights from a cloud transformation using Azure Cloud Services and ultimately, Service Fabric.
I love helping customer’s optimize their Applications using Microsoft technologies such as Azure. In doing so, our team helps customers proactively vet architectural decisions, save development costs, and go to market faster.
As an example, one customer I worked with had a long history of selling commercial and consumer hardware devices for homes and building use. They were in the process of transforming their business from hardware to a software driven, Azure IoT Cloud Services solution.
They began their journey to the cloud a few years ago by developing applications to leverage the best Platform as a Service (PaaS) offering available on Azure at the time, Cloud Services. They recognized the value to be gained by writing a cloud first application that benefited from built-in load balancing, managed networking, managed infrastructure, simple scale out, and automatic patching. Their cost and resourcing concerns could now be placed more on their own code rather than procurement, setup, and maintenance of hardware and operating systems. The end result of their move to managed cloud infrastructure was decreased cost, increased scalability, and better resiliency in their application.
However, as their solution grew so did the number of Cloud Services and the complexity of their application. Their deployment and consumption cost went up.
We helped our customer migrate from Cloud Services to Microservices using Azure Service Fabric. In doing so, they realized a number of benefits not least of which was reducing their costs by an order of magnitude by increasing application density on the underlying infrastructure. In other words, by moving to Service Fabric, they could pack 20 applications that each previously occupied a minimum two node (for fault tolerance, most used more) Cloud Service onto a single 5 node Service Fabric cluster. The number of underlying VMs required for the application dropped from nearly 50 down to 5.
Azure Service Fabric is a distributed systems platform that makes it easy to package, deploy, and manage scalable, reliable Microservices. Service Fabric also addresses the significant challenges in developing and managing cloud applications. Developers and administrators can avoid complex infrastructure problems and focus on implementing mission-critical, demanding workloads that are scalable, reliable, and manageable. Service Fabric represents the next-generation middleware platform for building and managing these enterprise-class, tier-1, cloud-scale applications.
Azure Service Fabric
By using Service Fabric, you can:
- Develop massively scalable applications that are self-healing.
- Develop applications that are composed of microservices by using the Service Fabric programming model. Or, you can simply host guest executables and other application frameworks of your choice, such as ASP.NET Core or Node.js.
- Develop highly reliable stateless and stateful microservices.
- Deploy and orchestrate containers that include Windows containers and Docker containers across a cluster. These containers can contain guest executables or reliable stateless and stateful microservices. In either case, you get mapping from container port to host port, container discoverability, and automated failover.
- Simplify the design of your application by using stateful microservices in place of caches and queues.
- Deploy to Azure or to on-premises datacenters that run Windows or Linux with zero code changes. Write once, and then deploy anywhere to any Service Fabric cluster.
- Develop with a “datacenter on your machine” approach. The local development environment is the same code that runs in the Azure datacenters.
- Deploy applications in seconds.
- Deploy applications at higher density than virtual machines, deploying hundreds or thousands of applications per machine.
- Deploy different versions of the same application side by side, and upgrade each application independently.
- Manage the lifecycle of your stateful applications without any downtime, including breaking and nonbreaking upgrades.
- Manage applications by using .NET APIs, Java (Linux), PowerShell, Azure command-line interface (Linux), or REST interface.
- Upgrade and patch microservices within applications independently.
- Monitor and diagnose the health of your applications and set policies for performing automatic repairs.
- Scale out or scale in the number of nodes in a cluster, and scale up or scale down the size of each node. As you scale nodes, your applications automatically scale and are distributed according to the available resources.
- Watch the self-healing resource balancer orchestrate the redistribution of applications across the cluster. Service Fabric recovers from failures and optimizes the distribution of load based on available resources.
- Use the fault analysis service to perform chaos testing on your service to find issues and failures before running in production.
Premier Support for Developers support model: How we did it together
Premier Support for Developers provides a range of services to help customers build better software. These include, but are not limited to:
- Architectural Design Guidance
- Help navigating the Microsoft Technology Stack to make sound, supportable decisions
- Proof of Concept (Examples and Support)
- Advisory Services via a team of distinguished Subject Matter Experts (many of which you can learn more about, here on our blog)
- Collaboration and advocacy between customers and our Product Groups
- 24×7 Reactive Support for mission critical applications
- Technology Training (online, instructor led, and more)
- Proactive Communications to drive awareness of announcements or events that could impact your business
- Long Term Trusted Advisor and Lifecycle Relationships
Premier Support for Developers provides strategic technology guidance, critical support coverage, and a range of essential services to help teams optimize development lifecycles and improve software quality. Contact your Application Development Manager (ADM) or email us to learn more about what we can do for you.