running microservices on amazon ecs - aws april 2016 webinar series
Post on 13-Jan-2017
1.654 Views
Preview:
TRANSCRIPT
© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Pierre Steckmeyer, Solutions Architect
April 28th, 2016
Running Microservices on Amazon ECS
What to Expect from this Session
Microservices: What are They?
Challenges of Microservices
Microservices on Amazon ECS
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
SOACoarse-grained
MicroservicesFine-grained
MonolithicSingle 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
What are Microservices challenges?
Resource and State Management
Data Management
Monitoring
Service Discovery
Deployment
What are Microservices challenges?
Resource and State Management
Data Management
Monitoring
Service Discovery
Deployment
Amazon EC2 Container Service
Containers are natural for services
Simple to modelAny app, any languageImage is the versionTest & deploy same artifactStateless servers decrease change risk
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
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 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
Data 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, MemoryUtilization
Available dimensions: ClusterName, ServiceName
Monitoring with Amazon CloudWatch
Monitoring with Amazon CloudWatch
Use the Amazon 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
Data Management
Monitoring
Service Discovery
Deployment
Service Discovery with ECS Services & Route 53
Route 53 private hosted zoneSet search path on hosts with DHCP option setsDefine ECS services with ELBCreate 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
DNS interface for cross-host container communicationGossip protocol to share grouped updatesOverlay network between hosts
Service Discovery with Weaveworks
Service Discovery and Configuration Management with Consul
Three main components:• Consul agent - Runs on each node, responsible for checking the
health of the services and of the node itself.• One or more Consul servers - Store and replicate data, leader
elected using the Raft consensus algorithm• Registrator agent - Automatically register/deregisters services
based on published ports and metadata from the container environment variables defined in the ECS task definition
Service Discovery and Configuration Management with Consul
EC
S C
lust
er
consul-agent
registrator
ECS Instance
Back end 1
Back end 2
consul-agent
registrator
ECS Instance
Front end
EC
S C
lust
er
consul-server
ECS Instance
What are Microservices challenges?
Resource and State Management
Data Management
Monitoring
Service Discovery
Deployment
Scheduling Containers on ECS
Batch Jobs
ECS Task schedulerRun tasks once
Batch jobsRunTask (random) StartTask (placed)
Long-Running Apps
ECS Service schedulerHealth managementScale-up and scale-downAZ awareGrouped 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%
microservicesdevelopers delivery pipeline
Microservices development lifecycle
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
Continuous Delivery to ECS with Jenkins
4. Push image to Docker registry
2. Build image from sources 3. Run test on image
1. Code push triggers build
5. Update Service
6. Pull image
4. Push image to Docker registry
Continuous Delivery to ECS with Jenkins
Easy DeploymentDevelopers – Merge into master, done!
Jenkins Build StepsTrigger via Webhooks, Monitoring, LambdaBuild Docker image via Build and Publish plugin Push Docker image into RegistryRegister Updated Job with ECS API
ECS CI/CD Partners
Continuous Delivery to ECS with Shippable
Demo
Demo
TaskTask
Task
Thank you!
top related