Azure Container Service (ACS) provides a way to simplify the creation, configuration, and management of a cluster of virtual machines that are preconfigured to run containerized applications. Using an optimized configuration of popular open-source scheduling and orchestration tools including DC/OS, Docker Swarm, and Kubernetes, ACS enables you to use your existing skills or draw upon a large and growing body of community expertise to deploy and manage container-based applications on Microsoft Azure.
The Azure Container service allows you to take advantage of the enterprise-grade features of Azure while maintaining application portability at the orchestration layer. ACS is primarily focused on distributed applications built using microservices; however, you can start using ACS by containerizing a monolithic application. The application can then be gradually broken down into a more modern, microservices-based implementation. The process of breaking down the monolith into microservices is entirely under the control of application architect/developers; ACS provides that flexibility to the development team.
From a high level, ACS is primarily focused on Azure infrastructure provisioning and orchestration.
Azure Service Fabric, on the other hand, is a distributed systems platform that makes it easy to package, deploy, and manage scalable and reliable microservices and containers. It can run on-premise as well as on any cloud (such as both AWS and Azure). This is a great option for teams who are looking to build an application using a microservice-based architecture on-premise. The flexibility of the Azure Service Fabric platform makes it extremely easy to port an application from on-premise infrastructure to the cloud. Unlike ACS, Service Fabric provides prescriptive guidance on how the application should be written; it actually provides a full-blown programming model. Some of the benefits of using this programming model include:
- The resulting application can either be stateful or stateless.
- ASF applications are more fault-tolerant and easy to scale.
- Multiple ASF-based services can easily form a microservices-based application.
- It gives more control (and ownership!) of the underlying infrastructure to developers.
Regardless of whether Azure Container Services or Azure Service Fabric is selected, as an application architecture evolves and as these microservices are decomposed further and further, they are reduced essentially to an atomic function. This is where Azure Functions comes into the picture.
Azure Functions is a solution for easily running small pieces of code, or “functions,” in the cloud. You can write just the code you need for the problem at hand without worrying about a whole application or the infrastructure to run it. Functions can make development time even more productive, and you can use your development languages of choice, such as C#, F#, Node.js, Java, or PHP. In addition, you pay only for the actual compute time used when your code runs, and Azure will implicitly handle scaling as needed. Azure Functions lets you develop serverless applications on Microsoft Azure.
What are some of the right scenarios for each of these tools?
Azure Container Service: If you are comfortable with a container orchestrator such as Docker Swarm, Kubernetes or DC/OS, you will want to use ACS. If you have a monolithic application, it can be continuously decomposed into smaller services gradually; this approach provides an immediate benefit of portability of such an application. In addition, each of the available container implementations is open sourced, and there is excellent community support around containers.
Azure Service Fabric: If an application must leverage stateful services, then use Azure Service Fabric. Typically, the workloads that can run well and can benefit from Azure Service Fabric orchestration are Web Applications, Real-time data streaming applications, IoT Solutions, etc. The biggest benefit of using ASF is that Service Fabric applications can run on-premise or in any of the available cloud platforms.
Azure Functions: Azure Functions is a solution for easily running small pieces of code, or “functions,” in the cloud. This allows you to focus all development effort on code you need for the problem at hand, without worrying about a whole application or the infrastructure to run it. Azure Functions is a great solution for processing data, integrating systems, working with the internet-of-things (IoT), and building simple APIs and microservices. Consider Functions for tasks like image or order processing, file maintenance, or for any tasks that you want to run on a schedule. Additionally, Azure Functions supports triggers, which are ways to start the execution of your code, and bindings, which are ways to simplify coding for input and output data.
If you have questions on how you can best leverage our experience, would like further examples and/or need help with your Cloud-based environment, check out our blog post on 5 Common Gotchas with Serverless Development in the Enterprise please engage with us via comments on this blog post, or reach out to us at https://www.xtivia.com/contact/ or firstname.lastname@example.org.
You can also continue to explore our Cloud Expertise by checking out the following posts.
Creating a Web Application with Azure App Service
Serverless and PaaS, FaaS, SaaS: Same, Similar or Not Even Close?Troubleshoot HTTP 502.5 Process Failure Error in Azure API App
Azure Cosmos DB Features and Benefits