NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

如何在 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:483398

评论

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

从技术到服务,小鹅通成功的「底层逻辑」是什么?

ToB行业头条

仓储执行系统(WES)

申扬科技

WCS wms WES 仓储执行系统

深入了解现代web浏览器(第一部分)

GKNick

如何认知新技术?区块链技术和应用

百度开发者中心

区块链 最佳实践 方法论

强化学习中,Q-Learning与Sarsa的差别有多大?

行者AI

强化学习

python通过PyQt5实现登录界面

Python研究者

8月日更

PyFlink 开发环境利器:Zeppelin Notebook

阿里云大数据AI技术

久等了!【Innovation 2021】网易应用创新开发者大赛正式开赛!

网易云信

开源 架构 开发者 网易 语言 & 开发

业界首个高性能交互式自动标注工具——EISeg正式开源!

百度大脑

人工智能 开源

每天学习 10 个实用Javascript代码片段(六)

devpoint

mathjs 加密函数 随机数 8月日更

Filecoin价格今日行情:filecoin价格还能怎么走?

区块链 分布式存储 IPFS filecoin价格 filecoin行情

新思科技软件组成分析解决方案获得Forrester Wave认可

InfoQ_434670063458

新斯科技 Forrester 软件组成分析

比特币矿池如何触底反弹?比特币矿企的未来出路在哪里?

CECBC

安卓工控主板通信接口有哪些呢?

双赞工控

安卓主板 工控主板

Python代码阅读(第18篇):变形词判断

Felix

Python 编程 Code Programing 阅读代码

HTTP接口测试基础【FunTester框架教程】

FunTester

自动化测试 教程 接口测试 测试框架 FunTester

如何搭建SpringcloudAlibaba基础环境(一)

不焦躁的程序员

Java 微服务

neo4j 安装与基本操控

escray

学习 neo4j 8月日更

filecoin挖矿教程?filecoin挖矿收益如何?

区块链 分布式存储 IPFS filecoin挖矿 filecoin收益

阿里大牛肝出的443页TCP/IP协议趣谈笔记,竟然在GitHub标星27k+

Java 编程 架构 面试 架构师

你真的了解二叉树吗?(手撕算法篇)

有道技术团队

二叉树 网易有道

英特尔的碳中和版图

科技新消息

网络攻防学习笔记 Day116

穿过生命散发芬芳

网络安全 8月日更

Baetyl推动边云融合 点亮智能物联网

百度大脑

人工智能 开源

Linux内核内存管理:地址转换和MMU

Linux服务器开发

操作系统 内存管理 Linux内核 内核开发 地址转换

为什么Kafka的数据不写了?

BUG侦探

DNS gopack Linux操作系统

如何利用FL Studio编曲--入门级

懒得勤快

区块链技术如何在涉诉信访中显身手

CECBC

服务全球用户,EMQ X Cloud 新增欧洲部署支持

EMQ映云科技

服务器 mqtt 部署与维护 Cloud emq

关于数据库应用的一些思考

石云升

数据库 8月日更

中国做ipfs公司排名?挖ipfs排名前三的公司是?ipfs矿机哪家最好?

中国做ipfs公司排名 ipfs矿机哪家最好 挖ipfs排名前三的公司是

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