cloud architecture: patterns and best practices
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
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