cloud architecture: patterns and best practices

48
Sascha Möllering | zanox AG Cloud Architecture

Upload: sascha-moellering

Post on 08-Jul-2015

1.309 views

Category:

Technology


5 download

DESCRIPTION

This talk shows some of the patterns and best practices if you start using the cloud.

TRANSCRIPT

Page 1: Cloud Architecture: Patterns and Best Practices

Sascha Möllering | zanox AG

Cloud Architecture

Page 2: Cloud Architecture: Patterns and Best Practices

Sascha Möllering

[email protected]

Lead Engineer / DevOps Hipster

zanox AG

http://www.der-maschinenstuermer.de/

@sascha242

About me

Page 3: Cloud Architecture: Patterns and Best Practices

About me

Java Magazin 11.14

Architektur im Kontext der Cloud: Patterns und

Best Practices

AWS Virtual Cloud Summit

Continuous delivery in AWS using Docker

http://aws-summit.de/

Entwickler Spezial: Docker

Über den Wolken: Ein Erfahrungsbericht zum

Docker-Einsatz in der Amazon Cloud

Page 4: Cloud Architecture: Patterns and Best Practices

Agenda

• AWS Overview

• Creating a cloud service

• Real World example

• Cloud deployment

• Q&A

Page 5: Cloud Architecture: Patterns and Best Practices

How can we scale?

Page 6: Cloud Architecture: Patterns and Best Practices

How can we scale?

Page 7: Cloud Architecture: Patterns and Best Practices

AWS Overview

RegionUS-WEST (N. California) EU-WEST (Ireland)

ASIA PAC

(Tokyo)

ASIA PAC

(Singapore)

US-WEST (Oregon)

SOUTH AMERICA (Sao

Paulo)

US-EAST (Virginia)

GOV CLOUD

ASIA PAC

(Sydney)

EU-CENTRAL (Frankfurt)

Page 8: Cloud Architecture: Patterns and Best Practices

AWS Overview

Availability

Zone

Page 9: Cloud Architecture: Patterns and Best Practices

AWS Overview

EC2: Resizable compute capacity

AutoScaling: scale up or down

Route 53: Domain Name System

ELB: Load Balancing

Elastic IP: Static IP address

Page 10: Cloud Architecture: Patterns and Best Practices

AWS Overview

RDS: Managed database service

DynamoDB: NoSQL implementation

Redshift: data warehouse solution

ElastiCache: Managed cache

Kinesis: Service for streaming data

Page 11: Cloud Architecture: Patterns and Best Practices

AWS Overview

S3: Highly-scalable object storage

CloudFront: CDN implementation

CloudWatch: Monitoring service

IAM: Identity and Access Management

EMR: Managed Hadoop

Page 12: Cloud Architecture: Patterns and Best Practices

Starting point

• How can we leverage the Cloud?

• Our application:

– Simple Java based web application

– One application

– One database

– Runs in our own DC

Page 13: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

• Initial setup:

– Route53 for DNS

– One Elastic IP (static IPs for the Cloud)

– One EC2 instance

• Web Application

• Database

– One AZ

Page 14: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

Availability Zone

Page 15: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

• Simple approach to scale:

– More RAM

– More CPU power

– More IOPS

– Different EC2 instance type

• Approach will hit a barrier

Page 16: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

• Problems:

– No failover

– No redundancy

– Database and application on one instance

– Does not scale very well

Page 17: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

• Separate Web Application from DB

– One EC2 instance for the Web Application

– One EC2 instance for the DB

– Or: Managed DB service (RDS)

• One AZ

Page 18: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

Availability Zone

Database

Page 19: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

• Problems:

– No failover

– No redundancy

– Does still not scale very well

Page 20: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

• Add an ELB

• Add EC2 instance for Web Application

• Different AZs

• Standby DB instance

– Multi AZ setup in RDS

Page 21: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

Page 22: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

Availability Zone

Database

Availability Zone

Database

Page 23: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

• Problems:

– Still limited scaling capabilities

– If one EC2 instance crashes, 50% less

capability

Page 24: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

• Add additional EC2 instances

• Add read replicas in RDS

Page 25: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

Availability Zone

Database

Availability Zone

Database

Page 26: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

• Problems:

– Naive implementation

– Does not leverage AWS services

– Limited scaling

– Can be quite expensive

Page 27: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

• Refactoring

• Introduce caches to take load from DB

• Use S3 and CloudFront to ship static

content

• Store session data in DynamoDB

• Add Autoscaling

Page 28: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

• Autoscaling

– Automatic resizing of compute clusters

based on demand

– Integrated to Amazon CloudWatch

– Maximum and minimum pool sizes

– Autoscaling policies triggered by

CloudWatch alarms

Page 29: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

Availability Zone

Auto Scaling

group

Page 30: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

• Started with a simple web application

• Added several Amazon services

• Managed to shift load from application

to services

• Added caches and CDN

• Added Autoscaling

Page 31: Cloud Architecture: Patterns and Best Practices

Creating a cloud service

• Next steps:

– SOA

– Loose coupling: decouple interactions

– Amazon services, don‘t reinvent the wheel

– Database federation

– Database sharding

Page 32: Cloud Architecture: Patterns and Best Practices

Real world example

• Elastic architecture that grows and

shrinks

• Multiple AZs

• Use case: streaming data

• Decoupling using Kinesis

• IAM Roles for managing credentials

• CloudWatch for monitoring

Page 33: Cloud Architecture: Patterns and Best Practices

Internet

Auto Scaling group

Auto Scaling group

Availability Zone

Availability Zone

Architecture

Page 34: Cloud Architecture: Patterns and Best Practices

Architecture

Page 35: Cloud Architecture: Patterns and Best Practices

“Vert.x is a lightweight, high performance application

platform for the JVM that's designed for modern

mobile, web, and enterprise applications.”

Vert.x

Page 36: Cloud Architecture: Patterns and Best Practices

Architecture

• Main framework Vert.x

• mod-kinesis (Kinesis-Adapter for Vert.x)

• AWS Java SDK

• IAM roles for Amazon EC2 instances

• Coda Hale metrics and CloudWatch reporter

• Jedis (Redis client for Java)

• …

Page 37: Cloud Architecture: Patterns and Best Practices

Deployment

WorkstationGitHub

Jenkins

Python/Fabric

Nexus

Datacenter

Artefakt

Page 38: Cloud Architecture: Patterns and Best Practices
Page 39: Cloud Architecture: Patterns and Best Practices

Deployment

EC2 instance with Docker

registry (port 5000)

S3 bucket to store

Docker images

Page 40: Cloud Architecture: Patterns and Best Practices

Deployment

Amazon Cloud

WorkstationGitHub

Jenkins

Python/Boto

Docker Image

Docker Registry S3 bucket with

Docker Images

Page 41: Cloud Architecture: Patterns and Best Practices

Deployment

Page 42: Cloud Architecture: Patterns and Best Practices

Deployment

Page 43: Cloud Architecture: Patterns and Best Practices

Deployment

Page 44: Cloud Architecture: Patterns and Best Practices

EC2 instances and ELB

python start_docker_instance.py \

-r <myregistry>:5000 \

-i kinesis-producer \

-t 95 \

-q 2 \

-s quality \

-d '-d -p 8080:8080'

https://github.com/SaschaMoellering/aws-docker-scripts

Page 45: Cloud Architecture: Patterns and Best Practices

EC2 instances and ELB

python start_elb.py \

-r <myregistry>:5000 \

-i kinesis-producer \

-t 95 \

-s quality \

-d '-d -p 8080:8080'

https://github.com/SaschaMoellering/aws-docker-scripts

Page 46: Cloud Architecture: Patterns and Best Practices

EC2 instances and ELB

Page 47: Cloud Architecture: Patterns and Best Practices

EC2 instances and ELB

Page 48: Cloud Architecture: Patterns and Best Practices