问题标签 [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.
hash - 一致性哈希中副本和虚拟节点之间的区别
这可能特定于我正在查看的实现(node-hashring),但是虚拟节点(vnodes)和一致哈希环中的副本之间有什么区别?
最初的Akamai 论文似乎没有明确描述 vnode,并且各种其他来源似乎可以互换使用这两个术语(例如, “虚拟节点”,它们是循环中缓存点的副本,来自来源)。
节点散列的文档给出了示例40 个散列(vnodes)和每个散列 4 个副本 = 每个服务器 160 个点。尽管阅读了源代码,但我无法完全弄清楚这两个不同的参数的作用。
tpl-dataflow - 如何使用 TPL 数据流路由、分组或以其他方式将消息拆分为一致的集合
我是TPL 数据流的新手,我正在寻找一种构造,它允许拆分源消息列表以进行均匀分布的并行处理,同时通过各个管道保持消息消息的顺序。DataFlow API 中是否有特定的块或概念可用于完成此任务,或者更多的是在现有块之间提供胶水代码或自定义块?
对于那些熟悉Akka.NET的人,我正在寻找类似于ConsistentHashing 路由器的功能,它允许将消息发送到单个路由器,然后将这些消息转发到要处理的单个路由。
同步示例:
nginx - Nginx 是否尊重具有一致哈希的权重属性?
更具体地说,这行得通吗?
backend2.example.com 会收到两倍的流量吗?
此外,如果更改权重或添加另一台服务器会发生什么情况。“只有少数几个键会被重新映射”仍然成立吗?
hash 指令的可选一致参数启用 ketama 一致的哈希负载平衡。请求将根据用户定义的散列键值均匀分布在所有上游服务器上。如果将上游服务器添加到上游组或从上游组中删除,则只会重新映射少数键,这将在负载平衡缓存服务器和其他累积状态的应用程序的情况下最大限度地减少缓存未命中。
来自https://www.nginx.com/resources/admin-guide/load-balancer/
akka.net - 集群一致的哈希池为相同的映射产生新的路由
我有一个包含 2 个命令行项目的解决方案,它创建了一个带有种子和客户端进程的 akka.net 集群。种子启动集群,然后实例化一个一致哈希集群路由器,该路由器对实现我的接口“IHasRouting”的任何消息执行哈希映射。因此,任何 IHasRouting 消息(来自种子或客户端)都应该以该消息的哈希值在 routee 上的种子处结束。
项目开始正常,集群形成没有错误。种子和客户端都实例化了一个路由器。来自种子和客户端的所有消息都具有相同的“VolumeId”,因此它们应该在种子处使用相同的路由。但是来自客户端节点的消息会为种子中的这些消息产生一个新的路由!
我对一致哈希集群路由器的理解是:
- 一个表示它的 IActorRef 应该在该节点中的参与者打算向路由器发送消息的每个节点上退出。
- 路由器的实现在每个节点上应该是相同的,并且具有相同的参与者名称。
- 所有到路由器的消息都应该实现 IConsistentHash 或者路由器实例应该有一个“WithHashMapping()”
- 具有相同哈希的所有消息将仅到达一个路由,并且始终是相同的路由
- 一个路由可能需要多个哈希
我相信我了解一致哈希集群路由器的行为方式,并且许多 DEV 似乎都在正确使用路由器类型,所以我的实现一定是错误的......请帮助!如果有帮助,我可以提供完整的解决方案。
创建路由器的代码:
我有一个向路由器发送消息所需的“公司”类。此测试的所有 VolumeId 都相同。
路由器映射使用的 IHasRouting 接口:
可以发送到路由器的示例消息类:
最后是在路由器上为每个路由实例化的 CompanyDeliverActor:
感谢您的任何指导。
akka.net - 集群分片客户端未与主机连接
在最近的调查和Stack over flow 问题之后,我意识到集群分片比集群一致哈希路由器更好。但我无法让 2 进程集群运行。
一个进程是种子,另一个是客户端。Seed 节点似乎不断地抛出死信消息(见本问题的结尾)。
这个种子 HOCON 如下:
我有一种方法可以将上述内容变成这样的配置:
如果没有“WithFallback”,我会从配置生成中得到一个空引用异常。
然后像这样生成系统:
客户端以相同的方式创建其系统,HOCON 几乎相同,除了:
种子节点像这样创建分片:
客户端创建一个分片代理,如下所示:
RouteExtractor 是:
在这种情况下,VolumeId 总是相同的(只是为了实验)。
这两个过程都开始了,但种子不断向日志抛出这个错误:
[INFO][7/05/2017 9:00:58 AM][Thread 0003][akka://my-cluster-system/user/sharding /company-routerCoordinator/singleton/coordinator] 来自 akka.tcp 的消息注册: //my-cluster-system@127.0.0.1:5000/user/sharding/company-router 到 akka://my-cl uster-system/user/sharding/company-routerCoordinator/singleton/coordinator 未交付。遇到4个死信。
附言。我没有使用灯塔。
java - AKKA 路由器使用一致性哈希作为路由,但需要将消息传递给特定的参与者
我正在尝试找到一个解决方案,其中我有 AKKA Actor 实例,其中包含特定的键值对作为实例数据。我需要的是能够通过使用它拥有的键来更新实例数据。一个 Actor 将有一个键并且它是唯一的。我看到一致哈希将能够路由到包含可能有一千个左右演员的特定节点,但如何传递给特定演员?
我需要在java中知道。
caching - 如何独立扩展 M 个 Web 应用服务器和 N 个缓存服务器?
我在负载均衡器后面有M 个 Web 应用程序服务器(上面有相同的应用程序,无共享)。运行的应用程序需要大量缓存,所以我希望后面有N 个缓存服务器(使用 Memcached)。
我想使用一致的散列,所以我可以轻松添加/删除缓存服务器。据我所知,一致性哈希是在 Memcache 客户端级别实现的(例如,在调用 addServer/removeServer 时,如果 Memcached 设置为一致性哈希模式,则在其余实例之间平衡键)。但是,在这种情况下,我有 M 个客户端(访问缓存实例的网络服务器)
我如何能够在不使用附加系统作为代理(在 Web 服务器和缓存服务器之间)的情况下处理 Web 服务器和缓存服务器之间的独立缩放,从而能够在给定初始密钥的情况下定位缓存服务器?我的任何 Web 服务器(配置相同)如何知道如何在给定密钥的情况下访问正确的缓存服务器?
对此的最佳做法是什么?
java - 在 Java 中实现一致性哈希算法
我正在尝试使用以下参考在java中实现基于哈希的一致算法,以将键分片到redis -
我试图了解为节点和密钥生成 hascode 的最佳方法。目前我正在使用 DigestUtils 生成如下哈希并将返回的值添加到环/圆 -
我想知道这种方法听起来是否正确。
distributed-computing - 是否可以将节点添加到同步复制数据的集群中?
如果我有将数据写入存储的系统。
在集群设置中,如果数据是同步复制的,那就是当我收到更改在所有节点上更新的数据的请求时,然后返回响应。
在这种情况下是否可以动态添加节点?
也就是说,假设有 2 个节点,并且在该集群上执行了一些事务。我可以添加一个集群仍在运行的第三个节点吗?
如果我这样添加一个新节点,是不是破坏了集群的强一致性?
elasticsearch - 为什么elasticsearch仍然使用模数的简单路由值?
只是想知道为什么 elasticsearch 仍然使用简单的路由值方法来决定数据必须存储到哪个分片。实际上,这种方法限制了我们将来更改分片的数量。如果 elasticsearch 使用一致散列(甚至更好的技术)之类的方法,它可以让我们有机会在未来更改分片数。有人对此有解释或想法吗?