Scalable and Fault-Tolerant Apps with AWS

1,936 views

Published on

Published in: Technology, Business
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,936
On SlideShare
0
From Embeds
0
Number of Embeds
16
Actions
Shares
0
Downloads
0
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Scalable and Fault-Tolerant Apps with AWS

  1. 1. Amazon Web ServicesFernando Rodriguez Olivera@frodriguezBuenos Aires, Argentina, May 2013Buenos Aires High Scalability GroupScalable and Fault-Tolerant Apps with AWS
  2. 2. AWS RegionsVirginia(5 AZs, 2006)California(3 AZs, 2009)Oregon(3 AZs, 2011)Ireland(3 AZs, 2007)Tokyo(3 AZs, 2011)Singapore(2 AZs, 2011)23 Availabilty Zones + (2 GovCloud)North AmericaSouth AmericaEuropeAsia PacificSãoPaulo(2 AZs, 2011)Sydney(2 AZs, 2012)23 (+ 2Gov)AZsGovCloud(2 AZs, 2011)
  3. 3. Availability ZonesDC1 DC2 DC3 DC4 DC5DC6 DC7 DC8 DC9 DC10us-east-1a us-east-1bus-east-1c“Our US East-1 Region consists of more than 10 datacentersstructured into multiple Availability Zones.” [July, 2012](http://aws.amazon.com/message/67457/)DataCenters > AZs
  4. 4. Core1EC2 - Semi Dedicated ResourcesDisk1EC2InstanceEC2InstanceEC2InstanceEC2InstanceXENCore2 Core3 Core4Disk1 Disk1 Disk1CPURAMDISKText
  5. 5. EBS (Elastic Block Storage)EC2InstanceA BCEBSVolumeAABBCCEBS ClusterLocalNetworkSharedorDedicated(EBS Optimized)Standard orProvisioned IOPS
  6. 6. HardwareCloudWatchEC2InstanceHypervisorCloudWatchDashboardConfiguredAlarmsSNSTopicAPI AccessSubscriberSubscriberSubscriber
  7. 7. Elastic CapacityReserved CapacityOn DemandAmazonDatacenter(AZ)Spot Instances(Bidding)
  8. 8. EC2 Pricing (US-East)SmallInstance1 Core1.7 GB RAM160 GB HDDOn Demand $0.060/hr       $43.20  /  monthR/Light 1yr $61  +  0.034/hr$61  +  $24.48/month$29.56  /  monthR/Medium 1yr $139  +  0.021/hr$139  +  $15.12/month$26.70  /  monthR/Heavy 1yr $169  +  0.014/hr$169  +  $10.08/month$24.16  /  monthR/Light 3yr $96  +  0.027/hr$96  +  19.44/month$22.10  /  monthR/Medium 3yr $215  +  0.017/hr$215  +  12.34/month$18.21  /  monthR/Heavy 3yr $257  +  0.012/hr$257  +  8.64/month$15.77  /  monthSpot $0.007/hr $5.04  /  monthMay/20131 EC2ComputeUnit
  9. 9. LargeInstance2 Cores7.5 GB RAM850 GB HDDOn Demand $0.240/hr       $172  /  monthR/Light 1yr $243  +  0.136/hr$243  +  $97.92/month$118.17  /  monthR/Medium 1yr $554  +  0.084/hr$554  +  $60.48/month$106.64  /  monthR/Heavy 1yr $676  +  0.056/hr$676  +  $40.32/month$96.65  /  monthR/Light 3yr $384  +  0.108/hr$384  +  77.76/month$88.42  /  monthR/Medium 3yr $860  +  0.067/hr$860  +  48.24/month$72.12  /  monthR/Heavy 3yr $1028  +  0.046/hr$1028  +  33.12/month$61.67  /  monthSpot $0.026/hr $18.72  /  monthMay/20134 EC2ComputeUnitsEC2 Pricing (US-East)
  10. 10. Amazon Web ServicesEC2DynamoDBSQS - SNSCloudFormationAPI-HTTP/RESTJavaRubyPHPNode.jsPython*.NETRoute53CloudFront...ServicesSDKsCommandLineTools
  11. 11. CloudFormation - EC2 Instance  "myServer":  {          "Type":  "AWS::EC2::Instance",          "Properties":  {                  "ImageId"                  :  "ami-­‐0145d268",                  "InstanceType"        :  "m1.small",                  "KeyName"                  :  "mykey",                                  "UserData"  :  {  "Fn::Base64"  :  {  "Fn::Join"  :  ["",  [                          "#!/bin/bash",                                "n",                          "apt-­‐get  -­‐y  update",                    "n",                          "apt-­‐get  -­‐y  install  apache2",  "n"                  ]]}}          }  }
  12. 12. CloudFormation - Security Group  "mySecurityGroup":  {          "Type":  "AWS::EC2::SecurityGroup",          "Properties":  {                  "GroupDescription"          :  "...",                  "SecurityGroupIngress"  :  [{                            "IpProtocol"  :  "tcp",                              "FromPort"      :  "22",                              "ToPort"          :  "22",                              "CidrIp"          :  "0.0.0.0/0"                    }]          }  }
  13. 13. Elastic Load Balancer (ELB)UnhealthyInstanceEC2InstanceEC2InstanceEC2InstanceHTTP/S-TCP/SSLHealthChecksBalancingCloudWatchLatency - Requests - Status CodesLoad Balancer
  14. 14. Elastic Load Balancer (ELB)EC2InstanceEC2InstanceEC2InstanceEC2InstanceLoad BalancerDNSBalancing(Client-Side) (MultiAZ)Load Balancing(Server Side)AZ 1AZ 2LB (AZ 1)LB (AZ 2)
  15. 15. Elastic Load Balancer (ELB)                    lb-­‐loadbalancer...us-­‐east-­‐1.elb.amazonaws.com    IPv4          ipv6.lb-­‐loadBalancer...us-­‐east-­‐1.elb.amazonaws.com    IPv6dualstack.lb-­‐loadBalancer...us-­‐east-­‐1.elb.amazonaws.com    IPv4/IPv6Region DifferentIPs foreach AZNameStack(DNS Name)DNS Name CNAME IPv4/IPv6
  16. 16. CloudFormation - Load Balancer (1/2)    "balancer":  {          "Type":  "AWS::ElasticLoadBalancing::LoadBalancer",          "Properties":  {                    "AvailabilityZones"  :  {  "Fn::GetAZs"  :  ""  },                  "Listeners":  [{                          "Protocol"                  :  "HTTP",                          "LoadBalancerPort"  :  "80",                          "InstancePort"          :  "80"                  }],  }
  17. 17. CloudFormation - Load Balancer (2/2)    "balancer":  {          "Type"  :  "AWS::ElasticLoadBalancing::LoadBalancer",          "Properties"  :  {                  "HealthCheck"  :  {                          "Interval"                      :  "25",                          "Target"                          :  "HTTP:80/",                          "Timeout"                        :  "10",                          "UnhealthyThreshold"  :  "2",                          "HealthyThreshold"      :  "2"                  }              }}
  18. 18. AutoScaling GroupsEC2InstanceEC2InstanceEC2InstanceAutoScaling GroupLaunchConfigMin: 2 Max: 8Desired: 4CloudWatchAlarmsScaling Policy +1Scaling Policy -1avg  cpu  >  70avg  cpu  <  40EC2Instance
  19. 19. AutoScaling - MultiAZEC2InstanceEC2InstanceEC2InstanceLaunchConfigEC2InstanceAvailabilityZone1AvailabilityZone2RebalancingProcess
  20. 20. CloudFormation - AutoScaling Group  "autoScalingGroup":  {          "Type"  :  "AWS::AutoScaling::AutoScalingGroup",          "Properties"  :  {                  "AvailabilityZones"              :  {  "Fn::GetAZs"  :  ""  },                  "LaunchConfigurationName"  :  {                            "Ref"  :  "launchConfig"                    },                  "MinSize"                  :  "2",                  "MaxSize"                  :  "8",                  "DesiredCapacity"  :  "4",          }  }
  21. 21. CloudFormation - Launch Config  "launchConfig":  {          "Type":  "AWS::AutoScaling::LaunchConfiguration",          "Properties"  :  {                  "ImageId"            :  "ami-­‐0145d268",                  "InstanceType"  :  "m1.small",                    ...                                  "UserData"  :  {  "Fn::Base64"  :  {  "Fn::Join"  :  ["",  [                          "#!/bin/bash",                                "n",                          "apt-­‐get  -­‐y  update",                    "n",                          "apt-­‐get  -­‐y  install  apache2",  "n"                  ]]}}          }  }
  22. 22. CloudFormation - CPU Alarms (1/2)    "cpuHigh":  {          "Type":  "AWS::CloudWatch::Alarm",          "Properties":  {                "Namespace"    :  "AWS/EC2",                "MetricName"  :  "CPUUtilization",                "Statistic"    :  "Average",                "Dimensions"  :  [{                        "Name"    :  "AutoScalingGroupName",                        "Value"  :  {  "Ref"  :  "autoScalingGroup"  }                }],                ...          }  }
  23. 23. CloudFormation - CPU Alarms (2/2)    "cpuHigh":  {          "Type":  "AWS::CloudWatch::Alarm",          "Properties"  :  {                "Period"                          :  "60",                "EvaluationPeriods"    :  "2",                "ComparisonOperator"  :  "GreaterThanThreshold"                "Threshold"                    :  "70",                "AlarmActions"              :  [{  "Ref":  "scaleUpPolicy"  }],                    }}
  24. 24. CloudFormation - Scaling Policy    "scaleUpPolicy":  {          "Type":  "AWS::AutoScaling::ScalingPolicy",          "Properties"  :  {                  "AdjustmentType"              :  "ChangeInCapacity",                  "ScalingAdjustment"        :  "1",                                "Cooldown"                          :  "60",                  "AutoScalingGroupName"  :  {                            "Ref":  "autoScalingGroup"                    }      }}
  25. 25. AutoScaling & ELBEC2InstanceEC2InstanceEC2InstanceEC2InstanceDNSBalancing(Client-Side)Health CheckLB RegistrationUnhealthy Instance Notificationsfrom LBLB (AZ 1)LB (AZ 2)
  26. 26. CloudFormation - AutoScaling Group  "autoScalingGroup"  :  {          "Type":  "AWS::AutoScaling::AutoScalingGroup",          "Properties":  {                  ...                  "LoadBalancerNames"  :  [{                            "Ref"  :  "balancer"                    }]          }  }
  27. 27. AutoScaling & Multiple RegionsAutoScaling Groupue-west-1 (2 AZ)EC2InstanceEC2InstanceEC2InstanceEC2InstanceAutoScaling Groupus-east-1 (2 AZ)EC2InstanceEC2InstanceEC2InstanceEC2InstanceEC2InstanceEC2InstanceELB ELBUS CA MXRoute 53 Route 53ES DE ITLatency Based Routing
  28. 28. RDS (Relational Database Service)MySQL MySQLActive Stand-byAZ 1 AZ 2SynchronousReplicationMySQL MySQL MySQLAsynchronousReplicationRead Replicas
  29. 29. Simple Queue Service (SQS)EC2InstanceEC2InstanceQueueEC2InstanceEC2InstanceAutoScalingGroupsCloudWatchAlarms Scaling Policy
  30. 30. Simple Notification Service (SNS)SNSTopicHTTPServerMailServerSubscribers
  31. 31. CloudFormation - Route 53 (DNS)    "dns":  {      "Type"  :  "AWS::Route53::RecordSetGroup",      "Properties"  :  {              "HostedZoneName"  :  "example.com.",              "RecordSets"          :  [{                        "Name"                        :  "www.example.com.",                        "Type"                        :  "CNAME",                          "TTL"                          :  "300",                        "ResourceRecords"  :                              [{  "Fn::GetAtt"  :  [  "balancer",  "DNSName"  ]}]              }]        }}
  32. 32. CloudFormation Templates{        "AWSTemplateFormatVersion"  :  "2010-­‐09-­‐09",        "Description"  :  "  ...  ",        "Parameters"    :  {  ...  },        "Mappings"        :  {  ...  },        "Resources"      :  {  ...  },        "Outputs"          :  {  ...  }}
  33. 33. Thanks,Fernando Rodriguez Olivera@frodriguezfrodriguez <at> gmail.comhttp://www.meetup.com/Buenos-Aires-High-Scalability-Group/

×