我正在尝试重新发明轮子并在Redis中存储一些统计数据。
我正在考虑急切地聚合,并在每个新事件之后立即递增所有相关的计数器(它可能每秒发生几次)。
它将需要调用HINCRBY类似于每个事件5-50次,我的目标是每秒5-100次事件。
这对Redis来说是不是太多了?如果是,我是否应该设定一些较低的限制(每个事件10次?只有一个?)?如果不是,它是否可以扩展到这些参数中的任何一个(我更感兴趣的是扩展到1000个事件? 10000?)?
很明显,我还得收集垃圾。我计划通过为每个事件所需的每个散列调用EXPIRE (不超过2-5次,因为一些计数器在相同的散列中)。可以吗?
发布于 2011-07-30 03:05:06
发疯吧。如果硬件准备就绪,Redis将能够处理负载。显然,你应该尽快建立原型并尝试它,但这绝对是Redis能够处理的事情。
不过,我建议你已经考虑过扩展了。预先解决可伸缩性问题要比等到问题出现时再解决要容易得多。Redis (到目前为止)还没有任何集群解决方案,而且您受到RAM (和一个CPU)的限制,所以最终您将需要某种向外扩展到更多服务器的方法。
这样做的方法是客户端分片,即对于每个操作,您散列您的键并查看它位于哪个服务器上,然后与该服务器对话(这显然会使使用多个键的操作很难执行,因此您可能必须绕过这一点进行设计)。Ruby客户端有一些开箱即用的支持,但是如果您正在使用另一个驱动程序(and Salvatore has a guide, too),那么自己做起来并不难(尽管不方便)。
我建议在同一台机器上运行两个或四个Redis实例(每个CPU一个),再加上另一台运行从服务器以实现冗余和故障转移的机器(您也可以在每台服务器上运行两个主服务器和两个从服务器)。这样,如果您需要扩展,将实例移动到其他服务器上就不需要太多的工作。如果您有四个实例,您将能够毫不费力地移动到四台机器上,因为您所要做的就是在新机器上设置一个从服务器,等待它同步,然后将其用作主服务器。如果你一开始没有四个实例,移动到一台新机器就意味着手动移动关键点,这可能是大量的工作。
https://stackoverflow.com/questions/6877651
复制相似问题