Transcript
Page 1: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Microservice Architecture on AWSusing AWS Lambda and Docker ContainersDanilo Poccia ‒ AWS Technical Evangelist

@danilop

Page 2: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Why Microservices?

Page 3: Microservice Architecture on AWS using AWS Lambda and Docker Containers

http://en.wikipedia.org/wiki/Multitier_architecture

Page 4: Microservice Architecture on AWS using AWS Lambda and Docker Containers

As a Project scales Complexity arises

“Complexity arises when the dependencies among the elements

become important.”

Complex Adaptive Systems: An Introduction to Computational Models of Social Life

Scott E. Page, John H. Miller

Page 5: Microservice Architecture on AWS using AWS Lambda and Docker Containers

How to designsmaller services?

Page 6: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Business Domain+

Loosely Coupled +

Bounded Context

Page 7: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Microservices

Independent Deployment

Page 8: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Microservices

Choose the Right Tool

Page 9: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Microservices

Adopt New Technologies

Page 10: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Microservices

Culture of Automation

Page 11: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Adrian Cockcroft, Technology Fellow at Battery Ventures http://www.slideshare.net/adriancockcroft/goto-berlin

Page 12: Microservice Architecture on AWS using AWS Lambda and Docker Containers

How small is small?

Page 13: Microservice Architecture on AWS using AWS Lambda and Docker Containers

“something that could be rewritten in two weeks”

Page 14: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Two Pizza Teams

Page 15: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Conway’s law

“organizations which design systems ... are constrained to produce designs which

are copies of the communication structures of these organizations”

Melvin Conway, 1968

Page 16: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Architecture

Dev

Ops

Microse

rvice

s

Page 17: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Distributed Systems

Independent ScalabilityAuto Scaling

Page 18: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Security

Least Privileges

Single Sign-On

Confused Deputy Problem (for downstream calls after authentication)

Page 19: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Testing

Automate

Service Tests

End-to-end Tests

Synthetic Monitoring

Page 20: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Monitoring

Expose Service Metrics

Standard Log Format

Correlation ID

From Log collection to Real-Time Event Routing

Amazon CloudWatch Logs Amazon Kinesis

Understand your Trends

Page 21: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Discovery

Self-Describing System

Amazon Route 53 (DNS)

AWS Resource Tagging

Page 22: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Deployment Pipeline

Page 23: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Developer

Developer

Developer

Developer

Developer

Build

Stage #1 Stage #2 … Stage #N Production

Build Build Build Build

Page 24: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Developer

Developer

Developer

Developer

Developer

Build

Stage #1 Stage #2 … Stage #N Production

Build Build Build Build

Bug!

Page 25: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Developer

Developer

Developer

Developer

Developer

Build

Stage #1 Stage #2 … Stage #N Production

Build Build Build Build

Build Build Build Build Build

Build Build Build Build Build

Page 26: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Developer

Developer

Developer

Developer

Developer

Build

Stage #1 Stage #2 … Stage #N Production

Build Build Build Build

Bug!

Build Build Build Build Build

Build Build Build Build Build

Page 27: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Design for Failure

Degrade Functionality

Page 28: Microservice Architecture on AWS using AWS Lambda and Docker Containers

"Jtecul" by own - Own work. Licensed under CC BY-SA 3.0 via Wikimedia Commons

http://commons.wikimedia.org/wiki/File:Jtecul.jpg#/media/File:Jtecul.jpg

Circuit Breakers

Page 29: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Elastic Load Balancing

Health Checks Service

Consumer(s)

Consumer(s)

Page 30: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Amazon Route 53 Private DNS in VPC

Health Checks Service

Consumer(s)

Consumer(s)

Page 31: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Amazon Route 53 Private DNS in VPC

Elastic Load Balancing

Health Checks Service

Consumer(s)

Consumer(s)

Page 32: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Disposable Infrastructure

Immutable Deployments

Page 33: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Why Docker?

Page 34: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Virtual Machine Container

Page 35: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Docker on AWS

AmazonLinux

A supported and maintained Linux

image provided by Amazon Web Services

Amazon EC2 Container Service

Highly scalable, high performance container management service

AWSElastic

BeanstalkFor deploying and

scaling web applications and

services

Page 36: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Amazon EC2 Container Service

Key Components

Container InstancesClusters

Tasks Task Definitions

Amazon EC2 instances

Docker daemon

Amazon ECS agent

Page 37: Microservice Architecture on AWS using AWS Lambda and Docker Containers

https://github.com/aws/amazon-ecs-agent

Page 38: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Amazon EC2 Container Service

Key Components

Container Instances Clusters

Tasks Task Definitions

Regional

Resource pool

Grouping of Container Instances

Start empty, dynamically scalable

Page 39: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Amazon EC2 Container Service

Key Components

Container Instances Clusters Tasks

Task Definitions

Unit of work

Grouping of related Containers

Run on Container Instances

Page 40: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Amazon EC2 Container Service

Key Components

Container Instances Clusters

Tasks Task Definitions

[ { "image": "mysql", "name": "db", "cpu": 10, "memory": 500, …

Page 41: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Tasks are defined via Task Definitions[ { "image": "tutum/wordpress-stackable", "name": "wordpress", "cpu": 10, "memory": 500, "essential": true, "links": [ "db" ], "entryPoint": [ "/bin/sh", "-c" ], "environment": [ … ], "portMappings": [ { "containerPort": 80, "hostPort": 80 } ] },

{ "image": "mysql", "name": "db", "cpu": 10, "memory": 500, "essential": true, "entryPoint": [ "/entrypoint.sh" ], "environment": [ { "name": "MYSQL_ROOT_PASSWORD", "value": "pass" } ], "portMappings": [] }]

Page 42: Microservice Architecture on AWS using AWS Lambda and Docker Containers

[ { "image": "tutum/wordpress-stackable", "name": "wordpress", "cpu": 10, "memory": 500, "essential": true, "links": [ "db" ], "entryPoint": [ "/bin/sh", "-c" ], "environment": [ … ], "portMappings": [ { "containerPort": 80, "hostPort": 80 } ] }, ]

{ "image": "mysql", "name": "db", "cpu": 10, "memory": 500, "essential": true, "entryPoint": [ "/entrypoint.sh" ], "environment": [ { "name": "MYSQL_ROOT_PASSWORD", "value": "pass" } ], "portMappings": [] }]

From Docker Hub

10 CPU Units (1024 is full CPU), 500 Megabytes of Memory

Environment Variables

No external ports exposed

Tasks are defined via Task Definitions

Page 43: Microservice Architecture on AWS using AWS Lambda and Docker Containers

[ { "image": "tutum/wordpress-stackable", "name": "wordpress", "cpu": 10, "memory": 500, "essential": true, "links": [ "db" ], "entryPoint": [ "/bin/sh", "-c" ], "environment": [ … ], "portMappings": [ { "containerPort": 80, "hostPort": 80 } ] },

[ { "image": "mysql", "name": "db", "cpu": 10, "memory": 500, "essential": true, "entryPoint": [ "/entrypoint.sh" ], "environment": [ { "name": "MYSQL_ROOT_PASSWORD", "value": "pass" } ], "portMappings": [] }]

Essential to our TaskDocker link to mysql container

Expose port 80 in container to port 80 on host

Tasks are defined via Task Definitions

Page 44: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Why AWS Lambda?

Page 45: Microservice Architecture on AWS using AWS Lambda and Docker Containers

AWS Lambda

Event driven,fully managed compute

Page 46: Microservice Architecture on AWS using AWS Lambda and Docker Containers

AWS Lambda

Focus on business logic,not infrastructure

Customer uploads code, AWS Lambda handles:

Capacity Scaling

Deployment Fault tolerance

Monitoring Logging

. . .

Page 47: Microservice Architecture on AWS using AWS Lambda and Docker Containers

AWS Lambda

Automatic scaling

Customers pay only for what they use,

no over/under provisioning

Page 48: Microservice Architecture on AWS using AWS Lambda and Docker Containers

AWS Lambda

Fine-grained pricing

Price compute time by 100ms, even short jobs make sense

Low request charge No hourly, daily, or monthly minimums

Free tier

Page 49: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Events come in many different shapes & sizes

S3 event notifications

DynamoDB Streams

Kinesis events Custom events

Page 50: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Amazon EC2 Containers AWS LambdaOn-Premises

Weeks Minutes Seconds Milliseconds

Page 51: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Netflix Architecture

Asgard, Amimator, Hystrix, Cassandra, JVM, Docker, …

On AWS

Page 52: Microservice Architecture on AWS using AWS Lambda and Docker Containers
Page 53: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Hailo Architecture

Hubot, Janky, Jenkins, Go, RabbitMQ, Cassandra,

Docker, …

On AWS

Page 54: Microservice Architecture on AWS using AWS Lambda and Docker Containers
Page 55: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Demo Architecture

Content Management System Prototype

On AWS

Page 56: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Lambda Function

S3 Bucket#1

S3 Bucket#2

DynamoDBTable

ECSTask

ECSCluster

Images +

Medatada

Upload Object + Metadata

Event Notification

Thumbnail

Write Metadata

Run

Schedule

Read Metadata

Write “index.html”

1

2

3

Page 57: Microservice Architecture on AWS using AWS Lambda and Docker Containers

<demo> …

</demo>

Page 58: Microservice Architecture on AWS using AWS Lambda and Docker Containers

Iterate Continuous Improvement

Kaizen

Page 59: Microservice Architecture on AWS using AWS Lambda and Docker Containers

@danilop


Top Related