大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

如何在 AWS 云平台上构建千万级用户应用

  • 2014-06-12
  • 本文字数:2019 字

    阅读完需:约 7 分钟

AWS 服务概述

高扩展性应用建设并非把应用直接迁移到云平台上就能轻易实现,相反我们需要根据云平台的特性进行专门的设计,这包括选择合适的云服务类型并进行良好的应用架构设计。对于希望基于 AWS 构建千万级用户应用的开发者而言,不仅需要对区域(Region)、可用区(AZ)和边缘站点等基础设施的分布有所了解,更需要了解不同的 AWS 服务各自的特点和最佳实践。

AWS 的服务可大致按照其所处层面分为三类,从下到上依次是基础服务层、应用服务层、部署和管理层。基础服务层也有两层,下层是计算(EC2、WorkSpaces)、存储(S3、EBS、Glacier、Storage Gateway)、网络(VPC、Direct Connect、ELB、Route53),上层是数据库(RDS、Dynamo、ElastiCache、RedShift)、数据分析(EMR、Data Pipeline、Kinesis)、内容分发(CloudFront)。应用服务层主要是把邮件服务、消息队列服务等通用的功能单独抽离出来。部署和管理层则有用于监控的 CloudWatch,用于部署运维工作的 BeanStalk、OpsWorks、CloudFormation 和 CloudTrail 等,以及 IAM、Federation 等身份管理服务。

单机到多实例

传统的单机服务,到 AWS 上面就是跑在一个 EC2 实例上,这个实例上跟以前的服务器一样上面安装所有的 Web 应用、数据库等,搭配一个 EIP,外部用 Route53 做 DNS。遇到瓶颈后,简单的扩展就是将小的实例换成大的实例,比如 small 换成 2xlarge、8xlarge,服务结构不变,可以快速实现,但是最终都会遇到极限。

到了这一步,就要从单实例服务变成多实例。这一步骤涉及到 Web 实例和数据库实例的拆分,数据库可以开始考虑选择 SQL 或者 NoSQL。SQL 大家比较熟悉,优点很明显,缺点主要在规模变大之后呈现,不过一般对于百万级用户量内的应用,SQL 是能够满足需求的;但如果数据量增长速度很快,数据是非结构化或者半结构化的,应用要求的延时低、写入的速度要求快,那考虑 NoSQL 会更合适一些。

几百个用户的情况,一个 RDS 实例 + 一个 Web 实例即可满足需求,前端直接用一个 EIP,即单机的情况;用户上千的情况,建议启动两个 RDS 实例 +Web 实例并将实例部署在不同的可用区,前端用 ELB 做负载均衡。

对于百万级以下用户的规模,每一个可用区内会有多个 Web 实例和 RDS 实例组成的集群,其中 Active RDS 实例和 Standby RDS 实例要放在不同的可用区,其他 RDS 实例均为只读。

到了这个规模之后,再要往上扩展到百万级,就需要改变部分工作负载的设计方式了。

改变部分工作负载的设计方式

第一步可以引入 S3 和 CloudFront。把静态内容从 Web 实例中迁移到 S3 上,适合的文件类型包括静态数据(CSS、JS、图片、视频)、日志、备份等。S3 具备 11 个 9 的持久性,本身是海量存储,可以支撑大量的并发访问,而且成本很低。CDN 方面,CloudFront 以 Web Service 接口的方式提供服务,支持动态和静态内容、流式视频,支持根域,支持客户化 SSL 证书。

第二步可以引入 ElastiCache 和 DynamoDB。ElastiCache 是托管的 Memcached 和 Redis 服务,API 是一样的,两者都是非常快的缓存服务(毫秒级别),区别在于 Memcached 使用一个 AZ,Redis 可以跨 AZ 复制。DynamoDB 是 NoSQL 服务,后台存储基于 SSD,平均延时在毫秒级别。

这时候我们可以开始考虑弹性的问题,即应用的自动扩展。弹性的实现有四个前提:

  1. 完善的、基于指标的监控体系
  2. 自动化构建
  3. 自动化部署
  4. 集中化日志管理

在 AWS 上实现自动构建部署,可以选择 Beanstalk、OpsWorks 或 CloudFormation,也可以完全自己写脚本配合定制 AMI 来实现。Elastic Beanstalk 是全自动化的,基于容器实现,适合常规的 Web 应用;OpsWorks 是半自动化的,适合较为复杂的应用开发流程,可以对资源配给、配置管理、应用部署、软件升级、监控、身份控制进行定制化;CloudFormation 是基于模板的管理模式,可定制的范围更大。

如果以上都做到,那么一个百万级用户量的应用基本上可以比较好的管理起来。进一步到千万级用户量的规模,我们需要更多的引入面向服务的架构设计,即 SOA。

SOA、SOA、SOA

SOA 在 04、05 年讲得比较多,到现在基本上已经是大家都认可的做法,非常适合大规模应用的场景,其核心在于松耦合。

比如消息队列服务 SQS,加在模块 A 和模块 B 之间,这样即使模块 A 宕掉了,模块 B 也仍然可以正常运行一段时间。美国大选网站就是采用了这样的思路,在 SQL 实例压力大的时候把实例关掉,换上一个更大的实例,因为前面有 SQS 顶着才可以这样做。

而 AWS 上的通知服务(SNS)、邮件服务(SES),也建议大家多多采用,而不要自己搭建 Web 实例来做,因为此类服务在处理海量请求方面的能力要远远超过一般的实现。

千万级规模对数据库的性能挑战是很大的,对于 SQL,联邦(federation)、分片(sharding)都是常用的方法,将“热”表、快速写数据迁移到 NoSQL 也是一种思路。应用的性能挑战方面,重点则在于即时获得反馈(完善实时的监控 + 报警),以及持续的调优各个模块。

参考资料

2014-06-12 01:483924

评论

发布
暂无评论
发现更多内容

如何快速获取抖音新用户/用户信息

谷云科技RestCloud

抖音 数据同步 ETL

普及旗舰音质,打造一加用户首选!一加 Buds 3定档1月4日发布

编程猫

2023 年中国金融级分布式数据库市场报告:TiDB 位列领导者梯队,创新能力与增长指数表现突出

PingCAP

数据库 TiDB

构建高效数据流转的 ETL 系统:数据库 + Serverless 函数计算的最佳实践

阿里巴巴云原生

阿里云 Serverless 云原生

按图搜索淘宝商品接口(拍立淘)(Taobao.item_search_img)

tbapi

按图搜索淘宝商品接口 图片搜索商品接口 图片搜索API接口 拍立淘API接口 淘宝图片搜索接口

高效打通,释放人力——聚道云软件连接器助力生产制造行业人力资源信息交互

聚道云软件连接器

多语言应用监控最优选,ARMS 应用监控 eBPF 版正式发布

阿里巴巴云原生

阿里云 云原生

为什么市场称SoBit 是铭文跨链赛道真正的龙头?

股市老人

看孙玲TEDX演讲有感

五月的风

Solana 生态铭文跨链桥 Sobit 是何神圣?其场外白名单已达到1200U

股市老人

云原生场景下月省 10 万元资源成本,这家企业做对了什么

阿里巴巴云原生

阿里云 容器 云原生

Solana 生态铭文跨链桥 Sobit 是何神圣?其场外白名单已达到1200U

BlockChain先知

轻松搭建基于服务网格的 AI 应用,然后开始玩

阿里巴巴云原生

阿里云 云原生 asm

实时渲染与离线渲染优势浅析-3D可视化技术

3DCAT实时渲染

云渲染 实时渲染

聚道云受邀参加【中国算谷·智慧庆阳】算力行动推进大会

聚道云软件连接器

C 语言中的 switch 语句和 while 循环详解

小万哥

程序人生 编程语言 软件工程 C/C++ 后端开发

云原生时代的安全变化趋势

穿过生命散发芬芳

聚道云实现浙商银行与易快报完美互通,助力企业财务完成数字化转型

聚道云软件连接器

内嵌AI智能会议、AI临时分身、AI降噪等创新技术,ThinkPad X1 Carbon AI发布

科技范儿

TiDB 助力保险业首个全栈自主的核心保单系统成功投产

PingCAP

数据库 TiDB 保险业

TiDB 7.1 多租户在中泰证券中的应用

PingCAP

数据库 TiDB

场外白名单达到1200U?Solana 生态铭文跨链桥 Sobit 是何神圣?

石头财经

边缘计算:将未来的计算力带到你的指尖

啊川..

Kubernetes调试终极武器: K8sGPT

俞凡

人工智能 Kubernetes SRE ChatGPT

七功能遥控编解码芯片

芯动大师

TiDB 7.5 LTS 发版丨提升规模化场景下关键应用的稳定性和成本的灵活性

PingCAP

数据库 TiDB pingCAP

Kubernetes常见的三种网络插件Flannel、Calico、Weave Net的比较:

虚实的星空

0.1+0.2≠0.3,揭秘Python自带的Bug

程序员晚枫

Python

如何在AWS云平台上构建千万级用户应用_亚马逊云科技_sai_InfoQ精选文章