问题标签 [consistent-hashing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
2380 浏览

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

Python-memcached 是 Django 官方支持的 memcached 驱动程序。

是否支持

  1. 一致的哈希
  2. 二进制协议

如果是这样,我如何在 Django 中使用这些功能?我找不到任何文档。

0 投票
2 回答
12201 浏览

java - MessageDigest 在不同机器上的哈希值不同

我遇到了 MessageDigest 在不同计算机上返回不同哈希值的问题。

一台计算机在 Windows Vista 上运行 32 位 Java,另一台在 Mac OS 上运行 64 位 Java。我不确定这是否是因为 MessageDigest 依赖于机器,或者我需要在某处明确指定字符编码,或者可能是其他东西。这是代码:

这段代码是否应该在这两台不同的机器上以不同的方式执行?如果它是我编写的方式依赖于机器,是否有另一种方法散列这些密码更便携?谢谢!

编辑:::::

这是我用来生成盐的代码:

解决方案:::

感谢接受的解决方案,我能够修复我的代码:

0 投票
3 回答
3314 浏览

php - 分片/分发的功能(一致的散列)?

我已经考虑过制作一个有点轻量级的类似一致性哈希的 PHP 函数来在不同服务器之间对上传的文件进行分片。

显然, rand() 可以在服务器之间稍微均匀地分配文件,但是在请求文件时,没有人会知道哪个文件位于哪个服务器上......

我知道有一些广泛的库可以创建一致的哈希,但我想知道这些是如何工作的,以及如何推出我自己的、非常轻量级的库?

注意:我没有考虑到服务器将被删除,而是更多的服务器被添加到池中。

更新:

这是伪代码的快速行:

0 投票
2 回答
1816 浏览

rabbitmq - 生产者工作通过消息队列持续向消费者散列?

我有一个生产者,我想通过一致的哈希在消费者之间一致地分配工作。例如,对于消费者节点 X 和 Y,任务 A、B、C 应该总是去消费者 X,而 D、E、F 应该去消费者 Y。但是如果 Z 加入消费者池,这可能会发生一点变化。

我不想编写自己的逻辑来连接到消费者节点,尤其是不想管理加入和离开池的节点,所以我走上了使用 RabbitMQ 的道路,每个消费者节点都有一个独占队列.

我遇到的一个问题是列出这些队列,因为生产者需要在分配工作之前知道所有可用的队列。AMQP 甚至不支持列表队列,这让我不确定我的整个方法。不过,RabbitMQ 和 Alice(目前不完整)添加了该功能:是否有用于在 RabbitMQ 上列出队列和交换的 API?

这是对兔子的明智使用吗?我应该使用消息队列吗?是否有更好的设计让队列可以始终如一地在消费者之间分配我的工作,而不是我需要这样做?

0 投票
4 回答
3739 浏览

java - 一致性哈希是如何工作的?

我试图了解一致的哈希是如何工作的。这是我试图关注但无法关注的文章,首先我的问题是:

  1. 我理解,服务器被映射到哈希码的范围内,数据分布更加固定,看起来也很容易。但这如何处理集群中添加新节点的问题呢?

  2. 示例 java 代码不起作用,任何基于简单java的一致哈希的建议。

更新

  1. 一致散列的任何替代方案?
0 投票
1 回答
1180 浏览

zeromq - ZeroMQ 和一致性哈希


作为熟悉 0MQ 的练习,我尝试编写一个简单的类似 Memcached 的分布式内存键值存储。我能想到的最简单的架构是一个将请求分发到后端的 OMQ 设备,后端是管理存储键值对的数据结构的简单进程。问题是我想使用一致的散列来平衡后端之间的负载,但是 0MQ XREQ 套接字使用循环到后端。那么,有没有一种简单的方法来使用一致的哈希而不是循环与 XREQ 套接字?

0 投票
2 回答
1271 浏览

distributed - 一致散列:重新散列呢?

您可能知道,在处理 DHT 时,一致的哈希是一个好主意。主要思想是在添加或删除新节点时不要遭受太多损失。

从原始论文:

当一台机器被添加到缓存集中或从缓存集中移除时,必须移动到新缓存的对象的预期比例是保持缓存间负载平衡所需的最小值。

解决方案很好,但是存在密钥分配不良的现象。为了解决这个问题,原始节点的副本是随机分布的。该解决方案效果很好。如果您想确定,请查看此图表。

好的,似乎工作得很好。但是,有件事我一直在想,没有人提到。

添加(或删除)一个节点时会发生什么?好吧,每个键,“之前”放置的节点都需要重新散列。这看起来不错,因为这些键不会是“所有”键。但是,如果我们决定放置一些副本,比如 20 个,那么 20 个节点会感到重新散列的痛苦。

更少的副本意味着更差的分布,但是更多的副本意味着在需要重新散列时更加痛苦。

您知道哪种解决方案适合这种情况?我错过了什么吗?

0 投票
1 回答
1437 浏览

hash - 一致的哈希作为扩展写入的一种方式

我想弄清楚我是否走在正确的轨道上。我正在构建一个(实时)统计/分析服务,我使用 redis 来存储一些集合和散列。

现在让我们假设我取得了一些成功,我需要扩大规模。哈希环技术看起来不错,但我的印象是它只适用于缓存场景。

如果一个节点宕机了怎么办?理论上,它的密钥现在由其他节点拥有。在实践中,他们不会拥有数据。它丢失了,对吗?与添加/删除节点相同。

我错过了一些基本的东西吗?这会是穷人的集群吗?

0 投票
2 回答
2740 浏览

php - 了解一致哈希

在过去的几天里,我一直在研究 PHP 的一致哈希算法。我希望更好地了解一致性哈希实际上是如何工作的,这样我就可以在一些即将到来的项目中使用它。在我看来,Flexihash确实是唯一一个易于理解的纯 PHP 实现,所以我从中做了一些笔记。

我创建了一个自己的小算法,试图了解它是如何工作的,以及如何让它尽可能快地工作。我对我的算法与 Flexihash 相比的速度感到惊讶,这让我怀疑我的实现是否在某些方面存在缺陷,或者我可能没有掌握整个概念的关键部分。

下面列出了在 100 万个顺序键(0 到 1,000,000)的迭代中的速度差异。显示每个节点以显示实际散列到该特定节点的键的数量。

这是我当前的哈希算法实现。

我错过了什么,还是算法真的比 Flexihash 快?另外,我知道 Flexihash 支持查找多个节点,所以我不确定这是否与它有关。

我只是想要一些保证,我了解一致性哈希的工作原理,或者可能链接到一些真正解释它的文章。

谢谢!

0 投票
4 回答
1041 浏览

algorithm - 如果一致性哈希是有效的,为什么人们不到处使用它呢?

有人问我一致哈希的一些缺点。但我认为它只比传统的 hash%N 哈希值多一点。正如标题所说,如果一致性哈希非常好,我们为什么不直接使用它呢?

你知道更多吗?谁能告诉我一些?