Just a few of our millions of .NET customers…
• Build and run scalable applications in modern, dynamic environments
• Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this
• Enables loosely coupled systems resilient, manageable, and observable
• Enables engineers to make high-impact changes frequently and predictably with minimal toil.
Netflix Has 600+ services in production. Deploys a hundred times per day.
Uber Has 1,000+ services stored in production. Deploys several thousand
builds each week.
WeChat Has 300+ services in production. Makes almost 1,000 changes per
Key: Speed, Agility, & Scalability
The 12-Factor Application – A methodology to adopt for cloud-native apps
4. Backing Services
5. Build, Release, Run
7. Port Binding
10. Dev/Prod Parity
12. Admin Process
Leveraging containers for Microservices
A container is a standard unit of software that packages up code and
all its dependencies, so the application runs quickly and reliably from
one computing environment to another.
Azure Container Registry (ACR)
Use familiar, open-
source Docker CLI tools
Azure Container Registry
Manage images for all
types of containers
Manage a Docker private registry as a first-class Azure resource
Key Patterns for Microservices
1. API Gateway vs. Direct communication
- API Gateways implementation with Ocelot / Azure API Management
2. Resilient cloud applications
- Retries with exponential backoff plus Circuit breaker policy
Direct communication vs the API Gateway pattern
Direct communication to microservices
(“NO API Gateway usage”)
Using the API Gateway pattern
Service Mesh tools:
• Envoy from Lyft Engineering
• Linkerd from https://buoyant.io
• Traefik from https
For example, Service Fabric Mesh uses Envoy out-of-the-box and “transparently”:
You can also use with Kubernetes but you need to implement/deploy it:
These tools provide features such as:
• Latency and other metrics
• Failure- and latency-aware load balancing
• Distributed tracing
• Protocol upgrade
• Version-aware routing
• Cluster failover, etc
If using those, you don’t need an implementation of retries and circuit breaker as part of every microservice.
Instead, you will be using one as a sidecar pattern or host proxy.
Moving resilient patterns to the platform (Retries/Circuit-Breaker):
• Communication Patterns
• Asynchronous messaging patterns
• Event driven architecture
• Data Management
• Deployment patterns
• Cross Cutting Concerns
• Externalized Configurations
• Service Discovery
Containers offer a logical packaging mechanism in which applications can be abstracted from the environment in which they actually run.
This decoupling allows container-based applications to be deployed easily and consistently, regardless of the target environment
Containerization provides a clean separation of concerns – isolation.
Developers focus on their application logic and dependencies; IT Ops focus on deployment and management.
Efficiently manage a single registry replicated across multiple regions. Geo-replication enables you to manage global deployments as one entity to simplify operations and management.
Reduce the network latency and eliminate any ingress/egress charges by keeping your registry in the same data center as your deployments. ACR gives you local, network-close storage of your container images and full control
over naming and organization of the images.