可扩展的Web应用

时间:2012-08-31 18:42:26

标签: php mysql amazon-rds amazon-dynamodb

我们正在使用PHP(Zend Framework),MySQL,运行Apache的服务器构建社交网站。

要求仪表板中的应用程序将获取不同事件(大约有12个事件)的数据,用户的仪表板将在该事件上更新。我们预计用户总数不会超过50万到70万。虽然平均有一次约20%的用户会在线(高峰期我们预计50%的用户会在线)。

所以问题是根据我们当前设计的事件数据将放在MySQL数据库中。我认为即使我们使用Amazon RDS,在MySQL上同时运行几十万个查询也不是一个好主意。所以我们正在考虑使用DynamoDB(或Redis或任何NoSQL db选项)和MySQL。

所以问题是:在MySQL和任何NoSQL数据库中拥有数据会为我们的Web应用程序提供这种可伸缩性的优势吗?或者我们应该考虑其他解决方案?

感谢。

2 个答案:

答案 0 :(得分:2)

您无需复制数据。一种选择是使用亚马逊提供的ElastiCache来提供内存缓存。这将消除您的数据库调用,并在某种意义上消除了这个瓶颈,但这可能非常昂贵。如果您可以牺牲关联时间更新,那么您可以放慢速度,只需减慢请求或为用户本地缓存数据。比如说,如果可能的话,在浏览器上缓存下一个N个事件并显示它们,而不是向服务器发出另一个请求。

如果必须是实时的话,请查看ElastiCache,然后调整您需要多少处理估计流量的比例。重复数据是没有意义的。将它保存在一个数据库中如果有意义保留它,IE你有一些你需要的关系信息,然后还有一个变量模式系统,那么你可以使用这两个数据库,但不能将它们加载平衡。

我也会开始考虑您的架构中的一些瓶颈,并想一想您的应用程序在达到估计数量时能够/可以扩展的程度。

答案 1 :(得分:0)

我同意@sean,没有必要复制数据库。您是否考虑过具有自动可扩展性的内容,例如Xeround。当您有吞吐量峰值并稍后缩小时,这样的解决方案可以跨多个节点自动扩展,因此您不必仅因为季节性峰值而提交更大,更广泛的实例。

此外,如果我理解正确,则此自动扩展性不需要更改代码。因此,除非您需要在MySQL和NoSQL DB上复制数据,除了与可伸缩性相关的问题之外的其他原因,请使用自动扩展的单个数据库。