规划可扩展 Web 应用程序的开发

Posted

技术标签:

【中文标题】规划可扩展 Web 应用程序的开发【英文标题】:Planning the development of a scalable web application 【发布时间】:2011-03-16 12:59:51 【问题描述】:

我们创建了一个产品,它可能会为驻留在我们服务器上的数据文件生成大量请求。目前我们有一个共享托管服务器,它运行一个 php 脚本来查询数据库并为每个用户请求生成数据文件。这效率不高,到目前为止还不是问题,但我们希望迁移到更具可扩展性的系统,因此我们正在研究 EC2。我们的主要关注点是能够在发生大量流量时处理它们,并为下载数据文件的用户提供低延迟。

我还不能 100% 确定这一切将如何运作,但这就是我们的想法:

我们使用 EC2 实例来托管我们的管理面板并生成提供给应用用户的文件。当任何管理员做出影响这些数据文件(由用户下载)的更改时,我们会使用 CloudFront 将副本复制到 S3。这里的想法是让数据缓存并在 S3 上等待,这样我们就可以缩短计算时间,并使用 CloudFront 为所有请求文件的用户提供低延迟。

我仍在学习该系统,并想知道是否有人对这个想法有任何反馈或对它如何运作的见解。我也很好奇像 Cassandra 这样的项目的目的。我的理解是,只需将我们的应用程序放在 EC2 服务器上,就可以根据服务器的性质对其进行扩展。 Cassandra 只是为了保持较低的资源使用率,还是即使在 EC2 上也有理由使用这样的系统?

CloudFront:http://aws.amazon.com/cloudfront/ EC2:http://aws.amazon.com/cloudfront/ 卡桑德拉:http://cassandra.apache.org/

【问题讨论】:

【参考方案1】:

Cassandra 是一个非关系型数据库引擎,如果这是您需要的,您应该首先评估 Amazon 的 SimpleDB:一个基于 S3 构建的非关系型数据库引擎。

如果文件只需要根据时间(每天、每小时……)更新,那么这似乎是一个合理的解决方案。但是您可以考虑在 2 个 EC2 映像前面放置一个负载均衡器,每个映像运行您的应用程序的副本。如果一个实例失败,这将使以后更容易扩展并且更安全。

您应该阅读的其他一些服务:

http://aws.amazon.com/elasticloadbalancing/ -- 亚马逊的负载均衡器解决方案。

http://aws.amazon.com/sqs/ -- 用于在您的 DA(分布式架构)中的系统之间传递消息。例如,如果您希望创建数据文件的系统与托管站点的系统不同。

http://aws.amazon.com/autoscaling/ -- 允许您根据流量调整在线实例数

确保使用 EC2 进行良好的备份过程,经常对您的操作系统驱动器进行快照,并将任何易失性数据(例如数据库文件)放在 EBS 块上。 EC2 不会经常发生故障,但当它发生时您无法访问硬件,如果您有最新的快照,您可以在线启动一个新实例。

【讨论】:

另一条评论:当您的连接来自海外时,云前端最有用。如果您的所有流量仅来自美国用户,它可能就没有那么有用了。它基本上将 S3 变成了内容交付网络 (CDN) bit.ly/2eILb【参考方案2】:

根据数据集,Cassandra 还可以显着缩短查询的响应时间。

对 NoSQL 解决方案中使用的数据结构有一个很好的解释,可以帮助您了解这是否是一个合适的解决方案:

WTF is a Super Column

【讨论】:

以上是关于规划可扩展 Web 应用程序的开发的主要内容,如果未能解决你的问题,请参考以下文章

适用于高性能Flash / Flex / AIR应用程序的大多数可扩展Web堆栈?

程序扩展

设计可扩展的基于 Web 的应用程序的关键因素

大型、可扩展和可维护的 Web 应用程序中的 ORM 或 SQL?

网站建设之项目实战

使用express.js框架一步步实现基本应用以及构建可扩展的web应用