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

如何在AWS上部署千万用户级别服务,第1张

基础架构

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等)。

不断优化你的应用和整个架构堆栈,针对瓶颈进行分析并找出解决方法。

1、提供HTML静态访问

web界面上最快的访问速度是什么?当然是最原始的HTML文件访问,对于其他语言 比如 jsp ,asp,php等等,他们首先要通过服务器解析成html之后在返回给访问者,如果我们能提供全部是htm来的页面,那么就能大大的降低服务器和数据库资源的利用和提高网站的并发,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。当然实现这种方式大家比较了解的就是信息发布系统CMS,信息发布系统可以实现最简单的信息录入自动生成静态页面,还能具备频道管理、权限管理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。

在后续的文章中我们会单独的使用jsp + servlet实现一个简单的信息发布系统.

2、使用独立的图片服务器

为什么要把图片单独设置一个服务器?对于Web服务器来说,图片消耗的服务器资源是最多的,如果能把所有的图片资源放到一个单独的图片服务器中进行处理的话,可以降低提供页面访问请求的服务器系统压力,从而能进一步的提高web程序的并发.所以在有条件的情况下最好能把图片放置到一个单独的服务器中.

3、配置多台数据库服务器,多个数据库集群

集群(Cluster)技术是使用特定的连接方式,将价格相对较低的硬件设备结合起来,同时也能提供高性能相当的任务处理能力。

越是大型高并发的应用,数据库的压力就会越大,如果数据库操作很频繁,数据库的瓶颈很快就能显现出来,这时一台数据库将很快无法满足应用,于是我们需要使用数据库集群。

数据库集群就是使用多个数据库服务器分担请求的压力,达到快速响应的目的.

4、使用缓存

所谓的缓存就是把数据咱是放置到内存中,前台在请求的时候直接从内存中读取数据,而不需要去查询数据库或者读取文件等,这样就能做到最快的响应。网站架构和网站开发中的缓存是非常重要的。

目前有很多开源的缓冲实现方案,APC,File,SQLite,Memcache等等各种类库实现着不同的缓存方式,只有通过了解他们的实现方式,根据具体应用具体选择,才会使缓存系统发挥出最大的性能。

对于java开发来说,大名顶顶的 分布式缓存系统Memcache 可能是最好的选择,他提供一个基于Socket的访问方式,使得该缓存系统支持远程读写访问。尽管这个缓存的内容可能是存在内存中,也可能是存在文件内。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/805056.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-29
下一篇2023-08-29

发表评论

登录后才能评论

评论列表(0条)

    保存