
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(d性负载均衡器),它可以对主机进行健康检测以确保网络的通畅,同时可以帮助实现网络的扩展。
垂直升级
需要更强的实例类型,例如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(d性负载平衡)。除了web层,在应用层,数据层等层里也需要进行ELB。
能够自动扩展
使用面向服务的架构
缓存架构内和外的数据
使用Amazon S3和CloudFront。S3用于存储静态数据,如js,CSS,图像等,具有足够的扩展性。CloudFront可对数据进行缓存。
使用Amazon SES来进行邮件发送。
使用CloudWatch进行监控。
对数据写入执行如下的策略:
联结 – 根据功能划分不同的数据库。
分表 – 把一个数据集分解到多个主机上。
把部分功能放到其他类型的数据库上(NoSQL,graph等)。
不断优化你的应用和整个架构堆栈,针对瓶颈进行分析并找出解决方法。
本文主要讲述本人使用过程中,Amazon S3 图片客户任意上传,图片过大,导致浏加载太慢影响客户体验。
提前奉上参考资料:
1、 https://aws.amazon.com/cn/solutions/implementations/serverless-image-handler/
就是使用 AWS CloudFormation 提供的模板,在读取图片阶段进行压缩。
1、找到CloudFormation,并创建堆栈;
2、选择Amazon S3 URL,并填入模板地址,点击下一步;
模板地址: https://aws-gcr-solutions.s3.amazonaws.com/wchaws-sih/v0.1.0-wchaws-sih/lambda-image-handler.template
3、填写下图红框选项,其中:BucketParam0为需要压缩的存储桶名称。填写完成,点击下一步;
4、点击下一步,直至最后,勾选“我确认,AWS CloudFormation 可能创建 IAM 资源。”,最后完成创建。
5、创建完成后,查看详情。切换至“输出”Tab,详见下图;
6、拷贝上图红框“DistUrl0”,并替换原图地址,同时拼接:“?x-oss-process=image/format,webp”。详细 *** 作如下:
将:
https://S3.domain.com/20211105/67f1fa7e993749aba43505efd28cc8fc.jpg
替换成:
https:// {DistUrl0} /20211105/67f1fa7e993749aba43505efd28cc8fc.jpg ?x-oss-process=image/format,webp
7、访问相关地址,并对比响应时间。
PS: 该功能需要花不小的一笔费用。曾询问,压缩过后会存在缓存不纳入次数收费。具体待验证。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)