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

标签 amazon-s3 amazon-ec2 cassandra amazon-cloudfront

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

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

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

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

云前线:http://aws.amazon.com/cloudfront/
EC2:http://aws.amazon.com/cloudfront/
Cassandra :http://cassandra.apache.org/

最佳答案

Cassandra 是一个非关系型数据库引擎,如果这是您的需要,您应该首先评估亚马逊的 SimpleDB :建立在 S3 之上的非关系型数据库引擎。

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

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

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

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

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

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

关于amazon-s3 - 规划可扩展的 Web 应用程序的开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3258036/

相关文章:

eclipse - 使用从 Amazon ec2 获得的公钥将 Eclipse RSE 与远程 Linux 服务器连接

amazon-web-services - 设置 AWS 进行数据处理 S3 或 EBS?

java - Cassandra - 无法使用 Java 驱动程序解析元组列表

permissions - Amazon S3只写访问

php - 如何在 Amazon S3 上生成缩略图?

linux - "Syntax error near unexpected token ` crontab '"当尝试在一行中添加 cron 作业作为 sudo 时

node.js - 如何确保非规范化数据插入到cassandra中?

node.js - 如何使用 SSL 通过 NodeJS 连接到 Cassandra?

concurrency - Amazon S3 是否保证写入顺序?

ruby-on-rails - Rails s3 上的回形针 ruby​​ to_file 方法