为什么我的redis群集上的热点不好?

时间:2018-01-14 21:14:11

标签: redis distributed-system hotspot

我有一个redis群集,我计划添加密钥,我知道这些密钥的读取/更新频率比其他密钥要大得多。我认为这可能会导致我的群集上的热点。为什么这很糟糕,我该如何避免呢?

2 个答案:

答案 0 :(得分:1)

键上的热点是可以的,如果这些键可以分片到不同的redis节点。但是如果某些redis节点/机器上有热点,这将是不好的,因为这些机器的内存/ CPU负载将非常繁重,而其他节点没有被有效使用。

如果您确切知道这些键是什么,您可以先自己计算它们的插槽,使用密钥模数16384的CRC16。

然后您可以将这些插槽分发到不同的redis节点。

答案 1 :(得分:0)

项目是否会在特定节点或节点上产生热点取决于许多因素。如前所述,如果整个群集流量仍然相对均匀并且密钥开启的节点不征税,则单个密钥上的热点不一定是问题。如果每个群集节点处理1000个命令/秒,并且在其中一个节点上,所有命令都是一个与一个密钥相关的命令,那么它并不重要,因为所有命令都是在一个单元上串行处理的线程,它都是一样的。

但是,如果你有5个节点,所有节点都处理1000个命令/秒,但是你向一个节点添加一个新密钥,这使得该单个节点每秒发出3000个命令,你的5个节点中的一个现在处理50%的处理。这意味着该节点需要更长的时间来处理所有正常的1000个命令/秒,并且现在1/5的流量任意慢得多。

分发/分片数据库的一般想法的一部分不仅是增加存储容量,还要平衡工作。不平衡这种工作最终会导致不平衡或搞砸应用程序性能。它会导致您的请求加载的1 / N由于访问陷入困境的节点而任意减慢,或者如果您的请求可能访问多个节点,它会增加整个板的处理时间。均匀分布的负载使应用程序具有更好的处理更高负载的能力,而不会对性能产生负面影响。

但是,对于您的新密钥的访问是否与您的持续流量成比例地大,也存在实际考虑因素。如果你的集群正在处理1000多个命令/秒/节点,并且一个密钥将为每个特定节点增加10 req / sec,那么你可能会很好。无论如何都可以。