# 在 Amazon AWS 上扩展至 1100 万以上用户的入门指南
> 原文: [http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html)
![](https://img.kancloud.cn/95/37/95374ce621fa85f69d9a7a79df6398f0_225x114.png)
您如何将系统从一个用户扩展到超过 1100 万用户? [Joel Williams](https://www.linkedin.com/in/joel-williams-70257b7) ,亚马逊网络服务解决方案架构师,就该主题发表了精彩的演讲: [AWS re:Invent 2015 扩展到您的前 1000 万用户](https://www.youtube.com/watch?v=vg5onp8TU6Q&list=PLhr1KZpdzukdRxs_pGJm-qSy5LayL6W_Y)。
如果您是 AWS 的高级用户,那么本演讲不适合您,但是如果您是 AWS 的新手,云的新手或的入门者,那么这是上手的好方法 不断涌现的新功能 Amazon 不断涌现。
正如您可能期望的那样,由于这是 Amazon 的一次讲话,因此 Amazon 服务始终是解决任何问题的中心。 他们的平台表现令人印象深刻且具有启发性。 通过将各个部分组合在一起,很明显,亚马逊在确定用户需求并确保他们拥有该领域的产品方面做得非常出色。
一些有趣的外卖:
* 从 SQL 开始,仅在必要时移至 NoSQL。
* 一致的主题是将组件分离出来。 这使这些组件可以独立扩展和失败。 它适用于拆分层并创建微服务。
* 仅投资于使您的企业与众不同的任务,不要重蹈覆辙。
* 可伸缩性和冗余不是两个独立的概念,您通常可以同时进行。
* 没有提及费用。 这将是演讲的一个很好的补充,因为这是对 AWS 解决方案的主要批评之一。
## 基础知识
* AWS 在全球 12 个地区中。
* 区域是世界上亚马逊具有多个可用区的物理位置。 中有 [地区:北美; 南美洲; 欧洲; 中东; 非洲; 亚太地区。](https://aws.amazon.com/about-aws/global-infrastructure/)
* 可用区(AZ)通常是单个数据中心,尽管它们可以由多个数据中心构成。
* 每个可用区都足够独立,因此它们具有独立的电源和 Internet 连接。
* 可用区之间的唯一连接是低延迟网络。 例如,可用区可以相隔 5 或 15 英里。 网络足够快,您的应用程序就可以像所有可用区都在同一个数据中心中一样工作。
* 每个区域至少有两个可用区。 共有 32 个可用区。
* 使用可用区可以为您的应用程序创建高可用性架构。
* 2016 年将至少有 9 个可用区和 4 个地区。
* AWS 在全球拥有 53 个边缘位置。
* 边缘位置由 Amazon 的内容分发网络(CDN)CloudFront 和 Amazon 的托管 DNS 服务器 Route53 使用。
* 边缘位置使用户无论身在何处都可以以极低的延迟访问内容。
* 构建基块服务
* AWS 创建了许多服务,这些服务在内部使用多个可用区来实现高可用性和容错能力。 [是其中](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) [提供哪些服务的列表](http://docs.aws.amazon.com/general/latest/gr/rande.html) ,其中 可用。
* 您可以付费在应用程序中使用这些服务,而不必担心使它们自己高度可用。
* 可用区内存在的一些服务:CloudFront,Route 53,S3,DynamoDB,弹性负载平衡,EFS,Lambda,SQS,SNS,SES,SWF。
* 即使服务位于单个 AZ 中,也可以使用服务创建高可用的体系结构。
## 1 个用户
* 在这种情况下,您是唯一的用户,并且您要运行一个网站。
* 您的架构将类似于:
* 在单个实例上运行,可能是 [t2.micro](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html) 类型。 实例类型包括 CPU,内存,存储和网络容量的各种组合,使您可以灵活地为应用程序选择适当的资源组合。
* 一个实例将运行整个 [Web 堆栈]( http://whatis.techtarget.com/definition/Web-stack) ,例如:Web 应用程序,数据库,管理等。
* 将 Amazon [路由 53](https://aws.amazon.com/route53/) 用作 DNS。
* 将单个 [弹性 IP](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) 地址附加到实例。
* 运作良好,持续了一段时间。
## 垂直缩放
* 您需要一个更大的盒子。 最简单的扩展方法是选择更大的实例类型。 例如,也许 [c4.8xlarge](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/c4-instances.html) 或 [m3.2xlarge](https://aws.amazon.com/ec2/instance-types/) 。
* 这种方法称为 [垂直缩放](https://en.wikipedia.org/wiki/Scalability) 。
* 只需停止实例并选择一种新的实例类型,您就可以以更高的功率运行。
* 有多种不同的硬件配置可供选择。 您可以拥有一个带有 244 GB RAM 的系统(即将推出 2TB RAM 类型)。 或一个 40 核。 有高 I / O 实例,高 CPU 实例,高存储实例。
* 某些 Amazon 服务随附 [预置 IOPS](http://serverfault.com/questions/580568/amazon-how-do-i-know-if-i-need-provisioned-iops) 选项,以确保性能。 这个想法是,您也许可以为服务使用较小的实例类型,并利用 DynamoDB 之类的 Amazon 服务来提供可扩展的服务,因此您不必这样做。
* 垂直扩展存在一个大问题:没有故障转移,也没有冗余。 如果实例出现问题,则您的网站将死亡。 你所有的鸡蛋都放在一个篮子里。
* 最终,单个实例只能变得如此之大。 您需要做其他事情。
## 用户> 10
* 将单个 主机分离为多个主机
* 该网站的主机。
* 数据库的一台主机。 运行所需的任何数据库,但是您需要进行数据库管理。
* 使用单独的主机可以使网站和数据库彼此独立地扩展。 例如,也许您的数据库将需要比网站更大的计算机。
* 或者,也可以使用数据库服务代替运行自己的数据库。
* 您是数据库管理员吗? 您真的要担心备份吗? 高可用性? 补丁? 操作系统?
* 使用服务的一大优势在于,您只需单击即可设置多个可用区数据库。 您无需担心复制或任何此类事情。 您的数据库将高度可用且可靠。
* 您可能会想像到亚马逊有几项完全托管的数据库服务可以卖给您:
* [Amazon RDS](https://aws.amazon.com/rds/) (关系数据库服务)。 有很多选项:Microsoft SQL Server,Oracle,MySQL,PostgreSQL,MariaDB,Amazon Aurora。
* [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) 。 NoSQL 管理的数据库。
* [Amazon Redshift](https://aws.amazon.com/redshift/) 。 PB 级数据仓库系统。
* 更多 [Amazon Aurora](https://aws.amazon.com/rds/aurora/) :
* 自动存储扩展到 64TB。 您不再需要为数据配置存储。
* 最多 15 个读只读副本
* 连续(增量)备份到 S3。
* 跨 3 个 AZ 进行 6 向复制。 这可以帮助您处理故障。
* MySQL 兼容。
* 从 SQL 数据库而不是 NoSQL 数据库开始。
* 建议从 SQL 数据库开始。
* 该技术已建立。
* 有很多现有的代码,社区,支持小组,书籍和工具。
* 您不会破坏前 1000 万用户的 SQL 数据库。 差远了。 (除非您的数据很大)。
* 清晰的模式可扩展。
* 您何时需要从 NoSQL 数据库开始?
* 如果您需要在第一年存储 5 TB 的>数据,或者您的数据处理工作量非常大。
* 您的应用程序具有超低延迟要求。
* 您需要非常高的吞吐量。 您需要真正调整在读取和写入中都得到的 IO。
* 您没有任何关系数据。
## 用户> 100
* 将 单独的主机用于 Web 层 。
* 将 数据库存储在 Amazon RDS 上。 它照顾一切。
* 这就是您要做的。
## 用户> 1000
* 按照架构,您的应用程序存在可用性问题。 如果您的 Web 服务主机出现故障,则您的网站将关闭。
* 因此,您 在另一个可用区 中需要另一个 Web 实例。 可以,因为 AZ 之间的等待时间只有几位毫秒,几乎就像它们彼此相邻一样。
* 您还需要一个 从属数据库到在另一个 AZ 中运行的 RDS 。 如果主服务器有问题,您的应用程序将自动切换到从属服务器。 故障转移无需对应用程序进行任何更改,因为您的应用程序始终使用相同的端点。
* 弹性负载均衡器(ELB)已添加到配置中,以在两个可用区中的两个 Web 主机实例之间负载均衡用户。
* 弹性负载平衡器(ELB):
* ELB 是高度可用的托管负载均衡器。 ELB 存在于所有可用区中。 它是您的应用程序的单个 DNS 终结点。 只需将其放在 Route 53 中,它将在您的 Web 主机实例之间实现负载平衡。
* ELB 具有运行状况检查,以确保流量不会流向发生故障的主机。
* 无需任何操作即可缩放。 如果看到额外的流量,它将在水平和垂直方向上扩展到幕后。 您不必管理它。 随着应用程序规模的扩展,ELB 也随之扩展。
## 用户> 10,000s-100,000s
* 先前的配置在 ELB 后面有 2 个实例,实际上,您可以在 ELB 后面有 1000 个实例。 这是 [水平缩放](https://en.wikipedia.org/wiki/Scalability) 。
* 您需要向数据库和 RDS 添加更多只读副本。 这将减轻写主机的负担。
* 通过将 通过将一些流量转移到其他地方来减轻 Web 层 服务器的负载,从而考虑性能和效率。 将 Web 应用程序中的静态内容移动到 Amazon S3 和 Amazon CloudFront。 CloudFront 是 Amazon 的 CDN,可将您的数据存储在全球 53 个边缘位置。
* Amazon S3 是对象库。
* 它与 EBS 不同,它不是连接到 EC2 实例的存储,而是对象存储,而不是块存储。
* 这是存储静态内容(如 javascript,css,图像,视频)的好地方。 此类内容无需位于 EC2 实例上。
* 高度耐用,可靠性 11 9。
* 无限扩展,可根据需要抛出尽可能多的数据。 客户在 S3 中存储多个 PB 的数据。
* 支持最大 5TB 的对象。
* 支持加密。 您可以使用 Amazon 的加密,您的加密或加密服务。
* Amazon CloudFront 缓存了您的内容。
* 它在边缘位置缓存内容,以为用户提供尽可能低的延迟访问。
* 如果没有 CDN,您的用户将遇到对您的内容的更高延迟访问。 您的服务器在提供内容以及处理 Web 请求时也将承受更高的负载。
* 一位客户需要以 60 Gbps 的速度提供内容。 网络层甚至都不知道这是怎么回事,CloudFront 处理了所有事情。
* 您还可以通过将会话状态移出 Web 层来减轻负载。
* 将会话状态存储在 [ElastiCache](https://aws.amazon.com/elasticache/) 或 DynamoDB 中。
* 这种方法还可以设置系统以支持将来的自动缩放。
* 您还可以通过将数据从数据库缓存到 ElastiCache 中来减轻负载。
* 您的数据库不需要处理所有数据获取。 缓存可以处理很多工作,而数据库则可以处理更重要的流量。
* Amazon DynamoDB-托管的 NoSQL 数据库
* 您可以配置所需的吞吐量。 您可以提高要支付的读写性能。
* 支持快速,可预测的性能。
* 完全分布式且具有容错能力。 它存在于多个可用区中。
* 这是一个键值存储。 支持 JSON。
* 支持最大 400KB 的文档。
* Amazon Elasticache-托管的 Memcached 或 Redis
* 管理内存缓存集群并不能为您带来更多收益,因此让 Amazon 为您做到这一点。 那就是球场。
* 将自动为您缩放群集。 这是一种自我修复的基础架构,如果节点发生故障,则会自动启动新节点。
* 您还可以通过将动态内容转移到 CloudFront 来减轻负载。
* 许多人都知道 CloudFront 可以处理静态内容(例如文件),但也可以处理一些动态内容。 谈话中没有进一步讨论该主题,但这里的 [链接](https://aws.amazon.com/cloudfront/dynamic-content/) 。
## [自动缩放](https://aws.amazon.com/autoscaling/)
* 如果您提供足够的容量来始终处理高峰流量,例如黑色星期五,那是在浪费钱。 将计算能力与需求匹配起来会更好。 这就是 Auto Scaling 的工作,即自动调整计算群集的大小。
* 您可以定义池的最小和最大大小。 作为用户,您可以确定集群中最少的实例数和最多的实例数。
* [CloudWatch](https://aws.amazon.com/cloudwatch/) 是一项管理服务,已嵌入到所有应用程序中。
* CloudWatch 事件驱动扩展。
* 您要扩展 CPU 使用率吗? 您要扩展延迟吗? 在网络流量上?
* 您也可以将自己的自定义指标推送到 CloudWatch。 如果要按特定的应用程序扩展,可以将该指标推送到 CloudWatch,然后告诉 Auto Scaling 您要按该指标扩展。
## 用户> 500,000+
* 从先前配置中添加的是 [自动缩放组](http://docs.aws.amazon.com/gettingstarted/latest/wah/getting-started-create-as.html) 已添加到 Web 层 。 自动缩放组包括两个 AZ,但可以扩展到 3 个 AZ,最多可以位于同一区域。 实例可以在多个可用区中弹出,不仅是为了实现可伸缩性,还在于可用性。
* 该示例在每个可用区中都有 3 个 Web 层实例,但可能是数千个实例。 您可以说您要最少 10 个实例,最多 1000 个实例。
* ElastiCache 用于卸载数据库中的流行读取。
* DynamoDB 用于卸载会话数据。
* 您需要添加监视,指标和日志记录。
* 主机级别指标。 查看自动扩展组中的单个 CPU 实例,找出问题所在。
* 聚合级别指标。 查看 Elastic Load Balancer 上的指标,以了解整个实例集的性能。
* 日志分析。 查看应用程序使用 [CloudWatch](https://aws.amazon.com/about-aws/whats-new/2014/07/10/introducing-amazon-cloudwatch-logs/) 日志告诉您什么。 [CloudTrail](https://aws.amazon.com/cloudtrail/) 可帮助您分析和管理日志。
* 外部站点性能。 了解您的客户看到的最终用户。 使用新遗物或 Pingdom 之类的服务。
* 您需要知道客户在说什么。 他们的延迟不好吗? 他们转到您的网页时会收到错误消息吗?
* 尽可能从配置中压缩性能。 Auto Scaling 可以提供帮助。 您不希望 CPU 使用率达到 20%的系统。
## 自动化
* 基础架构越来越大,可以扩展到数千个实例。 我们已经阅读过副本,可以水平缩放,但是我们需要一些自动化来帮助管理所有内容,我们不想管理每个实例。
* 自动化工具具有层次结构。
* 自己做 :Amazon EC2,AWS CloudFormation。
* 更高级别的服务 :AWS Elastic Beanstalk,AWS OpsWorks
* [AWS Elastic Beanstalk](https://aws.amazon.com/elasticbeanstalk/) :自动管理应用程序的基础架构。 这很方便,但没有太多控制权。
* [AWS OpsWorks](https://aws.amazon.com/opsworks/) :一个在其中分层构建应用程序的环境,您可以使用 Chef 食谱来管理应用程序的层。
* 还使您能够进行持续集成和部署。
* [AWS CloudFormation](https://aws.amazon.com/cloudformation/) :使用时间最长。
* 提供了最大的灵活性,因为它提供了堆栈的模板化视图。 它可以用于构建整个堆栈或仅堆栈的组件。
* 如果要更新堆栈,请更新 Cloud Formation 模板,它将仅更新应用程序的这一部分。
* 有很多控制权,但不太方便。
* [AWS CodeDeploy](https://aws.amazon.com/codedeploy/) :将代码部署到一组 EC2 实例。
* 可以部署到一个或数千个实例。
* 代码部署可以指向自动扩展配置,因此代码可以部署到一组实例。
* 也可以与 Chef 和 Puppet 结合使用。
## 解耦基础架构
* 使用 [SOA](https://en.wikipedia.org/wiki/Service-oriented_architecture) / [微服务](http://techblog.netflix.com/2015/02/a-microscope-on-microservices.html) 。 从您的层中取出组件并将它们分开。 创建单独的服务 ,就像将 Web 层与数据库层分开一样。
* 然后可以独立扩展各个服务。 这为扩展和高可用性提供了很大的灵活性。
* SOA 是 Amazon 构建的架构的关键组成部分。
* 松耦合使您自由。
* 您可以分别缩放组件和使组件失败。
* 如果工作程序节点无法从 SQS 提取工作,这有关系吗? 不,只是开始另一个。 事情将会失败,让我们建立一个处理失败的架构。
* 将所有内容设计为黑匣子。
* 解耦交互。
* 支持具有内置冗余和可伸缩性的服务,而不是自己构建。
## 不要重新发明轮子
* 仅投资于使您的业务与众不同的任务。
* 亚马逊拥有许多固有的容错服务,因为它们跨越多个可用区。 例如:排队,电子邮件,代码转换,搜索,数据库,监视,指标,日志记录,计算。 您不必自己构建这些。
* [SQS](https://aws.amazon.com/sqs/) :排队服务。
* 提供的第一个 Amazon 服务。
* 它跨越多个可用区,因此具有容错能力。
* 它具有可扩展性,安全性和简单性。
* 排队可以通过帮助您在基础结构的不同组件之间传递消息来帮助您的基础结构。
* 以 Photo CMS 为例。 收集照片并对其进行处理的系统应该是两个不同的系统。 他们应该能够独立扩展。 它们应该松耦合。 摄取照片并将其放入队列中,工作人员可以将照片从队列中拉出并对其进行处理。
* [AWS Lambda](https://aws.amazon.com/lambda/) :您可以在不配置或管理服务器的情况下运行代码。
* 出色的工具,可让您解耦应用程序。
* 在 Photo CMS 示例中,Lambda 可以响应 S3 事件,因此,当添加 S3 文件时,将自动触发要处理的 Lambda 函数。
* 我们已经取消了 EC2。 它可以为您进行扩展,并且无需管理任何操作系统。
## 用户> 1,000,000+
* 要达到一百万个以上的用户,则需要满足以上所有条件:
* 多可用区
* 层之间的弹性负载平衡。 不仅在 Web 层上,而且在应用程序层,数据层和您拥有的任何其他层上。
* 自动缩放
* 面向服务的体系结构
* 使用 S3 和 CloudFront 巧妙地服务内容
* 将缓存放在数据库前面
* 将状态移出 Web 层。
* 使用 [Amazon SES](https://aws.amazon.com/ses/) 发送电子邮件。
* 使用 CloudWatch 进行监视。
## 用户> 10,000,000+
* 随着规模的扩大,我们会遇到数据层的问题。 与 [写入主机](https://en.wikipedia.org/wiki/Multi-master_replication) 争用时,您的数据库可能会遇到问题。 。
* 您如何解决?
* 联盟
* 分片
* 将某些功能移至其他类型的数据库(NoSQL,图形等)
* 联合身份验证-基于功能分为多个 DB
* 例如,创建一个论坛数据库,一个用户数据库,一个产品数据库。 您以前可能将它们放在单个数据库中,现在将它们分发出去。
* 不同的数据库可以彼此独立地扩展。
* 缺点:您无法进行跨数据库查询; 这会延迟进入下一个分片策略。
* 分片-在多个主机之间拆分一个数据集
* 在应用层更加复杂,但是对可伸缩性没有实际限制。
* 例如,在用户数据库中,用户的⅓可能会发送到一个分片,最后三分之一发送到另一个分片,另一个分片发送到另外三分之一。
* 将某些功能移至其他类型的数据库
* 开始考虑 NoSQL 数据库。
* 如果您的数据不需要排行榜,例如排行榜,快速获取点击流/日志数据,临时数据,热点表,元数据/查找表,则可以考虑将其移至 NoSQL 数据库。
* 这意味着它们可以彼此独立缩放。
## 用户> 1100 万
* 缩放是一个迭代过程。 随着您变得更大,总会有更多您可以做。
* 微调您的应用程序。
* 更多 SOA 的功能/特性。
* 从多可用区转到多区域。
* 开始构建自定义解决方案,以解决您以前从未有人做过的特定问题。 如果您需要为十亿客户提供服务,则可能需要定制解决方案。
* 深入分析整个堆栈。
## 审核中
* 使用多可用区基础结构来提高可靠性。
* 利用自扩展服务,例如 ELB,S3,SQS,SNS,DynamoDB 等。
* 在每个级别构建冗余。 可伸缩性和冗余不是两个独立的概念,您通常可以同时进行。
* 从传统的关系 SQL 数据库开始。
* 在基础结构内部和外部缓存数据。
* 在基础架构中使用自动化工具。
* 确保您具有良好的指标/监视/日志记录。 确保您正在查找客户对应用程序的体验。
* 将层划分为单独的服务(SOA),以便它们可以彼此独立地扩展和失败。
* 准备使用自动缩放功能。
* 除非绝对必要,否则不要重新发明轮子,而是使用托管服务而不是自己编写代码。
* 如果可行,请转移到 NoSQL。
## 延伸阅读
* [在 HackerNews](https://news.ycombinator.com/item?id=10885727) 上/ [在 Reddit](https://www.reddit.com/r/sysadmin/comments/40hon7/a_beginners_guide_to_scaling_to_11_million_users/) 上
* [http://aws.amazon.com/documentation](http://aws.amazon.com/documentation/)
* [http://aws.amazon.com/architecture](http://aws.amazon.com/architecture/)
* [http://aws.amazon.com/start-ups](http://aws.amazon.com/start-ups)
* [http://aws.amazon.com/free](http://aws.amazon.com/free)
* 从 2007 年开始: [Amazon Architecture](http://highscalability.com/blog/2007/9/18/amazon-architecture.html)
不错的文章。 请更正用于启动的链接。 (对 http://aws.amazon.comstart-ups 的开放应该是 http://aws.amazon.com/start-ups/)
即使对于可伸缩性专业人员来说,这也是一篇出色的,易于上手的文章。 做得好
此设置每月将耗费疯狂的$。 AWS 是一种将 VC 美元间接注入亚马逊银行账户的好方法。
如果人们实际上对 TCO / ROI 持认真态度,那么人们就必须停止对价格过高的 VM 的炒作,而回到裸机解决方案。
这是非常依赖于应用程序的,但是对于每个级别的用户,可以期望每秒钟的事务/请求范围是多少?
@帕特里克
是的,但是没有。
正是在这个主题上,我们进行了荒谬的成本分析。 实际上,在我们系统运营的每个领域中,AWS 都能为我们节省大量资金。 某些 AWS 服务的成本仅为内部成本的 1/3。
每当您看到整个世界都朝着某种趋势发展时,尤其是当该“世界”主要由聪明人和百万富翁(他们真的很喜欢保留/赚钱)组成时,您应该假设其可能不仅仅是“炒作”或 “时尚”。
五年前的数字有所不同,但是自那时以来,AWS 已将价格降低了一半或更多。 除非您的计算器坏了,否则我将很难得出任何其他结论。
我的经验主要是在 AWS ..上,但是 Google 的云的价格相当,并且我认为其他 IaS 和 PaS 提供商的价格差异可以忽略不计。
所以,我的建议是:仔细看..然后跳上马车或开始计划退休
AWS CloudFormation 的问题一直是大型 JSON 脚本的笨拙-没有一致的添加注释的方式,笨拙的模块化故事以及没有向后引用。
通过使用 yaml 编写模板,然后使用 [YAML Stratus](https://github.com/kikinteractive/yaml-stratus) 转换为所需的 JSON,我们一直在解决此问题。 Yaml 支持注释,向后引用,并且 yaml stratus 添加 yaml 扩展以包括其他具有覆盖的 yaml 脚本以及编译时参数化。
@卢克·查弗斯
是的,但是你错了。
AWS 总是比裸机中的裸机贵,大约是 10 到 100 倍。 部署这样的复杂设置(更糟糕的是,大多数应用程序永远都不需要)时,情况更糟。
Modern 的速度非常快,基本的中型服务器每天可以支持数百万个请求,而将高可用性加倍则很便宜。 即使在云中,除非您确实需要,最好还是坚持使用基本 VM 而不是所有托管服务。
从您的评论来看,好像是您的计算器坏了,或者您只是在为 AWS 工作。
我有点不同意 RDS 观点。 如果您甚至具有基本的 db-administraton 技能,请不要使用 RDS。AmazonsRDS 对数据库使用 EBS 驱动器的速度非常非常慢。一种更好的方法是将实例存储 SSD 驱动器用于您不需要的临时存储物 需要持久化(tempdb,事务日志(如果您知道自己在做什么以及如何在没有日志的情况下还原数据库)等)。
除了我的这个小小的评论-很棒的帖子,谢谢
你好
我已经将 RDS 用于我的应用程序之一,该应用程序处理数百万个实时社交媒体数据。 通过所有优化,我们可以在中等亚马逊实例中使用 mysql mysql 来处理 1 或 2 周的数据。 随着数据量的增长,RDS 是我们关系数据库设计的帮助。
事实是,与普通解决方案相比,这是非常昂贵的,但是当您必须处理潜在的大量数据时,则值得花费。
哈哈@ colo。 当然,如果您喜欢停机和昂贵的带宽费用,请选择合适的颜色!
嘿@Alex:这个[1]说 Amazon RDS 是否支持 SSD?
[1] http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html
真正使我担心的是在 AWS 上进行扩展,这就是为什么喜欢 Cloudways 的原因,因为他们可以按比例缩放服务器规模。
非常不错的文章,但我会缓和一个事实,那就是我们应该从 SQL DB 开始,然后将可能的方式切换到 No-SQL。 从 SQL 转换为 No-SQL 可能会非常痛苦(模型转换,业务代码重写,数据迁移等),而且风险很大,您永远也不会做。
因此,我建议您采取以下措施:如果您怀疑您的应用程序将支持超过 10 万个用户(并且您的业务肯定是与 No-SQL 兼容的),请直接使用 No-SQL 数据库。 您将能够轻松进行分片,使用 No-SQL 进行开发并不昂贵,并且您的应用程序可以自然扩展,而无需重新定义体系结构。
让·马克
关于裸机颜色的问题是,您需要考虑所有“成本”。 大多数决定采用裸机的人都严重低估了所需的时间和精力,其中最少的是硬件(但是,假设您使用的是专业质量的服务器硬件,而不是垃圾邮件,那么硬件仍然比您想象的要昂贵得多)。 您当地的回收场)。 特别是,您将需要一个实施团队来进行初始部署,然后*至少*由一名工作人员负责,只负责服务器的维护和维护以及最重要的虚拟化基础架构,每年的费用为 15 万美元以上 仅针对一个人-假设您可以和一个人一起停下来。 然后是数据中心不同区域的机架之间的光纤互连成本(数据中心通常具有电源和网络区域-机架位于不同的 UPS 和路由器上,但是如果您想在两个前哨站之间实现 10 GB 的快速互连, 您必须为此支付$$)。 当然,硬件本身的成本-用于互连数据库服务器和计算服务器的 10 吉比特交换机,所需的 10 吉比特卡,以及专业质量好的服务器和企业级 SSD 的价格并不便宜。 我已经为自己的业务工作了一个交叉点,这种交叉点在内部而不是通过亚马逊来进行比较便宜,尽管该交叉点的用户数远远少于 1000 万,但肯定比我们现在花费的更多 在 AWS 服务上。
关于 NoSQL,最好将其用于大量非结构化数据,例如日志数据(例如 ElasticSearch),但是现代 SQL 数据库的 ACID 保证在许多方面都非常重要。 与将 SQL 数据库简单地优化和扩展到所需的位置相比,尝试将它们横向入侵 NoSQL 数据库通常会花费更多的时间。 Twitter 使用 MySQL 处理 1.5 亿活跃用户。 已为您的时间表授予 Redis 缓存和一些自定义复制代码,但仍然:MySQL。
这是一个很棒的帖子! 我认为在某些时候提高网站效率可能比服务器规模更有效。 例如,有人说通过使用微缓存和 nginx,他们每天可以在微型 VPS 服务器上处理数百万的网页浏览。
但是话又说回来,我从来没有承受过太大的服务器负载,所以我知道什么。
非常有用的信息,请不断更新我们,.....
谢谢。 我是这个领域的初学者。 由于 AWS 昂贵,因此我使用 Linode VPS 进行托管。 这将非常有助于我在上下文中使用。 但是,如果您有关于该/其他廉价服务的经验,请与我们分享,因为 Linode 没有 AWS 提供的一些自动化服务。
人们没有解决一些问题,亚马逊可能会更昂贵,但是每当怀疑/涉及欺诈时,他们的确会听取买卖双方的意见,而 ebay 不会这样做。
超级清晰,写得很好。 谢谢
- LiveJournal 体系结构
- mixi.jp 体系结构
- 友谊建筑
- FeedBurner 体系结构
- GoogleTalk 架构
- ThemBid 架构
- 使用 Amazon 服务以 100 美元的价格构建无限可扩展的基础架构
- TypePad 建筑
- 维基媒体架构
- Joost 网络架构
- 亚马逊建筑
- Fotolog 扩展成功的秘诀
- 普恩斯的教训-早期
- 论文:Wikipedia 的站点内部,配置,代码示例和管理问题
- 扩大早期创业规模
- Feedblendr 架构-使用 EC2 进行扩展
- Slashdot Architecture-互联网的老人如何学会扩展
- Flickr 架构
- Tailrank 架构-了解如何在整个徽标范围内跟踪模因
- Ruby on Rails 如何在 550k 网页浏览中幸存
- Mailinator 架构
- Rackspace 现在如何使用 MapReduce 和 Hadoop 查询 TB 的数据
- Yandex 架构
- YouTube 架构
- Skype 计划 PostgreSQL 扩展到 10 亿用户
- 易趣建筑
- FaceStat 的祸根与智慧赢得了胜利
- Flickr 的联合会:每天进行数十亿次查询
- EVE 在线架构
- Notify.me 体系结构-同步性
- Google 架构
- 第二人生架构-网格
- MySpace 体系结构
- 扩展 Digg 和其他 Web 应用程序
- Digg 建筑
- 在 Amazon EC2 中部署大规模基础架构的六个经验教训
- Wolfram | Alpha 建筑
- 为什么 Facebook,Digg 和 Twitter 很难扩展?
- 全球范围扩展的 10 个 eBay 秘密
- BuddyPoke 如何使用 Google App Engine 在 Facebook 上扩展
- 《 FarmVille》如何扩展以每月收获 7500 万玩家
- Twitter 计划分析 1000 亿条推文
- MySpace 如何与 100 万个并发用户一起测试其实时站点
- FarmVille 如何扩展-后续
- Justin.tv 的实时视频广播架构
- 策略:缓存 404 在服务器时间上节省了洋葱 66%
- Poppen.de 建筑
- MocoSpace Architecture-一个月有 30 亿个移动页面浏览量
- Sify.com 体系结构-每秒 3900 个请求的门户
- 每月将 Reddit 打造为 2.7 亿页面浏览量时汲取的 7 个教训
- Playfish 的社交游戏架构-每月有 5000 万用户并且不断增长
- 扩展 BBC iPlayer 的 6 种策略
- Facebook 的新实时消息系统:HBase 每月可存储 135 亿条消息
- Pinboard.in Architecture-付费玩以保持系统小巧
- BankSimple 迷你架构-使用下一代工具链
- Riak 的 Bitcask-用于快速键/值数据的日志结构哈希表
- Mollom 体系结构-每秒以 100 个请求杀死超过 3.73 亿个垃圾邮件
- Wordnik-MongoDB 和 Scala 上每天有 1000 万个 API 请求
- Node.js 成为堆栈的一部分了吗? SimpleGeo 说是的。
- 堆栈溢出体系结构更新-现在每月有 9500 万页面浏览量
- Medialets 体系结构-击败艰巨的移动设备数据
- Facebook 的新实时分析系统:HBase 每天处理 200 亿个事件
- Microsoft Stack 是否杀死了 MySpace?
- Viddler Architecture-每天嵌入 700 万个和 1500 Req / Sec 高峰
- Facebook:用于扩展数十亿条消息的示例规范架构
- Evernote Architecture-每天有 900 万用户和 1.5 亿个请求
- TripAdvisor 的短
- TripAdvisor 架构-4,000 万访客,200M 动态页面浏览,30TB 数据
- ATMCash 利用虚拟化实现安全性-不变性和还原
- Google+是使用您也可以使用的工具构建的:闭包,Java Servlet,JavaScript,BigTable,Colossus,快速周转
- 新的文物建筑-每天收集 20 亿多个指标
- Peecho Architecture-鞋带上的可扩展性
- 标记式架构-扩展到 1 亿用户,1000 台服务器和 50 亿个页面视图
- 论文:Akamai 网络-70 个国家/地区的 61,000 台服务器,1,000 个网络
- 策略:在 S3 或 GitHub 上运行可扩展,可用且廉价的静态站点
- Pud 是反堆栈-Windows,CFML,Dropbox,Xeround,JungleDisk,ELB
- 用于扩展 Turntable.fm 和 Labmeeting 的数百万用户的 17 种技术
- StackExchange 体系结构更新-平稳运行,Amazon 4x 更昂贵
- DataSift 体系结构:每秒进行 120,000 条推文的实时数据挖掘
- Instagram 架构:1400 万用户,1 TB 的照片,数百个实例,数十种技术
- PlentyOfFish 更新-每月 60 亿次浏览量和 320 亿张图片
- Etsy Saga:从筒仓到开心到一个月的浏览量达到数十亿
- 数据范围项目-6PB 存储,500GBytes / sec 顺序 IO,20M IOPS,130TFlops
- 99designs 的设计-数以千万计的综合浏览量
- Tumblr Architecture-150 亿页面浏览量一个月,比 Twitter 更难扩展
- Berkeley DB 体系结构-NoSQL 很酷之前的 NoSQL
- Pixable Architecture-每天对 2000 万张照片进行爬网,分析和排名
- LinkedIn:使用 Databus 创建低延迟更改数据捕获系统
- 在 30 分钟内进行 7 年的 YouTube 可扩展性课程
- YouPorn-每天定位 2 亿次观看
- Instagram 架构更新:Instagram 有何新功能?
- 搜索技术剖析:blekko 的 NoSQL 数据库
- Pinterest 体系结构更新-1800 万访问者,增长 10 倍,拥有 12 名员工,410 TB 数据
- 搜索技术剖析:使用组合器爬行
- iDoneThis-从头开始扩展基于电子邮件的应用程序
- StubHub 体系结构:全球最大的票务市场背后的惊人复杂性
- FictionPress:在网络上发布 600 万本小说
- Cinchcast 体系结构-每天产生 1,500 小时的音频
- 棱柱架构-使用社交网络上的机器学习来弄清您应该在网络上阅读的内容
- 棱镜更新:基于文档和用户的机器学习
- Zoosk-实时通信背后的工程
- WordPress.com 使用 NGINX 服务 70,000 req / sec 和超过 15 Gbit / sec 的流量
- 史诗般的 TripAdvisor 更新:为什么不在云上运行? 盛大的实验
- UltraDNS 如何处理数十万个区域和数千万条记录
- 更简单,更便宜,更快:Playtomic 从.NET 迁移到 Node 和 Heroku
- Spanner-关于程序员使用 NoSQL 规模的 SQL 语义构建应用程序
- BigData 使用 Erlang,C 和 Lisp 对抗移动数据海啸
- 分析数十亿笔信用卡交易并在云中提供低延迟的见解
- MongoDB 和 GridFS 用于内部和内部数据中心数据复制
- 每天处理 1 亿个像素-少量竞争会导致大规模问题
- DuckDuckGo 体系结构-每天进行 100 万次深度搜索并不断增长
- SongPop 在 GAE 上可扩展至 100 万活跃用户,表明 PaaS 未通过
- Iron.io 从 Ruby 迁移到 Go:减少了 28 台服务器并避免了巨大的 Clusterf ** ks
- 可汗学院支票簿每月在 GAE 上扩展至 600 万用户
- 在破坏之前先检查自己-鳄梨的建筑演进的 5 个早期阶段
- 缩放 Pinterest-两年内每月从 0 到十亿的页面浏览量
- Facebook 的网络秘密
- 神话:埃里克·布鲁尔(Eric Brewer)谈银行为什么不是碱-可用性就是收入
- 一千万个并发连接的秘密-内核是问题,而不是解决方案
- GOV.UK-不是你父亲的书库
- 缩放邮箱-在 6 周内从 0 到 100 万用户,每天 1 亿条消息
- 在 Yelp 上利用云计算-每月访问量为 1.02 亿,评论量为 3900 万
- 每台服务器将 PHP 扩展到 30,000 个并发用户的 5 条 Rockin'Tips
- Twitter 的架构用于在 5 秒内处理 1.5 亿活跃用户,300K QPS,22 MB / S Firehose 以及发送推文
- Salesforce Architecture-他们每天如何处理 13 亿笔交易
- 扩大流量的设计决策
- ESPN 的架构规模-每秒以 100,000 Duh Nuh Nuhs 运行
- 如何制作无限可扩展的关系数据库管理系统(RDBMS)
- Bazaarvoice 的架构每月发展到 500M 唯一用户
- HipChat 如何使用 ElasticSearch 和 Redis 存储和索引数十亿条消息
- NYTimes 架构:无头,无主控,无单点故障
- 接下来的大型声音如何使用 Hadoop 数据版本控制系统跟踪万亿首歌曲的播放,喜欢和更多内容
- Google 如何备份 Internet 和数十亿字节的其他数据
- 从 HackerEarth 用 Apache 扩展 Python 和 Django 的 13 个简单技巧
- AOL.com 体系结构如何发展到 99.999%的可用性,每天 800 万的访问者和每秒 200,000 个请求
- Facebook 以 190 亿美元的价格收购了 WhatsApp 体系结构
- 使用 AWS,Scala,Akka,Play,MongoDB 和 Elasticsearch 构建社交音乐服务
- 大,小,热还是冷-条带,Tapad,Etsy 和 Square 的健壮数据管道示例
- WhatsApp 如何每秒吸引近 5 亿用户,11,000 内核和 7,000 万条消息
- Disqus 如何以每秒 165K 的消息和小于 0.2 秒的延迟进行实时处理
- 关于 Disqus 的更新:它仍然是实时的,但是 Go 摧毁了 Python
- 关于 Wayback 机器如何在银河系中存储比明星更多的页面的简短说明
- 在 PagerDuty 迁移到 EC2 中的 XtraDB 群集
- 扩展世界杯-Gambify 如何与 2 人组成的团队一起运行大型移动投注应用程序
- 一点点:建立一个可处理每月 60 亿次点击的分布式系统的经验教训
- StackOverflow 更新:一个月有 5.6 亿次网页浏览,25 台服务器,而这一切都与性能有关
- Tumblr:哈希处理每秒 23,000 个博客请求的方式
- 使用 HAProxy,PHP,Redis 和 MySQL 处理 10 亿个请求的简便方法来构建成长型启动架构
- MixRadio 体系结构-兼顾各种服务
- Twitter 如何使用 Redis 进行扩展-105TB RAM,39MM QPS,10,000 多个实例
- 正确处理事情:通过即时重放查看集中式系统与分散式系统
- Instagram 提高了其应用程序的性能。 这是如何做。
- Clay.io 如何使用 AWS,Docker,HAProxy 和 Lots 建立其 10 倍架构
- 英雄联盟如何将聊天扩大到 7000 万玩家-需要很多小兵。
- Wix 的 Nifty Architecture 技巧-大规模构建发布平台
- Aeron:我们真的需要另一个消息传递系统吗?
- 机器:惠普基于忆阻器的新型数据中心规模计算机-一切仍在变化
- AWS 的惊人规模及其对云的未来意味着什么
- Vinted 体系结构:每天部署数百次,以保持繁忙的门户稳定
- 将 Kim Kardashian 扩展到 1 亿个页面
- HappyPancake:建立简单可扩展基金会的回顾
- 阿尔及利亚分布式搜索网络的体系结构
- AppLovin:通过每天处理 300 亿个请求向全球移动消费者进行营销
- Swiftype 如何以及为何从 EC2 迁移到真实硬件
- 我们如何扩展 VividCortex 的后端系统
- Appknox 架构-从 AWS 切换到 Google Cloud
- 阿尔及利亚通往全球 API 的愤怒之路
- 阿尔及利亚通往全球 API 步骤的愤怒之路第 2 部分
- 为社交产品设计后端
- 阿尔及利亚通往全球 API 第 3 部分的愤怒之路
- Google 如何创造只有他们才能创造的惊人的数据中心网络
- Autodesk 如何在 Mesos 上实施可扩展事件
- 构建全球分布式,关键任务应用程序:Trenches 部分的经验教训 1
- 构建全球分布式,关键任务应用程序:Trenches 第 2 部分的经验教训
- 需要物联网吗? 这是美国一家主要公用事业公司从 550 万米以上收集电力数据的方式
- Uber 如何扩展其实时市场平台
- 优步变得非常规:使用司机电话作为备份数据中心
- 在不到五分钟的时间里,Facebook 如何告诉您的朋友您在灾难中很安全
- Zappos 的网站与 Amazon 集成后冻结了两年
- 为在现代时代构建可扩展的有状态服务提供依据
- 细分:使用 Docker,ECS 和 Terraform 重建基础架构
- 十年 IT 失败的五个教训
- Shopify 如何扩展以处理来自 Kanye West 和 Superbowl 的 Flash 销售
- 整个 Netflix 堆栈的 360 度视图
- Wistia 如何每小时处理数百万个请求并处理丰富的视频分析
- Google 和 eBay 关于构建微服务生态系统的深刻教训
- 无服务器启动-服务器崩溃!
- 在 Amazon AWS 上扩展至 1100 万以上用户的入门指南
- 为 David Guetta 建立无限可扩展的在线录制活动
- Tinder:最大的推荐引擎之一如何决定您接下来会看到谁?
- 如何使用微服务建立财产管理系统集成
- Egnyte 体系结构:构建和扩展多 PB 分布式系统的经验教训
- Zapier 如何自动化数十亿个工作流自动化任务的旅程
- Jeff Dean 在 Google 进行大规模深度学习
- 如今 Etsy 的架构是什么样的?
- 我们如何在 Mail.Ru Cloud 中实现视频播放器
- Twitter 如何每秒处理 3,000 张图像
- 每天可处理数百万个请求的图像优化技术
- Facebook 如何向 80 万同时观看者直播
- Google 如何针对行星级基础设施进行行星级工程设计?
- 为 Mail.Ru Group 的电子邮件服务实施反垃圾邮件的猫捉老鼠的故事,以及 Tarantool 与此相关的内容
- The Dollar Shave Club Architecture Unilever 以 10 亿美元的价格被收购
- Uber 如何使用 Mesos 和 Cassandra 跨多个数据中心每秒管理一百万个写入
- 从将 Uber 扩展到 2000 名工程师,1000 个服务和 8000 个 Git 存储库获得的经验教训
- QuickBooks 平台
- 美国大选期间城市飞艇如何扩展到 25 亿个通知
- Probot 的体系结构-我的 Slack 和 Messenger Bot 用于回答问题
- AdStage 从 Heroku 迁移到 AWS
- 为何将 Morningstar 迁移到云端:降低 97%的成本
- ButterCMS 体系结构:关键任务 API 每月可处理数百万个请求
- Netflix:按下 Play 会发生什么?
- ipdata 如何以每月 150 美元的价格为来自 10 个无限扩展的全球端点的 2500 万个 API 调用提供服务
- 每天为 1000 亿个事件赋予意义-Teads 的 Analytics(分析)管道
- Auth0 体系结构:在多个云提供商和地区中运行
- 从裸机到 Kubernetes
- Egnyte Architecture:构建和扩展多 PB 内容平台的经验教训
- 缩放原理
- TripleLift 如何建立 Adtech 数据管道每天处理数十亿个事件
- Tinder:最大的推荐引擎之一如何决定您接下来会看到谁?
- 如何使用微服务建立财产管理系统集成
- Egnyte 体系结构:构建和扩展多 PB 分布式系统的经验教训
- Zapier 如何自动化数十亿个工作流自动化任务的旅程
- Jeff Dean 在 Google 进行大规模深度学习
- 如今 Etsy 的架构是什么样的?
- 我们如何在 Mail.Ru Cloud 中实现视频播放器
- Twitter 如何每秒处理 3,000 张图像
- 每天可处理数百万个请求的图像优化技术
- Facebook 如何向 80 万同时观看者直播
- Google 如何针对行星级基础设施进行行星级工程设计?
- 为 Mail.Ru Group 的电子邮件服务实施反垃圾邮件的猫捉老鼠的故事,以及 Tarantool 与此相关的内容
- The Dollar Shave Club Architecture Unilever 以 10 亿美元的价格被收购
- Uber 如何使用 Mesos 和 Cassandra 跨多个数据中心每秒管理一百万个写入
- 从将 Uber 扩展到 2000 名工程师,1000 个服务和 8000 个 Git 存储库获得的经验教训
- QuickBooks 平台
- 美国大选期间城市飞艇如何扩展到 25 亿条通知
- Probot 的体系结构-我的 Slack 和 Messenger Bot 用于回答问题
- AdStage 从 Heroku 迁移到 AWS
- 为何将 Morningstar 迁移到云端:降低 97%的成本
- ButterCMS 体系结构:关键任务 API 每月可处理数百万个请求
- Netflix:按下 Play 会发生什么?
- ipdata 如何以每月 150 美元的价格为来自 10 个无限扩展的全球端点的 2500 万个 API 调用提供服务
- 每天为 1000 亿个事件赋予意义-Teads 的 Analytics(分析)管道
- Auth0 体系结构:在多个云提供商和地区中运行
- 从裸机到 Kubernetes
- Egnyte Architecture:构建和扩展多 PB 内容平台的经验教训