leveraging elastic web scale computing with aws

57
Leveraging Elastic Web-Scale Computing with AWS Shiva Narayanaswamy

Upload: shiva-narayanaswamy

Post on 16-Apr-2017

439 views

Category:

Internet


2 download

TRANSCRIPT

Page 1: Leveraging elastic web scale computing with AWS

Leveraging Elastic Web-Scale Computing with AWSShiva Narayanaswamy

Page 2: Leveraging elastic web scale computing with AWS

EC2 BasicsInstance LifecycleEC2 Instance TypesUsing Amazon Machine ImagesBootstrapping EC2 InstancesMonitoring EC2 with CloudWatchAutoscaling

Page 3: Leveraging elastic web scale computing with AWS

EC2 BasicsInstance LifecycleEC2 Instance TypesUsing Amazon Machine ImagesBootstrapping EC2 InstancesMonitoring EC2 with CloudWatchAutoscaling

Page 4: Leveraging elastic web scale computing with AWS

EC2 Basics

Virtual Servers in the Cloud• One instance to thousands of instances• In any public AWS region• Create, start, stop, configure, monitor as desired• Install any software: web, business, client/server, batch processing• Pay only for capacity you use• Variety of cost models Amazon EC2

Page 5: Leveraging elastic web scale computing with AWS

EC2 Basics: cost models

On-Demand Reserved Spot Dedicated

Pay upfront in exchange for hourly prices that are 50-75% lower than

On-Demand

Pay for compute capacity by the hour. No long-term

commitments

Bid for unused Amazon EC2 capacity

Launch instances in VPC on dedicated customer hardware

Customers can combine multiple purchase types to optimize pricing based on current and forecast capacity needs.

Spiky workloads Committed utilization Time-insensitive workloads Highly sensitive workloads

Page 6: Leveraging elastic web scale computing with AWS

EC2 BasicsInstance LifecycleEC2 Instance TypesUsing Amazon Machine ImagesBootstrapping EC2 InstancesMonitoring EC2 with CloudWatchAutoscaling

Page 7: Leveraging elastic web scale computing with AWS

Provisioning and Lifecycle

• Create -> Start -> Stop -> Terminate• Manually in console• Automate via API (or other tools)• Automatically based on demand

(demand curve)

Page 8: Leveraging elastic web scale computing with AWS

EC2 BasicsInstance LifecycleEC2 Instance TypesUsing Amazon Machine ImagesBootstrapping EC2 InstancesMonitoring EC2 with CloudWatchAutoscaling

Page 9: Leveraging elastic web scale computing with AWS

Instance TypesGPU

EnabledGeneral Purpose

Storage and IOOptimized

ComputeOptimized

Memory Optimized

M3 C3 I2

CG1M1 C1 CR1CC2 HI1 HS1

G2

M3 C3 I2 HS1

M2

R3G2

Added Instance

Types

Page 10: Leveraging elastic web scale computing with AWS

EC2 BasicsInstance LifecycleEC2 Instance TypesUsing Amazon Machine ImagesBootstrapping EC2 InstancesMonitoring EC2 with CloudWatchAutoscaling

Page 11: Leveraging elastic web scale computing with AWS

Amazon Machine Images

Your machine images

AMIs you have created from EC2 instancesCan be kept private or shared with other

accounts

Amazon maintained

Set of Linux and Windows imagesKept up to date by Amazon in each

region

Community maintained

Images published by other AWS usersManaged and maintained by Marketplace

partners

Page 12: Leveraging elastic web scale computing with AWS

Amazon Machine Images

Page 13: Leveraging elastic web scale computing with AWS

EC2 BasicsInstance LifecycleEC2 Instance TypesUsing Amazon Machine ImagesBootstrapping EC2 InstancesMonitoring EC2 with CloudWatchAutoscaling

Page 14: Leveraging elastic web scale computing with AWS

Bootstrapping: metadata and userdata

• Every EC2 Instance has access to local instance metadata and userdata service

Instance request

User data

Instance

Meta-data service

Page 15: Leveraging elastic web scale computing with AWS

Bootstrapping: metadata and userdata

• Metadata: immutable information about the instance• Accessible from within the instance via HTTP at

http://169.254.169.254/latest/meta-data/• Script(s) on instance may retrieve useful information about the

instance, such as:• Host name• AMI ID• Instance ID• Public/Private DNS• Availability Zone

Page 16: Leveraging elastic web scale computing with AWS

Bootstrapping: metadata and userdata

• User Data: pass up to 16KB of text to an instance on launch• Accessible from within the instance via HTTP at

http://169.254.169.254/latest/user-data/• Text can be parsed by script on instance and used to configure the

machine

Page 17: Leveraging elastic web scale computing with AWS

Custom script on AMI

(script_runner.py) fetches userdata,

parses it, and configures EC2 Instance

on boot

Bootstrapping: metadata and userdata

Page 18: Leveraging elastic web scale computing with AWS

• CloudInit executes UserData on first boot if UserData begins with:• #! (Linux)• <script> (Windows; technically, EC2Config, not CloudInit, does this)

• CloudInit is installed on Amazon Linux, Ubuntu, and RHEL AMIs• EC2Config is installed on Windows Server AMIs• Both may be installed on other distributions via a package repo or

source

Bootstrapping: UserData and CloudInit

Page 19: Leveraging elastic web scale computing with AWS

• UserData to install Apache and MySQL on boot, and attach an EIP:

#!/bin/bash

# Install Apache, PHP, and MySQL yum install –y httpd mysql-server # Attach an Elastic IP to this instance ec2-associate-address \ 23.34.45.56 \

-i $(curl http://169.254.169.254/latest/meta-data/instance-id)

Bootstrapping: UserData and CloudInit

Page 20: Leveraging elastic web scale computing with AWS

Bootstrapping

Bake an AMI

Start an instance

Configure the instance

Create an AMI from your instance

Start new ones from the AMI

Configure dynamically

Launch an instance

Use metadata service and cloud-init to perform actions on

instance when it launches

Use config management tools like Puppet/Chef/Opsworks

vs

Page 21: Leveraging elastic web scale computing with AWS

Bootstrapping

Bake an AMI Configure dynamically

Build your base images and setup custom initialisation

scripts

Maintain your ‘golden’ base

Use bootstrapping to pass custom information in and perform post launch tasks.

+

Sweet spot

Page 22: Leveraging elastic web scale computing with AWS

Bootstrapping: AMIs

Linux

JEE

Your Code

Log4J

Spring

Hibernate

Struts

Tomcat

Apache

Java App Stack

Example full stack required to run your

application.

Let’s use the 3 bootstrapping

techniques

Page 23: Leveraging elastic web scale computing with AWS

Bootstrapping: AMI bake

Fully-functional AMI is pre-build and

ready to launch from the AMI inventory

Inventory of AMIs

Linux

JEE

Your Code

Log4J

Spring

Hibernate

Struts

Tomcat

Apache

Amazon EC2

Linux

JEE

Your Code

Log4J

Spring

Hibernate

Struts

Tomcat

Apache

Linux

JEE

Your Code

Log4J

Spring

Hibernate

Struts

Tomcat

Apache

Linux

JEE

Your Code

Log4J

Spring

Hibernate

Struts

Tomcat

Apache

Linux

JEE

Your Code

Log4J

Spring

Hibernate

Struts

Tomcat

Apache

Java AMI

Page 24: Leveraging elastic web scale computing with AWS

Bootstrapping: Configure dynamically

Base OS AMI

An AMI with minimal components (OS,

J2EE, and Chef/Puppet) is launched.

All configuration occurs via

Chef/Puppet after instance launch

Inventory of AMIs

Amazon EC2

OS AMI

Fetch on boot

Linux

JEE

Your Code

S3

Hibernate

Tomcat

Log4J

Spring

Struts

Apache

Linux

JEE

Linux

JEE

Chef/Puppet

Chef/Puppet

scripts

Page 25: Leveraging elastic web scale computing with AWS

Bootstrapping: Sweet spot

Partially-configured AMI

A “Golden Image” is launched, with

scripts fetching/installing app code

and other supporting components on

boot

Inventory of AMIs

Amazon EC2

Java AMI

Your Code

S3

Log4J

Spring

Struts

Linux

JEE

Hibernate

Tomcat

Apache

Fetch on boot

Fetch on boot

Linux

JEE

Hibernat

e

Tomcat

Apache

Linux

JEE

Hibernat

e

Tomcat

Apache

Linux

JEE

Hibernat

e

Tomcat

Apache

Linux

JEE

Hibernat

e

Tomcat

Apache

Page 26: Leveraging elastic web scale computing with AWS

Why do this?

AutomationLess fingers, less mistakes

AvailabilityDrive higher

availability with self-healing

SecurityInstances locked down by default

FlexibleShell,

Powershell, CloudFormation,

Chef, Puppet, OpsWorks

ScaleManage large scale

deployments and drive autoscaling

EfficiencyAudit and manage your estate with less time & effort

Page 27: Leveraging elastic web scale computing with AWS

Do Don’t

Some dos and don’ts

Use IAM roles

Go keyless if you can

Strike a balance between AMI and dynamic bootstrapping

Put your API access keys into code (and then publish to GIT) or bake

into AMIs (and share)

Page 28: Leveraging elastic web scale computing with AWS

EC2 BasicsInstance LifecycleEC2 Instance TypesUsing Amazon Machine ImagesBootstrapping EC2 InstancesMonitoring EC2 with CloudWatchAutoscaling

Page 29: Leveraging elastic web scale computing with AWS

Monitoring EC2 with CloudWatch

Page 30: Leveraging elastic web scale computing with AWS

EC2 BasicsInstance LifecycleEC2 Instance TypesUsing Amazon Machine ImagesBootstrapping EC2 InstancesMonitoring EC2 with CloudWatchAutoscaling

Page 31: Leveraging elastic web scale computing with AWS

Types of Scaling• Vertical Scaling

• Changing instance size• Increasing EBS Capacity

• Horizontal Scaling• Adding / removing instances• ELB• Autoscaling

r3.8xlarge

c3.2xlarge

m3.medium

m3.medium m3.medium m3.medium

m3.medium m3.medium m3.medium

Page 32: Leveraging elastic web scale computing with AWS

Vertical Scaling• Different EC2 instance type

• High memory instances• High CPU instances• High I/O instances• High storage instances

• Easy to change instance sizes• Will hit an endpoint eventually• Requires instance to be stopped

r3.8xlarge

c3.2xlarge

m3.medium

Page 33: Leveraging elastic web scale computing with AWS

Traditional IT Usage Patterns

On and Off Fast Growth

Variable peaks Predictable peaks

Page 34: Leveraging elastic web scale computing with AWS

Traditional IT Usage Patterns

On and Off Fast Growth

Variable peaks Predictable peaks

PoorService

WASTE

Page 35: Leveraging elastic web scale computing with AWS

Cloud IT Usage Patterns (Auto Scaling)

On and Off Fast Growth

Variable peaks Predictable peaks

Page 36: Leveraging elastic web scale computing with AWS

Auto Scaling• Automatic resizing of compute clusters based on demand • Define minimum and maximum number of instances• Define when scaling out and in occurs• Use metrics collected in Amazon CloudWatch to drive scaling• Run Auto Scaling for On-Demand and Spot instance types• Its Free! Amazon

CloudWatch

UsageMetrics

ScalingInstructions

Auto Scaling Group

QueueMetrics

Auto Scaling

Page 37: Leveraging elastic web scale computing with AWS

Describes what Auto Scaling will create when adding

Instances - Similar to ec2-run-instances API command

AMIInstance Type

Security GroupInstance Key Pair

Only one active launch configuration at a time

Auto Scaling will terminate instances with old launch

configuration firstrolling update

Auto Scaling managed grouping of EC2 instances

Automatic health check to maintain pool size

Automatically scale the number of instances by policy – Min, Max,

Desired

Automatic Integration with ELB

Automatic distribution & balancing across AZs

Parameters for performing an Auto Scaling action

Scale Up/Down and by how much

ChangeInCapacity (+/- #)ExactCapacity (#)

ChangeInPercent (+/- %)

Cool Down (seconds)

Policy can be triggered by CloudWatch events

Launch Configuration Auto-Scaling Group Auto-Scaling Policy

Page 38: Leveraging elastic web scale computing with AWS

Scaling plan

• Scale based on demand• Manual scaling• Scale based on schedule• Maintain current instance levels at all time

Auto Scaling

Page 39: Leveraging elastic web scale computing with AWS

Auto Scaling Lifecycles

Page 40: Leveraging elastic web scale computing with AWS

Autoscaling

Page 41: Leveraging elastic web scale computing with AWS

Autoscaling

Page 42: Leveraging elastic web scale computing with AWS

Autoscaling

Page 43: Leveraging elastic web scale computing with AWS

Autoscaling

Page 44: Leveraging elastic web scale computing with AWS

Autoscaling

Page 45: Leveraging elastic web scale computing with AWS

Availability Zone A Availability Zone B

Autoscaling: Auto Scaling Group

Page 46: Leveraging elastic web scale computing with AWS

Availability Zone A Availability Zone B

Autoscaling: Auto Scaling Group

Page 47: Leveraging elastic web scale computing with AWS

Availability Zone A Availability Zone B

Autoscaling: Auto Scaling Group

Page 48: Leveraging elastic web scale computing with AWS

Availability Zone A Availability Zone B

Autoscaling: Auto Scaling Group

Page 49: Leveraging elastic web scale computing with AWS

Availability Zone A Availability Zone B

Autoscaling: Auto Scaling Group

Page 50: Leveraging elastic web scale computing with AWS

Latency

CloudWatchAuto Scaling

ELB

Auto scaling Group

Autoscaling: ELB + CloudWatch

Page 51: Leveraging elastic web scale computing with AWS

• Tools Used:• CloudFormation script –

• Create a multi-AZ, load balanced and Auto Scaled sample web site running on an Apache Web Server (m1.small). The application is configured to span all Availability Zones in the region and is Auto-Scaled based on the CPU utilization of the web servers.

• Bees with Machine Guns – Performance testing tool• A cloudformation script that spins up a distibuted performance testing tool based on

apache eb tool. This tool will hit the ELB with 1000’s of concurrent requests for a total of 100’s of thousands of request, thus loading the web server behind the ELB.

• Expected result• The Apache web server will scale to serve traffic without any customer impact.

Autoscaling: DEMO

Page 52: Leveraging elastic web scale computing with AWS

• CloudFormation script (Auto scaling apache web server)• Auto-scaling group configuration:

• Min: 1• Max: 3• Cooldown: 300

• Scaling Policies:• Scaling Up:

• CPU Utilization > 20% for 1 consecutive period of 60 seconds• Action: Add 1 instance• Then wait: 60 seconds before next operation

• Scaling Down:• CPU Utilization < 10% for 2 consecutive periods of 60 seconds• Action: Remove 1 instance• Then wait: 60 seconds before next operation

• Bees with Machine guns(NASTY)

Demo Information

Page 53: Leveraging elastic web scale computing with AWS

Autoscaling isn’t one size fits all• Choose the right metrics

• CPU Usage• Queue Depth• Number of concurrent users

• Scale too aggressively• Overprovisioning: increases costs• Bounciness: Add more than you need and have to partially scale back shortly after scaling

up, increasing costs.

• Scale too timidly• Poor performance• Outages due to lack of capacity

• Scale out early / Scale in slowly

Page 54: Leveraging elastic web scale computing with AWS

Stop doing these:Provisioning and fixing servers

Treating compute as physical thingsThinking of compute as a finite commitment

Page 55: Leveraging elastic web scale computing with AWS

and start doing these

SecurityBuild systems secure by

default

ElasticityStateless autoscaling

applications

Replace not fixBuild from scratch, don’t

fix somethingUnconstrained

Say goodbye to traditional capacity

planning

Be cost awareTag resources, play with

instance types

AutomationCreate instances when you need them, drop

them when not

Page 56: Leveraging elastic web scale computing with AWS

What’s more?• Attach / Detach Instances from Auto Scaling Groups• Place instances into Standby State to Troubleshoot• Hold instances in Pending state for installing software / retrieve logs• Create an Auto Scaling Group / Launch Configuration based on a

running instance• Auto scaling Lifecycle hooks

Page 57: Leveraging elastic web scale computing with AWS

Questions?