规划可伸缩Web应用程序的开发

时间:2010-07-15 17:03:11

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

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

我不是百分之百确定这一切是如何发挥作用的,但这就是这个想法:

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

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

答案 1 :(得分:0)

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

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

WTF is a Super Column