cloud architecture: patterns and best practices

Post on 08-Jul-2015

1.309 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Sascha Möllering | zanox AG

Cloud Architecture

Sascha Möllering

sascha.moellering@zanox.com

Lead Engineer / DevOps Hipster

zanox AG

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

@sascha242

About me

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

Agenda

• AWS Overview

• Creating a cloud service

• Real World example

• Cloud deployment

• Q&A

How can we scale?

How can we scale?

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)

AWS Overview

Availability

Zone

AWS Overview

EC2: Resizable compute capacity

AutoScaling: scale up or down

Route 53: Domain Name System

ELB: Load Balancing

Elastic IP: Static IP address

AWS Overview

RDS: Managed database service

DynamoDB: NoSQL implementation

Redshift: data warehouse solution

ElastiCache: Managed cache

Kinesis: Service for streaming data

AWS Overview

S3: Highly-scalable object storage

CloudFront: CDN implementation

CloudWatch: Monitoring service

IAM: Identity and Access Management

EMR: Managed Hadoop

Starting point

• How can we leverage the Cloud?

• Our application:

– Simple Java based web application

– One application

– One database

– Runs in our own DC

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

Creating a cloud service

Availability Zone

Creating a cloud service

• Simple approach to scale:

– More RAM

– More CPU power

– More IOPS

– Different EC2 instance type

• Approach will hit a barrier

Creating a cloud service

• Problems:

– No failover

– No redundancy

– Database and application on one instance

– Does not scale very well

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

Creating a cloud service

Availability Zone

Database

Creating a cloud service

• Problems:

– No failover

– No redundancy

– Does still not scale very well

Creating a cloud service

• Add an ELB

• Add EC2 instance for Web Application

• Different AZs

• Standby DB instance

– Multi AZ setup in RDS

Creating a cloud service

Creating a cloud service

Availability Zone

Database

Availability Zone

Database

Creating a cloud service

• Problems:

– Still limited scaling capabilities

– If one EC2 instance crashes, 50% less

capability

Creating a cloud service

• Add additional EC2 instances

• Add read replicas in RDS

Creating a cloud service

Availability Zone

Database

Availability Zone

Database

Creating a cloud service

• Problems:

– Naive implementation

– Does not leverage AWS services

– Limited scaling

– Can be quite expensive

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

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

Creating a cloud service

Availability Zone

Auto Scaling

group

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

Creating a cloud service

• Next steps:

– SOA

– Loose coupling: decouple interactions

– Amazon services, don‘t reinvent the wheel

– Database federation

– Database sharding

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

Internet

Auto Scaling group

Auto Scaling group

Availability Zone

Availability Zone

Architecture

Architecture

“Vert.x is a lightweight, high performance application

platform for the JVM that's designed for modern

mobile, web, and enterprise applications.”

Vert.x

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)

• …

Deployment

WorkstationGitHub

Jenkins

Python/Fabric

Nexus

Datacenter

Artefakt

Deployment

EC2 instance with Docker

registry (port 5000)

S3 bucket to store

Docker images

Deployment

Amazon Cloud

WorkstationGitHub

Jenkins

Python/Boto

Docker Image

Docker Registry S3 bucket with

Docker Images

Deployment

Deployment

Deployment

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

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

EC2 instances and ELB

EC2 instances and ELB

top related