Deep Dive on Microservices and Amazon ECS

Preview:

Citation preview

© 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

Recommended