Akka.NET ConsistentHashingPool:每个哈希创建routee

时间:2015-10-01 18:41:45

标签: akka.net

是否可以强制ConsistentHashingPool为每个哈希创建routee?我希望一个routee actor只处理相同哈希的消息。如果有新的哈希值,那么就会创建新的routee。

我试着调查Resizer课程,但我无法找到实现我想要的方法。

2 个答案:

答案 0 :(得分:2)

我认为你有点误解了ConsistentHashRouter (CHR)。它已经完成了您所声明的内容 - 始终将密钥落在给定散列范围内的消息路由到同一个路由器。

当新节点/虚拟节点加入群集时,会在CHR routee表中添加/删除路由。然后,将重新平衡散列范围以考虑集群中的新节点,并且CHR将消息路由到现在负责密钥落入的散列范围部分的节点。这可能是之前负责的节点,也可能是从一个节点转移到另一个节点。基本上,您要对整个群集中的哈希范围进行分片。

更新:截至撰写本文时(2015年10月),此管理流程必须手动完成。有一个名为Akka.Cluster.Sharding的模块,它将跨节点为您重新平衡分片。它目前在JVM上可用。

答案 1 :(得分:1)

(从新手的角度来看......) 我同意Oliver的说法,这是一个非常简单的用例来需要称为聚类和分片的东西。
考虑一个为用户或会话或其他东西持有某种状态的actor - 显然每个actor必须只接收该entity-instance-id的消息。

通过阅读一些文档,我非常确定自己编写代码是非常简单的:你只需编写一个父级actor来检查给定id的子级是否存在,如果它不存在则创建它,然后是路由消息给它。

我还希望在ConsistentHashingRouter上有类似于create-unique-actors设置的东西,可以自动为你做这件事。 (也许它通常不是很有用,因为你需要考虑何时以及如何终止演员以防止他们永远活着?)