InfoQ 在线课堂:基于 AWS 云平台的高可用应用设计

  • 包研

2014 年 6 月 3 日

话题:AWS云计算语言 & 开发架构

5 月 21 日,AWS 中国首席云技术顾问方国伟在 InfoQ 在线课堂介绍了 AWS 高可用和非高可用的服务分类,从高可用角度对典型服务进行介绍,以及高可用设计的 5 大常见设计原则,并结合 AWS 的相关服务依次进行了架构设计分析。期间,方国伟回答了许多网友的问题,InfoQ 对其进行了整理和补充,一并提供给大家。

你也可以重复收看本次在线课堂

关于存储

Q:instance down 掉之后,这个 instance 上的数据会保留吗?能找回来吗?以前看到文档说要用 EBS 才能保障 instance down 掉之后的数据保留,是这样吗?是否有其他方案?

方国伟:有好几个问题就讲 instance storage 与 EBS 数据存储的问题,我统一讲一下。因为 EC2 里边的数据存储一般分两大类,一个是 instance storage,另一个是 EBS。instance storage 是放在 EC2 里的硬盘里边的,是通过虚拟化实现的。如果这个 EC2 所在的物理机或 instance 出问题,那这个 EC2 的数据就不能访问了。为了解决这个问题,我们提供了 EBS,EBS 是通过网络访问的,如果你的 instance 出问题了,数据还在 EBS 里边。那可能有人会问,EBS 的数据会不会丢呢?EBS 的数据一般可靠性比较高,我们有个数据叫 annual failure rate(AFR)会比一般的硬盘低好多,一般是普通硬盘的 1/5 到 1/10。那 EBS 还是有可能要出问题,那怎么办?一种方式是定期对 EBS 做 snapshot,snapshot 的数据放在 S3 里,S3 的数据持久性是 11 个 9,非常高了。这是可以解决 EBS 丢数据的一个解决方案。

Q:instance down 掉后 EBS 会自动卸载吗?

方国伟:一般会自动卸载。

Q:每个 instance 都有对应的 EBS,(instance)销毁后 EBS 上存储的数据怎么处理?

方国伟:EBS 上数据如何处理完全由用户自己决定。用户可以保留 EBS 卷,从而保留数据,也可以把 EBS 删除从而删除其上的数据。另外,用户也可以通过先制作 EBS 卷快照然后再删除 EBS 卷的方式来保留数据,因为以后还可以根据这个快照来重新生成一个包含这些旧数据的新 EBS 卷。

Q:instance storage 怎么使用?哪些数据可以放在 instance storage 里面?

方国伟:这就有不同的场景,主要看你的数据有哪些对持久性要求,如果不是特别高,就放到 instance storage 里。或者在 instance 的数据在别的 instance 里有备份的,这样相当于一份丢了,从软件架构上自己可以从别的 instance 中恢复。

Q:AWS 自己的 DR 是怎么设计的?如果一个 region 出现问题,怎么恢复呢?用户数据有 sunshine 吗?

方国伟:我们在设计这个平台的时候,region 和 region 之间基本上是相互独立的,在默认情况下,你在 region 里面部署了应用程序,如果这个 region 宕掉了,当然你的应用就宕掉了。这里首先要指出一点,region 本身不是一个数据中心,只要是商用 region,我们至少要保证有两个 AZ 以上。这里强调一点,AZ 本身也不是一个数据中心,有可能是多个数据中心组成一个 AZ,所以整个 region 宕掉的可能性非常小。如果你有一个对可靠性要求特别高的应用,你可以自己在部署的时候跨 region 部署,但这个需要用户来做架构上面跨 region 的应用架构设计、数据拷贝等等。AWS 是不会主动帮你来做的,最重要的原因是很多国家和地区对数据本身有一定的独立性要求,比如欧盟要求数据放在欧盟的 region 里边,AWS 是不能把数据从 region 里主动让它离开的,这个数据拷贝的动作一定要用户自己操作才能进行。

关于数据库

Q:RDS 的 Multi-AZ 部署支持 SQL Server 吗?

方国伟:我们最新宣布支持 SQL Server,这样四个数据库类型(My SQL、Oracle、 PostgreSQL 和 SQL Server)都支持 Multi-AZ Deployment 了。

Q:原来部署到 Windows+MySQL 上的 BS 应用,如果要部署到 AWS,应该做哪些大的改动?

方国伟:不需要大的改动,Windows 用 EC2,MySQL 可用 EC2 也可以用 RDS 服务。AWS 的兼容性很好的。

Q:DynamoDB 怎么进行备份?

方国伟:一般情况下是不需要用户做备份,因为我们已经帮你备了三个拷贝,甚至更多。不过多个拷贝是在一个 region 里面的,如果你对数据可靠性要求非常高,可以跨 region 做拷贝,这个备份也非常简单。

Q:当数据库 master 出现问题后,切换到 slave,是否支持可写?如果支持可写,是否会出现 master 和 slave 互为双写的情况?

方国伟:是支持可写的,因为 Multi-AZ 部署是完全切换,这个跟 Read Replica 不太一样. 在 RDS 服务里,对数据库的两个相关的服务,一个就是 Multi-AZ 部署,Multi-AZ 部署完全是一个主拷贝和一个副拷贝,也就说这两个是同步复制的,一般所有的访问都是针对那个 master 拷贝的,当 master 拷贝出问题的时候,它会自动切换,这个访问不是通过 IP 的,而是通过 Domain Name,所以对应用程序来讲,它是透明的。如果应用 Read Replica,那当然可以把一些读操作放到 Read Replica 上面,那这个跟 Multi-AZ 又不太一样。

master 和 slave 互为双写?不会的,因为它始终同时只有一个是写的,要保持数据的一致性。

Q:SQS 最高是多少并发,需不需要做 HA?

方国伟:一般来讲这个不是问题,你不需要做 HA,SQS 本身就是高可用的,而且它是 Auto Scaling,我们有非常大批量的用户在用都没有问题。

关于 Auto Scaling

Q:自动修复的功能,如果启动新的虚机,怎么部署代码啊?

方国伟:一般来讲有两大类方法。第一类,你把应用的代码做在 AMI 里面。Auto Scaling 也好,还是你自己启动一个 Instance 也好,我们肯定会用到一个 AMI,这样你新建了那个 Instance 里面就已经包含了你要部署的代码,你要部署的运行时环境,中间件等等。但是有的同学问,我的应用可能会有不同版本,或者改变比较多,那这个部署太不灵活了,所以我们另外还有办法,你在部署以后可以通过 EC2 有一个特性 user data 来实现,当应用部署启动 Instance 后,user data 会帮你执行一段脚本,或者可以传进去一些参数给脚本,你他指定他从某个地方,比如 S3 上面下载一个新的程序的代码,然后在 Instance 启动之后去执行。将这两种方式结合起来,一般可以满足绝大部分用户关于动态软件和代码的需求。

Q:Auto Scaling 策略需要编程实现吗?

方国伟:一般不需要。Auto Scaling 实现需要用户做三个事情:

  1. 配置 launch configuration,launch configuration 存储了一个 Instance 以后,它应该是包含什么样的信息,用哪个 AMI,放在哪个 region 里面,用哪几个 AZ。
  2. 建个 Auto Scaling Group,设置最少有多少个 Instance,最大多少个 Instance。
  3. 最后一个 Scaling policy,它定义了如果 CloudWatch 监控到超过预值后,要做个什么操作,这个操作大部分情况下是不需要编码来做的。当然除非特别复杂,你可以定制来做一些事情。

Q:这个健康监测是 AWS 提供的吗?

方国伟:是通过 CloudWatch 提供的,用户也可以自己配置一些监控指标。

Q:启动新的 EC2 实例,需要加载 Image,AMI。Image 可以定制吗?加载自己的 (custom) 吗?

方国伟:当然可以的。AMI 的来源有几种方式,你可以用 AWS 官方提供的,或者社区提供的。当然社区提供的 AMI 要要做安全方面检查。当然你可以自己定制 AMI,我们有专门的工具和 API 来帮你定制。对于绝大部分用户,比较常用的方式是使用官方提供的 AMI,然后在此基础上自己做镜像,而不是所有操作系统,所有环境从头开始自己来做。

Q:EC2 实例的镜像(AMI)是不是可以事先准备好,使用的时候直接使用?

方国伟:当然,实例的镜像都是事先准备好的。如果你根据 AMI 新建一个实例,你可以通过 EC2 create AMI 功能根据当前运行的实例生成一个 AMI,你可以把 AMI 存在你自己的地方。生成以后,可以用这个自动生成的 AMI,每个 AMI 都有 id,所以你在创建 Auto Scaling 的 launch configuration 时可以根据 id 调用需要的 AMI。

Q:Auto Scaling 对 windows 和 Linux 的 AMI 有区别吗?

方国伟:Auto Scaling 使用过程在 Windows、Linux 上没有区别,在我们平台上面都有支持的,没有问题。

Q:SQS 是顺序保证的吗?

方国伟:不保存,我们不保证 first in first out,SQS 能保证不丢。但是顺序保证,通常需要通过应用程序层来实现。

Q:我们需要考虑 CDN 吗?

方国伟:我们全球有 CDN 服务 Cloud Front,我们全球现在应该有 51 个点。国内我们会用合作伙伴的 CDN 设施,我们现在官方推荐的是网宿。

关于 AWS 中国的服务

Q: AWS 什么时候在中国商用?

方国伟:现阶段还处于有限预览阶段,只针对邀请客户开放。如果需求,建议联系 AWS 的销售人员。

Q:AWS 有没有中文版?

方国伟:我们国内的版本就有中文版,如果你是有限预览用户,你可能已经看到了。如果你需要使用,你可以在 www.amazonaws.cn 上面申请。当然目前并不是申请了就能用,原因很多了。申请之后,我们销售可能会跟你联系,我们内部会有个排队的过程。基本上,我们会根据用户的情况来筛选,哪些用户来进入有限预览名单。

Q:(AWS)有中文版试用吗?AWS 有没有针对个人开发者的一些优惠政策?例如流量或 CPU 消耗一定程度下是免费的?

方国伟:关于中国和国外的帐号或私有帐号的问题,我来解释下。首先,AWS 没有所谓的试用帐号,任何人申请的帐号都是一样的。用户可以自己区分,这个帐号是用来做测试的,另外一个帐号做生产。对 AWS 来讲,对所有的帐号是一视同仁,都是生产帐号。对开发人员来讲,我们有一个免费试用套餐,英文叫 free usage tier,目前这个套餐针对海外全球服务系统,那 free usage tier 的意思是在一定的额度下面,所有注册 AWS 帐号的用户,在一年之内免费使用这些资源。如果你想熟悉一下 AWS 的功能,你就可以用这个 free usage tier。当然,free usage tier 是给所有用户的,只要你注册了,新用户都享受这个服务,哪怕你一上来就是做生产,我们也会把 free user tier 那部分的费用,帮你从实际的帐单里面扣除。

Q:有没有渠道来申请试用呢?

方国伟:请访问www.amazonaws.cn网站,有个提交申请的链接。

Q:AWS 现在还是必须使用外币信用卡才能注册使用吗?

方国伟:AWS 全球账户是需要支持外币信用卡,但国内服务开放后会公布国内的支付方式。

Q:AWS 在国内有没有国内建 AZ?

方国伟:那当然了,我们商用的时候肯定会有多个 AZ。 第一个 region 在北京,所以整个数据中心都会在北京地区,我们是跟合作伙伴合作的。根据我们去年 12 月份发布的计划,第二个 region 会在宁夏。

Q:有没有联系方式?

方国伟:我的微博是 @方国伟 _ 云端,邮箱是 guowfang@amazon.com 。

AWS 能部署应用

Q:AWS 对应用有要求吗,什么样的应用架构适合部署到 AWS 上?除了使用 AWS 的组件之外,对应用本身有没有什么要求,才能实现云应用的高可用性。

方国伟:如果你的应用只是要部署在 AWS 上,这个要求是非常低的,你的应用只要可以部署在虚拟环境,理论上差不多就可以运行在 AWS 上面。但是,如果你的应用要充分利用云计算平台的一些特性,尤其是高弹性、高可靠性、高可用性这些云的特点,那你对应用本身就需要做一些在架构上的调整。今天的讲座更多侧重在高可用性方面,6 月 17 日还有个讲座“如何通过架构设计来体现应用本身的弹性”,这是两个不同的维度来看应用。所以说,如果你要充分利用云平台一些特性,那在应用架构上需要做些调整。(InfoQ 注:6 月 7 日在上海 IC 咖啡 QClub 技术沙龙上,方国伟与 Autodesk 高级软件工程师丁建将分享AWS 云平台上建立规模应用的实践,你可以与两位专家当面交流,参会者将获得 AWS 纪念 T 恤及 25 美金 AWS 抵扣券,欢迎免费报名。)

Q:哪些 AWS 服务是可以跨 region 的呢?

方国伟:绝大部分 AWS 服务都是在一个 region 里面的,只有很少的服务可以跨 region 的。身份认证和访问控制(IAM),Route53,CloudFront(CDN),web console 是跨 region 的。

案例资料

Q:海外的 AWS 案例,有一些介绍么?

方国伟:请访问 aws.amazon.com 上的 case study 资料,上面有许多案例。

Q:讲座的 PPT 可以提供吗?

方国伟:你回头关注一下我们的博客,我们博客会提供 Link,大家可以去下载的。我们国内会有一个中文的博客,应该是 blog.csdn.net/awschina。(InfoQ 注:在所有注册本期在线课程的用户都会受到答谢 EDM,EDM 中同样有PPT 下载地址)。


感谢方国伟对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

AWS云计算语言 & 开发架构