cassandra - 如何确保一致性哈希有效?

标签 cassandra scalability consistent-hashing

我将在一堆节点上实现一致的哈希。每个节点的容量有限(假设为 1GB)。我从一个节点开始,当它满了时,我将添加另一个节点,并使用一致的哈希来重新分配数据,并通过添加新节点来向前推进。然而,节点仍然有可能已满。我知道一些 nosql 数据库(例如 cassandra)使用一致哈希来执行类似于我正在做的事情。如何使用一致性哈希来避免节点溢出?

最佳答案

Cassandra 没有按照您描述的方式使用一致哈希。

每个表都有一个分区键(您可以将其视为主键或 RDBMS 术语中的第一部分),该键使用 murmur3 算法进行哈希处理。整个哈希空间形成一个从最低哈希值到最高哈希值的连续环。之后,这个环被分成 block (vnodes,默认为256),并且这些 block 公平地分布在多个节点之间。每个节点不仅托管自己的环部分,还根据复制因子维护其他虚拟节点的复制副本。

这种做事方式有助于解决很多问题:

  • 在集群所有节点之间均衡数据负载,任何特定节点都不能过载(数据大小、读写均匀分布,无热点)
  • 如果您向集群添加新节点,它将处理其自己的环部分,并自动从其他节点拉取所需的 vnode。无需手动重新分片。
  • 如果节点发生故障,由于复制,您不会丢失任何数据,因为它已经存储在其他节点上。在这种情况下,您可以停用故障节点,以便所有其他节点将在它们之间重新分配故障环部分。无需为发生故障的数据库节点提供复杂的切换场景。

当然,您始终可以在应用程序层中的任何 RDBMS 之上实现类似的数据库行为,但这总是比使用已经存在的经过实战检验的解决方案困难得多,而且不易出错。

关于cassandra - 如何确保一致性哈希有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30610535/

相关文章:

hadoop - 在cloudera集群上安装datastax cassandra

.net - 可扩展 Facebook 游戏的服务器架构

mysql - 如何使数据库轮询可扩展?

AWS EC2 中的 MySQL - 它如何扩展?

python - python-memcached 是否支持一致的哈希和二进制协议(protocol)?

java - 每个搜索 cassandra lucene 索引多个过滤器

cassandra - Cassandra -美杜莎错误: This error happened during the backup: [Errno 2] No such file or directory: 'nodetool'

rabbitmq - 生产者通过消息队列一致地向消费者进行散列?

datetime - 在 Cassandra 中使用日期

java - 如何在 java elasticache 库中使用一致性哈希?