One of the key considerations for cloud computing is selecting the right technology to meet customers and system requirements.
What is Containerization?
Containerization is an approach to software development in which an application or service, its dependencies, and its configuration (abstracted as deployment manifest files) are packaged together as a container image. The containerized application can be tested as a unit and deployed as a container image instance to the host operating system (OS).
One benefit of containerization is scalability. You can scale out quickly by creating new containers for short-term tasks. From an application point of view, instantiating an image (creating a container) is similar to instantiating a process like a service or a web app.
Cloud platforms support scalability, it is really easy to manage dynamic workloads with automatic scaling. Containers is fundamental if you need scalability in your solution.
Azure Technologies for Containers
A quick overview of the various options to support containers.
| Simplify the deployment, management, and operations of Kubernetes | Azure Kubernetes Service (AKS) |
| Quickly create powerful cloud apps for web and mobile | App Service |
| Easily run containers on Azure without managing servers | Container Instances |
| Develop microservices and orchestrate containers on Windows or Linux | Service Fabric |
| Fully managed microservice development with built-in service discovery for Java Spring Boot | Azure Spring Cloud |
| Store and manage container images across all types of Azure deployments | Container Registry |
Comparing the Capabilities
Other than Container Registry which is used to manage container images, the rest support similar capabilities. How do you select the appropriate service for your solution? Let us look at the different capabilities of these technologies.
| Capabilities | Kubernetes Service | Spring Cloud | Service Fabric | App Service | Container Instances |
| Service Type | CaaS | PaaS | PaaS | PaaS | PaaS |
| Azure Costs | $$$ | $$$ | $$ | $$$ | $ |
| Auto-Scaling | Cluster Autoscaler | Autoscale | Autoscaling Policies | Autoscale Settings | Yes |
| Load-Balancing | Load Balancer | Traffic Manager, Front Door, App Gateway | Cluster Balancing | Traffic Manager, Front Door | No |
| Multi-Region | Yes | Yes | Yes | Yes | No |
| Azure AD integration | Yes | Yes | Yes | Yes | Yes |
| On-Premise | Yes | No | Yes | No | No |
Selecting a Compute Service
If you are comparing containerized services against other compute services, there is a useful decision flowchart here to help you get started.
Most Flexible
Azure Kubernetes Service is the most flexible cloud native service, and provides a lot of options and capabilities for your use. It is most suitable for complex projects.
Easiest to Use
Azure Container Instances is a low cost full-fledged orchestration service that enables you to quickly start and build a simple project.
Large-Scale Mission Critical App
Azure Service Fabric can scale up to thousands of machines, and is suitable for low latency high throughput workloads. It provides a fully supported Microsoft technology stack for .NET integration.
Global Web App
Azure App Service is a managed service that can quickly support multi-region websites and containerized backend. It is server-less, meaning there are no servers to maintain, which is useful for cutting down operational complexities.
Spring Boot on Cloud
Azure Spring Cloud is a managed service that can support Java-based Spring Boot apps with no code changes. If you already have a workload based on Java Spring Boot, it is easiest to migrate to Azure Spring Cloud. As a PaaS, Microsoft will manage the service, giving you time to focus on your applications and business.
Given that not all the capabilities are compared and there would be continuous improvement on the services, I hope this serves as a quick start for designing the cloud architecture of your solution.