3. 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
4. Agenda
• AWS Overview
• Creating a cloud service
• Real World example
• Cloud deployment
• Q&A
6. 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)
Regions
Regions
EU-CENTRAL
(Frankfurt)
AWS Overview
8. AWS Overview
EC2: Resizable compute capacity
AutoScaling: scale up or down
Route 53: Domain Name System
ELB: Load Balancing
Elastic IP: Static IP address
9. AWS Overview
RDS: Managed database service
DynamoDB: NoSQL implementation
Redshift: data warehouse solution
ElastiCache: Managed cache
Kinesis: Service for streaming data
11. Starting point
• How can we leverage the Cloud?
• Our application:
– Simple Java based web application
– One application
– One database
– Runs in our own DC
12. 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
14. Creating a cloud service
• Simple approach to scale:
– Different EC2 instance type
• More RAM
• More CPU power
• More IOPS
• Approach will hit a barrier
15. Creating a cloud service
• Problems:
– No failover
– No redundancy
– Database and application on one instance
– Does not scale very well
16. 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
21. Creating a cloud service
Availability Zone
Database
Availability Zone
Database
22. Creating a cloud service
• Problems:
– Still limited scaling capabilities
– If one EC2 instance crashes, 50% less
capability
23. Creating a cloud service
• Add additional EC2 instances
• Add read replicas in RDS
24. Creating a cloud service
Availability Zone
Database
Availability Zone
Database
25. Creating a cloud service
• Problems:
– Naive implementation
– Does not leverage AWS services
– Limited scaling
– Can be quite expensive
26. 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
27. 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
28. Creating a cloud service
Requests
Elastic Load Balancing
Latency Metrics CPU Metrics
Amazon CloudWatch
Metric
Monitoring
Alarm
Notification
Scale up/down
30. 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
31. Creating a cloud service
• Next steps:
– SOA/Microservices
– Loose coupling: decouple interactions
– Amazon services, don‘t reinvent the wheel
– Database federation
– Database sharding
32.
33. Docker Deployment
• Amazon Services with Docker
support:
–Amazon OpsWorks*
–Elastic Beanstalk
–EC2 Container Service
*by adding a custom Docker Layer
35. Docker Deployment
• Remote API
– API to access Docker daemon
– Can be bound to specific host/port
– E.g. Jenkins can trigger deployments
– GET /containers/json
36. Docker Deployment
• EC2 User Data
– Data to configure instance during launch
• Install Docker
• Start Daemon
• Run Docker container
37. Demo
• Elastic architecture that grows and
shrinks
• Multiple AZs
• Use case: simple web app
• Elastic Beanstalk and Docker
• Postgres RDS DB
51. Elastic Beanstalk
• Docker support:
– Dockerrun.aws.json specifies runtime
– Dockerfile is an alternative
• EC2 instances using Docker 1.6
• No direct port mapping
• Local nginx reverse proxy
• Connects to IP of Docker container
52. Elastic Beanstalk
• Dockerrun.aws.json:
– Specifies Docker image (support for private
registries as well)
– Defines port for local nginx
– Support for volumes and logging as well
55. • RDS specific values are exposed as
ENV-variables
• Mapped into the Docker container
• Used by the application to connect to
Postgres
Elastic Beanstalk
Frage: wie können wir Skalieren?
AWS als Basis
Zeige heute:
Patterns und Best Practices in der Cloud anhand von AWS
Beispielapplikation in Java, die skaliert werden soll
9 bzw. 10 verschiedene Regionen
Region: separierte geographische Bereiche
Neu: EU-Central in Frankfurt
Regions werden in Availability Zones unterteilt
Jede AZ is isoliert, aber durch Leitungen mit niedriger Latenz verbunden
A group of AZ is a Region
A group of Datacenter is an AZ
Elastic IP addresses are static IP addresses designed for dynamic cloud computing.
An Elastic IP address is associated with your account, not a particular instance, and you control that address until you choose to explicitly release it
Im Fehlerfall (EC2-Instanz ist down) kann die EIP umgemappt werden
RDS: fully managed database service
Supports: MySQL, Oracle, Microsoft SQL Server, PostgreSQL
automatically patches the database software and backs up your database
- Multi AZ: Multi-AZ deployment option you can run mission critical workloads with high availability and built-in automated fail-over from your primary database to a synchronously replicated secondary database
- Multi AZ: Multi-AZ deployment option you can run mission critical workloads with high availability and built-in automated fail-over from your primary database to a synchronously replicated secondary database
- Minimum poolsizes is great if you have crashing EC2 instances,
Alle Bestandteile der Applikation in Services auslagern, die unabhängig voneinander skaliert werden können
Loose Kopplung der Komponenten über Messaging Systeme
Eb
- Single Container
- Multiple Containers (dependencies using JSON format)
- Cool: direct integration into ELB (not just on EC2 level)
Eb
- Single Container
- Multiple Containers (dependencies using JSON format)
- Cool: direct integration into ELB (not just on EC2 level)
Eb
- Single Container
- Multiple Containers (dependencies using JSON format)
- Cool: direct integration into ELB (not just on EC2 level)
Eb
- Single Container
- Multiple Containers (dependencies using JSON format)
- Cool: direct integration into ELB (not just on EC2 level)