deep dive on microservices and amazon ecs
TRANSCRIPT
© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Matt McClean, AWS Solutions Architect Igor Serko, Lead Operations Engineer, Lyst
2016-07-07
Deep Dive on Microservices and Amazon ECS
What to Expect from this Session
Microservices: What are They?
Challenges of Microservices
Microservices on Amazon ECS
Customer story: Lyst
What are Microservices?
What are Microservices?
“is a software architecture style in which complex applications are composed of small, independent
processes communicating with each other using language-agnostic APIs. These services are small, highly
decoupled and focus on doing a small task, facilitating a modular approach to system-building.” - Wikipedia
https://en.wikipedia.org/wiki/Microservices
Monolithic vs. SOA vs. Microservices
SOA Coarse-grained
Microservices Fine-grained
Monolithic Single unit
Order UI User UI Shipping UI
Order Service
User Service
Shipping Service
Data Access
Monolithic Architecture
Monolithic Architecture – Scaling
Order UI User UI Shipping UI
Order Service
User Service
Shipping Service
Microservices Architecture
Order UI User UI UI
Order Service Service Shipping
Service
Order UIOrder UI
User UI UIShipping UI
Order ServiceOrder
ServiceService
ServiceService
ServiceUser
Service
Shipping Service
Microservices Architecture – Scaling
Characteristics of Microservices Architectures
Do one thing well
Independent
Decentralized
Black box
Polyglot
You build it, you run it
Containers are Natural for Services
Simple to model
Any app, any language
Image is the version
Test & deploy same artifact
Stateless servers decrease change risk
What are Microservices Challenges?
Resource and state management
Monitoring
Service discovery
Deployment
What are Microservices Challenges?
Resource and state management
Monitoring
Service discovery
Deployment
Server
Guest OS
Bins/Libs Bins/Libs
App2App1
Managing One Host is Straightforward
Managing a Fleet is Hard
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
AZ 1 AZ 2
AZ 3
Amazon EC2 Container Service
Easily Manage Clusters for Any Scale
Nothing to run
Complete state
Control and monitoring
Scale
Scalable
Flexible Container Placement
Applications
Batch jobs
Multiple schedulers
Designed for use with other AWS services
Elastic Load Balancing Amazon Elastic Block Store Amazon Elastic File System Amazon Virtual Private Cloud AWS Identity and Access Management AWS CloudTrail
Clusters
Regional
Resource pool
Grouping of container instances
Start empty, dynamically scalable
Tasks
Unit of work
Grouping of related containers
Run on container instances
Services
Good for long-running applications
Load balance traffic across containers
Automatically recover unhealthy containers
Discover services
What are Microservices Challenges?
Resource and state management
Monitoring
Service discovery
Deployment
Monitoring with Amazon CloudWatch
Metric data sent to CloudWatch in 1-minute periods and recorded for a period of two weeks Available metrics: CPUReservation, MemoryReservation, CPUUtilization, MemoryUtilizationAvailable dimensions: ClusterName, ServiceName
Monitoring with Amazon CloudWatch
Monitoring with Amazon CloudWatch
Use the CloudWatch monitoring scripts to monitor additional metrics: e.g., disk space
# Edit crontab> crontab -e
# Add command to report disk space utilization to CloudWatch every five minutes*/5 * * * * <path_to>/mon-put-instance-data.pl --disk-space-util --disk-space-used --disk-space-avail --disk-path=/ --from-cron
Monitoring Amazon ECS with Datadog
Monitoring Amazon ECS with Sysdig Cloud
What are Microservices Challenges?
Resource and state management
Monitoring
Service discovery
Deployment
Service Discovery with ECS Services & Route 53
Route 53 private hosted zone Set search path on hosts with DHCP option sets Define ECS services with ELB Create CNAMEs for each ELB
Service Discovery with ECS Services & Route 53
Task
Task TaskTask
ECS service
Application router, e.g.
NGINX
Internal ELB with CNAME, e.g.
api.example.com
Route 53 private zone, e.g.
example.com
Service Discovery with Weaveworks
Overlay network between hosts DNS interface for cross-host container communication Gossip protocol to share grouped updates
Service Discovery with Weaveworks
Service Discovery with Consul
• Distributed Key Value store • Simple interface - DNS or HTTP • Health Checks • Dynamic Configuration Management
Service Discovery with Consul
ECS
Clu
ster
consul-server
ECS Instance
consul-agent
registrator
ECS Instance
Back end 1
Back end 2
consul-agent
registrator
ECS Instance
Front end
ECS
Clu
ster
What are Microservices Challenges?
Resource and state management
Monitoring
Service discovery
Deployment
Scheduling Containers on ECS
Batch jobs
ECS task scheduler Run tasks once
Batch jobs RunTask (random) StartTask (placed)
Long-running apps
ECS service scheduler Health management Scale-up and scale-down Zone-aware Grouped containers
Scheduling Containers: Long-running App
Optionally run your service behind a load balancer. ELB currently supports a fixed relationship between the load balancer port and the container instance port. If a task fails the ELB health check, the task is killed and restarted (until service reaches desired capacity).
Scheduling Containers: Long-running App
Update service’s task definition (rolling update) Specify a deployment configuration for your service: • minimumHealthyPercent: lower limit (as a percentage of
the service's desiredCount) of the number of running tasks that must remain running in a service during a deployment.
• maximumPercent: upper limit (as a percentage of the service's desiredCount) of the number of running tasks that can be running in a service during a deployment.
Scheduling Containers: Long-running app
Deploy using the least space: minimumHealthyPercent = 50%, maximumPercent = 100%
Scheduling Containers: Long-running App
Deploy quickly without reducing service capacity: minimumHealthyPercent = 100%, maximumPercent = 200%
Scheduling Containers: Long-running App
Blue-Green Deployments
• Define two ECS services • Each service is associated w/ ELB • Both ELBs in Route 53 record set
with weighted routing policy, 100% Primary, 0% Secondary
• Deploy to blue or green service and switch weights
TaskTask
Route 53 record set
with weighted routing policy
0%100%
Microservices Development Lifecycle
developers delivery pipelinemicroservices
build pipelinebuild pipeline
build pipeline
build pipelinebuild pipeline
build pipeline
build pipelinebuild pipeline
build pipeline
build pipelinebuild pipeline
build pipeline
build pipelinebuild pipeline
build pipeline
Deployment pipeline for Amazon ECS
https://stelligent.com/2016/06/10/automate-amazon-ec2-container-service-provisioning-and-orchestration-using-cloudformation-and-aws-codepipeline/
ECS CI/CD Partners
Microservices at Lyst
Igor Serko
Lead Operations Engineer
Lyst Ltd
What is Lyst?
Fashion startup
London and New York
Established in 2010
AWS
Python / Django framework
Why Microservices?
Monolith codebase problems
Dependency on ops team
Team growth
Self-sufficient developers
Docker and the 12 factor application
Less stress on platform team
Consistent environments
Moved to Docker early on
Used 12 factor principles
Library dependencies
Splitting the monolith
New projects as microservices
Deployment is an issue
What do we want?
Developers deploy by themselves
Least amount of infrastructure management
Plug and Play
AWS ECS
Released end of 2014
Runs Docker containers
Have to use APIs
Node scaling using EC2 Auto Scaling
ECS Task scaling using Cloudwatch metrics
Empire
Actively developed by Remind
Lightweight
Simple to use
Developer controlled scaling
Provides log streaming
Built on top of AWS ECS
Applications
12 Factor application
Service definition using Procfile
CI builds and pushes Docker images
Production
30 applications
Developers deploying their apps
Service Discovery using ELB
Developers responsible for app health
Faster development cycle
Desired Features
Thank you!
Please remember to rate this session under My Agenda on
awssummit.london
@iserko @matthewmcclean