如何在AWS上部署千万用户级别服务?

如何把一个系统从单个用户扩展到千万用户以上呢?AWS专家Joel Williams不久前曾就此做了精彩的演讲;本文针对Joel的演讲内容整理而来。
图片描述

基础架构

AWS分布在全球12个区域里

  • 每个区域对应着一个地理位置,里面含有多个Availability
    Zones(可用区)。这些区域设置在北美,南美,欧洲,中东,非洲,亚太区。
  • 每个AZ实质上是单个数据中心,尽管它们可由多个数据中心构建。
  • 每个AZ有着独立的供电系统和互联网连接。
  • 不同AZ之间以低延迟网络进行连接,这种快速网络可消除物理位置带来的速度影响。
  • 每个区域含有至少两个AZ,共计32个AZs。
  • 借助AZ可创建高可用性的程序架构。

AWS在全球还分布有53个偏远区域(Edge locations)。

  • 偏远区域的使用对象是CloudFront,这是Amazon的内容分发网络(CDN)和DNS服务器。
  • 偏远区域的存在使得全球用户都可以享用低延迟网络而不论他们身在何处。建立区块服务(Block Services)
  • Amazon透过AWS创建了大量高可用和高容错的服务,具体的服务清单可点击这里查看。
  • 缴纳一定的费用,你就可以在个人的应用中使用这些服务而不必为高可用性而忧心。
  • 部分服务位于一个AZ中:CloudFront, Route 53, S3, DynamoDB, Elastic Load Balancing, EFS, Lambda, SQS, SNS, SES, SWF。
  • 即使是使用单个AZ的服务,其高可用架构也是足够强大的。

1个用户

在这个时候,开发者=用户。你的架构看起来是这样的:

  • 运行单个实例,如t2.micro。你可以为你的服务器选择不同的CPU,内存,存储设备和网络环境。
  • 该服务器承载了全部web任务,如:web应用,数据库,管理器等。
  • 使用AmazonRoute 53进行DNS管理。
  • 为该实例附加一个Elastic IP地址。

那么随着用户数的增加,我们需要如何进行升级改造,直至能为千万用户提供优质的服务呢?

优化策略

  • 采用多主机模式
  • 尝试使用Amazon数据库服务,如Amazon RDS(关系数据库),Amazon DynamoDB(NoSQL数据库),Amazon
    Redshift。
  • 逐步从SQL数据库转为NoSQL数据库,特别是数据量超过5TB,你的应用对低延迟敏感的时候。
  • 使用Elastic Load Balancer(弹性负载均衡器),它可以对主机进行健康检测以确保网络的通畅,同时可以帮助实现网络的扩展。

垂直升级

  • 需要更强的实例类型,例如c4.8xlarge或者m3.2xlarge。
  • 停止使用当前的服务器,换用功能更强大的机器,如:244GB RAM,40核CPU。
  • 某些Amazon服务提供了Provisined IOPS选项以便用户自行配置变更,这样一来用户可以使用类似DynamoDB的扩展服务。
  • 类似上面的做法就叫做垂直升级。但其有个缺点,就是一旦机器出错,你的网站也会停止运作了。所以要尽量避免单个实例的做法。

自动扩展

如果你一直在为峰值负载而努力,如黑色星期五,那么其实是在浪费金钱。

  • 更好的解决方案
  • 是按需分配,这就是Auto Scaling(自动扩展),在计算机群组中实现自动化的大小变更。
  • 你可以为你的容量池定义最大值和最小值。
  • CloudWatch是一个管理服务,已内置到所有的Amazon应用中。
  • CloudWatch事件会触发扩展。
  • 触发事件可以是CPU占用率,时间延迟,网速等等。
  • 你也可以向CloudWatch导入自定义基线,按照你的意愿来触发扩展。

架构分解

  • 使用SOA/微服务,使你的服务层组件化。
  • 这样做的好处是单独的服务可以独立地进行扩展,从而大大增加了灵活性和可用性。
  • SOA是Amazon提供的重要架构组件。

避免重复劳动

  • 把精力投入到能使你的业务与众不同的事情上。
  • Amazon提供了很多高容错的服务。例如,排队(SQS服务),邮件,转码,搜索,数据库,监控等等。所以类似的服务都不必再次编写了。

用户数>千万+

当用户达到千万级别的时候,你考虑的策略应该是这样的:

多AZs模式

  • 在不同层之间执行ELB(弹性负载平衡)。除了web层,在应用层,数据层等层里也需要进行ELB。

能够自动扩展

  • 使用面向服务的架构
  • 缓存架构内和外的数据
  • 使用Amazon S3和CloudFront。S3用于存储静态数据,如js,CSS,图像等,具有足够的扩展性。CloudFront可对数据进行缓存。
  • 使用Amazon SES来进行邮件发送。
  • 使用CloudWatch进行监控。

对数据写入执行如下的策略:

  • 联结 – 根据功能划分不同的数据库。
  • 分表 – 把一个数据集分解到多个主机上。
  • 把部分功能放到其他类型的数据库上(NoSQL,graph等)。
  • 不断优化你的应用和整个架构堆栈,针对瓶颈进行分析并找出解决方法。

译者:伍梓昆:
现就职于必维集团IT信息部,担任IT运营主管一职。热衷于计算机编程和数据库技术。
原文链接:highscalability

(责编/夏梦竹)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值