蓝/绿部署在AWS上的实践模式蓝/绿部署在AWS上的实践模式武杰解决方案架构师AWS武杰解决方案架构师AWS本话题讨论的主要内容•系统部署的风险分析•蓝/绿部署的重要概念•在AWS上进行蓝/绿部署的益处•在AWS上进行蓝/绿部署模式•数据层面切换的最佳实践•成本优化系统部署的风险•面临的挑战•应用程序出错•基础架构失效•容量的问题•扩展的问题•人为的错误•流程失效•回滚的问题•对业务的影响•宕机时间•数据丢失•糟糕的客户体验•损失收入•业务人员的抱怨•员工压力太大•浪费时间和资源在AWS上定义蓝/绿部署什么是蓝/绿部署?•“蓝”•(existingproductionenvironment)•“绿”•(parallelenvironmentrunningadifferentversionoftheapplication)•“部署”•(abilitytoswitchtrafficbetweenthetwoenvironments)什么是环境?Boundaryforwherethingschangedandwhatneedstobedeployed示例:Appcomponent,apptier,microservice示例:DNS,loadbalancerv2.2.103v2.3.020在AWS上进行蓝/绿部署的益处•AWS:•弹性部署•多样的选择•容量可动态调整•按实际用量付费•高效快速在AWS上进行蓝/绿部署模式共有的问题:环境的自动化•成功的部署取决于对如下风险的克服:•应用程序出问题(功能性的问题)•应用程序的性能问题•人员/流程失效•基础架构失效•回滚的容量•高额的成本•蓝/绿部署的不同模式对以上这些风险有不同的处理方式CloudFormation全面的自动化平台定义从网络到软件的整个环境控制高一级的自动化服务:ElasticBeanstalk,OpsWorks,AutoScaling自动化平台的长处模式:经典的DNS切换•部署流程:•从已有的应用环境开始•部署新的应用环境•测试绿的应用环境•通过DNS逐步切换流量•监控你的环境•出现问题,回滚到蓝的应用环境模式:经典的DNS切换•部署流程:•从已有的应用环境开始•部署新的应用环境•测试绿的应用环境•通过DNS逐步切换流量•监控你的环境•出现问题,回滚到蓝的应用环境•部署流程:•从已有的应用环境开始•部署新的应用环境•测试绿的应用环境•通过DNS逐步切换流量•监控你的环境•出现问题,回滚到蓝的应用环境模式:经典的DNS切换模式:经典的DNS切换•部署流程:•从已有的应用环境开始•部署新的应用环境•测试绿的应用环境•通过DNS逐步切换流量•监控你的环境•出现问题,回滚到蓝的应用环境模式:经典的DNS切换•部署流程:•从已有的应用环境开始•部署新的应用环境•测试绿的应用环境•通过DNS逐步切换流量•监控你的环境•出现问题,回滚到蓝的应用环境模式:经典的DNS切换•部署流程:•从已有的应用环境开始•部署新的应用环境•测试绿的应用环境•通过DNS逐步切换流量•监控你的环境•出现问题,回滚到蓝的应用环境模式:经典的DNS切换•部署流程:•从已有的应用环境开始•部署新的应用环境•测试绿的应用环境•通过DNS逐步切换流量•监控你的环境•出现问题,回滚到蓝的应用环境•Resources:{•myApp:{Type:AWS::ElasticBeanstalk::Application},•myConfigTemplate:{•Type:AWS::ElasticBeanstalk::ConfigurationTemplate•},•myBlueAppVersion:{•Type:AWS::ElasticBeanstalk::ApplicationVersion•},•myBlueEnvironment:{•Type:AWS::ElasticBeanstalk::Environment•},•myBlueEndpoint:{Type:“AWS::Route53::RecordSet},•...myGreenAppVersion:{Type:AWS::ElasticBeanstalk::ApplicationVersion},myGreenEnvironment:{Type:AWS::ElasticBeanstalk::Environment},myGreenEndpoint:{Type:AWS::Route53::RecordSet}...自动化你的应用环境•UseCloudFormationtemplatestomodelyourenvironment•Version-controlyourtemplates•UseElasticBeanstalkorOpsWorkstomodelyourapplicationsinsidethetemplate•UpdateCloudFormationstackfromupdatedtemplatecontaininggreenenvironmentAmazonRoute53基于权重的DNS切换•AWSElasticBeanstalkenvironmentendpointswap•DNSrecordtime-to-live(TTL)•Reactiontime=(TTL×no.ofDNScaches)+Route53propagationtime,upto1min•BewareofmisbehavingDNSclients•AutoScalingandAmazonElasticLoadBalancing(ELB)needtimetoscale•Measurablemetrics•ELB:Latency,SurgeQueueLength,SpillOverCount,BackendConnectionErrors•Yourapplicationmetrics•Yourdeploymentgoals模式回顾:经典的DNS切换风险克服的程度说明程序的功能问题优有利于逐层剖析问题程序的性能问题优平滑切换,流量分流管理人员/流程出错好取决于自动化框架基础架构失效好取决于自动化框架回滚中DNSTTL的复杂性(reactiontime,flip/flop)成本优通过AutoScaling来优化成本让我们去掉DNS的切换…模式:切换AutoScalingGroups•部署流程:•AmazonElasticLoadBalancer(ELB),部署在应用前段•从现有的AutoScalingGroup(ASG)开始•部署&扩展新的ASG•测试绿的应用环境•在ELB上注册绿的ASG•在ELB上去除蓝的ASG模式:切换AutoScalingGroups•部署流程:•AmazonElasticLoadBalancer(ELB)部署在应用前段•从现有的AutoScalingGroup(ASG)开始•部署&扩展新的ASG•测试绿的应用环境•在ELB上注册绿的ASG•在ELB上去除蓝的ASG模式:切换AutoScalingGroups•部署流程:•AmazonElasticLoadBalancer(ELB)部署在应用前段•从现有的AutoScalingGroup(ASG)开始•部署&扩展新的ASG•测试绿的应用环境•在ELB上注册绿的ASG•在ELB上去除蓝的ASG模式:切换AutoScalingGroups•部署流程:•AmazonElasticLoadBalancer(ELB)部署在应用前段•从现有的AutoScalingGroup(ASG)开始•部署&扩展新的ASG•测试绿的应用环境•在ELB上注册绿的ASG•在ELB上去除蓝的ASG模式:切换AutoScalingGroups•部署流程:•AmazonElasticLoadBalancer(ELB)部署在应用前段•从现有的AutoScalingGroup(ASG)开始•部署&扩展新的ASG•测试绿的应用环境•在ELB上注册绿的ASG•在ELB上去除蓝的ASG模式:切换AutoScalingGroups•部署流程:•AmazonElasticLoadBalancer(ELB)部署在应用前段•从现有的AutoScalingGroup(ASG)开始•部署&扩展新的ASG•测试绿的应用环境•在ELB上注册绿的ASG•在ELB上去除蓝的ASG模式:切换AutoScalingGroups•部署流程:•AmazonElasticLoadBalancer(ELB)部署在应用前段•从现有的AutoScalingGroup(ASG)开始•部署&扩展新的ASG•测试绿的应用环境•在ELB上注册绿的ASG•在ELB上去除蓝的ASG模式:切换AutoScalingGroups•部署流程:•AmazonElasticLoadBalancer(ELB)部署在应用前段•从现有的AutoScalingGroup(ASG)开始•部署&扩展新的ASG•测试绿的应用环境•在ELB上注册绿的ASG•在ELB上去除蓝的ASG在ELB后面切换AutoScalinggroups•RegisterwithELB:–OneormoreEC2instances–OneormoreAutoScalinggroups•LeastoutstandingrequestsalgorithmfavorsgreenASGinstancesfornewconnections•Connectiondraining-gracefullystopreceivingtraffic•ScaleoutgreenASGbeforeELBregistration•Putblueinstancesinstandby•$awsautoscalingattach-load-balancers\•--auto-scaling-group-namegreen-asg\•--load-balancer-namesmy-app-elb•$awsautoscalingset-desired-capacity\•--auto-scaling-group-namegreen-asg\•--desired-capacityX•$awsautoscalingdetach-load-balancers\•--auto-scaling-group-nameblue-asg\•--load-balancer-namesmy-app-elb•$awsautoscalingenter-standby\•--instance-idsi-xxxxxxxx\•--auto-scaling-group-nameblue-asg\•--should-decrement-desired-capacity模式回顾:切换AutoScalinggroups风险克服的程度说明程序的功能问题优有利于逐层剖析问题,附加ELB程序的性能问题好流量分流管理,力度较粗,ELB预热人员/流程出错好取决于自动化框架基础架构失效优Auto-scaling回滚优没有DNS的复杂性成本优通过AutoScaling来优化成本让我们继续减少应用环境的限制…模式:切换LaunchConfigurations•部署流程:•从现有的在ELB后面的ASG&LaunchConfiguration开始•在ASG上注册更新的绿的LaunchConfiguration•将ASG的容量逐步增加到原有容量的2倍•将ASG的容量减少到原有的容量•为增加可控性,将老的实例切换到备份状态模式:切换LaunchConfigurations•部署流程:•从现有的在ELB后面的ASG&LaunchConfiguration开始•在ASG上注册更新的绿的LaunchConfiguration•将ASG的容量逐步增加到原有容量的2倍•将ASG的容量减少到原有的容量•为增加可控性,将老的实例切换到备份状态模式:切换LaunchConfigurations•部署流程:•从现有的在ELB后面的ASG&LaunchC