交通飙升

时间:2012-01-08 17:17:03

标签: node.js mongodb amazon-ec2 redis

我在亚马逊上设置了一个简单的骨架,并想知道哪个是更好的方法从新网站上出来,我们预计偶尔会有大量的流量(来自科技媒体)然后我们逐渐建立起来'真正的'会员流量达到合理水平。

我目前正在玩两个启动选项:

1)我是否有1个节点应用程序(micro ec2)指向redis-server和mongod(EC2服务器)(它安装了一个组合的10G EBS)。

2)我是否有1个节点应用程序(micro ec2)在本地运行redis-server和mongod(但是有2个10G EBS挂载,1个用于redis,1个用于mongo)。

如果流量变得疯狂(科技媒体等),这是最容易/最快规模来处理流量高峰。我期待mongo和redis顺便说一下读写的相同,我没有缓存(除了图像和一些CSS等云端资产提供的缓存)

2 个答案:

答案 0 :(得分:3)

我无法与Redis交谈,但对于MongoDB,您需要确保在具有足够RAM的实例上运行以在内存中保存数据的“工作集”。 “工作集”大致是指应用程序经常访问的完整数据集 - 例如,考虑Twitter - Twitter数据的工作集是所有用户的最新状态更新集,因为这是显示在网页上以及Twitter通过其API提供的内容。对于您的应用程序,工作集的定义可能不同。

Mongo使用内存映射文件进行数据访问,这意味着当有足够的内存来保存您经常访问的数据时,它的性能会很好,如果没有,则可能会降级。如果您希望您的数据集增长超过大约2.5千兆字节,您还需要确保您使用的是64位实例 - 在32位实例上,Mongo限制为大约2.5千兆字节的数据,因为数据有限这样一个平台上可用的内存地址空间。有关EC2上MongoDB的更多信息,请参阅wiki上的the Mongo docs on EC2 deployment

我还要提醒您不要在生产环境中使用EC2 Micro实例。 Micros的本质是它们具有“突发性”但CPU资源非常有限。如果由于技术新闻而导致流量激增,那么您的应用程序可能会被EC2限制为非常低的可用CPU量,这将导致性能受损。您可以通过负载平衡和许多Micro实例在一定程度上缓解这种情况,但是对于Mongo / Redis和应用程序服务器简单地使用Large实例可能更具成本效益且更简单。

答案 1 :(得分:0)

你可能想看看这个问题,因为IMO,答案也适用于你的情况:

Benefits of deploying multiple instances for serving/data/cache

我永远不会把mongod和redis-server放在同一个盒子里。 MongoDB由于使用了内存映射文件而意味着交换,如果数据无法容纳在RAM中,它将生成交换活动。 Redis不使用与交换兼容的数据结构(如MongoDB与btree一样),如果换掉内存,它将变得无响应。目前,没有简单的方法可以将Redis锁定在内存中。

所以我会将Redis和应用服务器放在同一个盒子上,并在自己的盒子上隔离MongoDB。 根据您要在Redis中存储的数据大小,我会选择一个大型或小型EC2实例。 Redis在32位中运行良好,但内存有限。对于MongoDB,64位框几乎是强制性的。无论如何,我会避免像瘟疫这样的微观实例。