本站提供互联网编程技术交流分享,部分技术教程不断更新中,请随时关注或联系我寻求帮助 ,同时也欢迎有兴趣的朋友进行投稿。

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

AWS 熊哥club 7537℃ 3评论

怎样把一个系统从单个用户扩展到千万用户以上呢?AWS专家Joel Williams不久前曾就此做了精彩的演讲;本文针对Joel的演讲内容整理而来。
如何在AWS上部署千万用户级别服务?

基础架构

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等)。
  • 不断优化你的应用和整个架构堆栈,针对瓶颈进行分析并找出解决方法。

本文地址: https://www.xiongge.club/aws/715.html

转载请注明:熊哥club如何在AWS上部署千万用户级别服务?

©熊哥club,本站推荐使用的主机:阿里云,CDN建议使用七牛云


关注微信公众号『熊哥club』

免费提供IT技术指导交流
  关注博主不迷路~

喜欢 (3)
[您的支持是我最大的动力]
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(3)个小伙伴在吐槽
  1. 太强悍了,这种需求不是我看得懂的!
    米粒博客2016-07-09 10:04 回复
  2. 太复杂了 不看了 哈哈
    BanYuner2016-07-01 12:04 回复
×
订阅图标按钮