Months ago, Microsoft announced the introduction of Azure Service Fabric Mesh (SFM), a new easy and salable managed service to deploy your micro services application based on containers.
Many of you are skeptic about Microsoft, a feeling that i have seen through many threads and discussions on the net. In this post, i will try to share my experience with this new service (even if it’s in early phase, public preview) in order to explain the What and Why.
- What is Service fabric Mesh ?
- Why Service Fabric Mesh?
1- What is Service Fabric Mesh ?
For people whom familiar with Service fabric or Azure Service Fabric, Service Fabric Mesh is a managed Service Fabric offer. It’s supposed to deliver the same Azure Service Fabric features, but in a managed way : You don’t create, manage or operate the underlying infrastructure, you only deploy you services directly to Service fabric. Note that SFM does not always provide the same features, but equivalent features, and maybe new features (The features time-line between both offers is not always the same), but the whole concept is the same.
For people new to this area, SFM is a managed (which means that the infrastructure is hidden and managed by Azure) service where you deploy your services (to be more precise, you containers) using a very simple, beautiful and powerful way.
Here the Microsoft overview article of Service Fabric Mesh, when more “commercial” details and sentences are used, but to be honest i believe is this service.
Take my previous blog post, where i explained the Micro Services architecture using simple words, and where i have used a very know example ; The HRA application.
The Application is composed of 4 services. If we map a Service to a container, we will obtain 4 containers. You will ask your developer to create 4 docker images, 1 image for each service. You will ask your developer to upload/push these images to a registry, let’s say Azure Container Registry (an equivalent to Docker Hub).
Then comes Azure Service Fabric Mesh : You have just to prepare an ARM json template (see Azure ARM templates) where you describe you application architecture and configurations : I want to deploy 4 services, each service use the image x, each service should be highly available with at least y instances, and each instances should have N cpu and M GB of RAM. Each service listens internally on port A, B, C… and only the Portal service is published to the internet on port 443.
–> Is not this magic and beautiful ? Believe me, the structure of the ARM template is very easy and understandable, making DevOps very affordable.
Once you deploy this ARM template, within less than 5 minutes, your application is ready to be used.
To conclude : Azure Service Fabric Mesh is the service provided by Azure that combines:
- The Power of Azure Service Fabric
- Managed service (PaaS)
2- Why Service Fabric Mesh ?
Many of you will ask : Why do i have to use SFM, and not use another service like :
- Kubernetes : Azure Kubernetes Service, which provides the power of the Cloud (Azure) and Kubernetes
- Azure Container Service
- Amazon ECS
- Amazon EKS
- Or create your own cluster on top of IaaS (like a swarm cluster)
Even though this is a matter of preference, the following are my arguments about why i love SFM and why it’s my preferred cloud container service (For micro services)
2.1- Fully managed
SFM is fully managed, which means that you define only what matters for you : The containers. SFM will manage all the underlying compute, storage and networking infrastructure. HA is also provided by simple defining up to 2 instances for each container.
2.2- ARM resources
What i like in SFM, is that the components are first class ARM resources, which means that you can manage, deploy and configure them using ARM calls (ARM templates, API, Terraform in the future…), and benefit from RBAC. The following are examples of ARM resources :
- Application : Your SFM application is an ARM resource
- Service : Each “micro service” is an ARM resource
- Network : The network in which you application is deployed in an ARM resource
2.3- Enterprise features
SFM is currently in preview, but according to many discussions and the road map, many enterprise features are/will be added that makes the integration of our applications easier and powerful:
- HA volume: You will be able to attach a Highly Available fast (SSD) volume to a set of containers. This will allow simultaneous and concurrent access to a storage location (local and fast) to your services. You can share anything between your services thanks to this shared volume
- Reliable Collections/Dictionary: If you don’t know what we mean by “Reliable”, then here a small description : Your services can have access to a highly available, near-real-time synchronized collection/dictionary that your application and services can use to store and exchange values. This is very useful for state-full services, where each instance of your service should access an accurate and synced state.
- Example : My service, which is instanced via 2 containers (c1 and c2) must store the status of the user session during its life-time (token for example). With a Reliable Dictionary, you can store the token within a key/value pair object in a dictionary, that your service can get/set anytime. See here for a more explained video
- Services Communication and routing: It’s very easy today for Service 1 to communicate with service 2. No need to use the IP or the hostname. Service1 can communicate with Service2 just by sending requests to htttp://Service2:port/abcd (using the Service name). On the future, SFM will support Envoy which is sort of Reverse Proxy for MicroServices, allowing your services to communicate only with it, and it will orchestrate the communications. It supports many features like routing, circuit braking, authentication, transformation… The native support is a key point to why i like SFM
- Rolling updates : When you have a new version of your Service1, you can deploy it securely. SFM will replace your containers one by one to ensure your service is not affected
- Auto-scale Rules : In the future, SFM will support auto-scale rules in order to support scaling the containers instances automatically.
- Scaling performance : I have seen how SFM scaled from 1 to 500 containers in less than 30s
And more is coming…
NB : This depends on the pricing units, which is not yet disclosed
The pricing of SFM is very simple : You are charged per CPU core and RAM fraction you allocate to your containers.
For my HRA app, i can use the following configuration :
- Portal : 1 cores,2 GB RAM
- Service 1 : 0.5 cores, 1 GB RAM
- Service 2: 0.5 cores, 0.5 GB RAM
- Service 3: 2 cores, 4 GB RAM
I can then deploy x instances per Service, and apply a scaling plan to scale-In ou Out accordingly –> I will pay just what i consume, reducing the entry price
SFM is new player (still a baby) on the container as a Service market, but what differentiates it from other solutions is that is fully managed, and that the management experience is unique (ARM). I have used AKS, and i really like it and would recommend it alongside with SFM (even though AKS stills lack of some management features, and that it’s not a fully managed service).
Check the following links for more information:
- Announcing SFM on \\BUILD
- Deploy a sample SFM Application
- Chacko Daniel (SFM Program Manager) explaining SFM in Video
- Explaining Reliable Collections video (30 minutes)