Azure service fabric Can';actor的t-change划分方案

Azure service fabric Can';actor的t-change划分方案,azure-service-fabric,Azure Service Fabric,在使用azure service fabric actors时,我最近发现了一件奇怪的事情——我无法更改分区的默认设置。比如说,如果我试图为UniformInt64设置命名分区或更改低/高键,那么每次在Visual Studio中构建项目时,它都会被覆盖。对于statefull服务,这样做没有问题,它只发生在参与者身上。没有错误,事件日志中没有记录,没有任何内容。。。我在网上只找到一个关于同一问题的参考资料- 但我没有看到任何解释,无论是在MSDN上,还是在官方文件中。有什么想法吗?它真的是“

在使用azure service fabric actors时,我最近发现了一件奇怪的事情——我无法更改分区的默认设置。比如说,如果我试图为UniformInt64设置命名分区或更改低/高键,那么每次在Visual Studio中构建项目时,它都会被覆盖。对于statefull服务,这样做没有问题,它只发生在参与者身上。没有错误,事件日志中没有记录,没有任何内容。。。我在网上只找到一个关于同一问题的参考资料-

但我没有看到任何解释,无论是在MSDN上,还是在官方文件中。有什么想法吗?它真的是“设计的”吗

附言

仅执行Powershell脚本来部署应用程序确实允许我按我希望的方式设置方案。在VS中不能做到这一点仍然令人沮丧。可能有一个很好的理由。。。应该是吧?:)

可以使用不同的分区方案和 分区键范围。Actor服务使用Int64分区 使用完整Int64密钥范围将参与者映射到分区的方案

每个ActorId都散列到一个Int64,这就是为什么actor服务 必须使用具有完整Int64密钥范围的Int64分区方案。 但是,自定义ID值可用于ActorID,包括GUID, 字符串和Int64s

当使用guid和字符串时,这些值将散列到Int64。 但是,当显式地向ActorId提供Int64时,Int64 将直接映射到分区,而无需进一步散列。这可能是 用于控制放置在哪个分区中的角色

()

如果分区已命名,则此ActorId=>PartitionKey转换策略不起作用

可以使用不同的分区方案和 分区键范围。Actor服务使用Int64分区 使用完整Int64密钥范围将参与者映射到分区的方案

每个ActorId都散列到一个Int64,这就是为什么actor服务 必须使用具有完整Int64密钥范围的Int64分区方案。 但是,自定义ID值可用于ActorID,包括GUID, 字符串和Int64s

当使用guid和字符串时,这些值将散列到Int64。 但是,当显式地向ActorId提供Int64时,Int64 将直接映射到分区,而无需进一步散列。这可能是 用于控制放置在哪个分区中的角色

()


如果您的分区已命名,则此ActorId=>PartitionKey转换策略不起作用。

谢谢您的回复!是的,我知道ActorID被映射到一个特定的分区,但是,既然Actor是有状态服务的扩展,为什么我不能做同样的事情并更改方案呢?为什么我们不能创建一个作为ID传递字符串的参与者,并将其映射到一个名称与该ID匹配的分区?为什么VS不显示任何错误/警告,并且在不给我任何线索的情况下默默地覆盖我的设置?如果您有一个与分区名称匹配的参与者名称,您将有效地将参与者实例计数限制为分区计数。这与Actor理论不符(通常会有许多Actor实例)。为什么VS不警告你,我不知道。你可以在这里创造一个问题:谢谢!我有许多任务要均匀地分布在机器上,任务的数量是可用节点数量的两倍。因此,我考虑将多个分区设置为多个任务,当运行任务时,我将使用给定任务名称的ID实例化Actor。因此,我可以保证在给定时刻只有一个具有特定名称的任务(参与者是线程安全的),并且由于分区在集群中均匀分布(默认情况下),我知道任务是平衡的。分区的数量不是动态的,改变它需要重新部署actorservice并处理对现有状态的影响。对我来说,拥有一个动态大小的参与者池更有意义,它可以监控一个队列,该队列包含任务,并在自己的时间内处理它们。参与者分布在各个分区中,因此工作也会自动平衡。(前提是分区多于节点)好吧,我忘了提一件事——我也想利用这个提醒。当应用程序启动时,我会为每个任务生成一个参与者,并配置一个提醒。这里并没有任务队列,因为我事先知道我需要做什么以及什么时候做。那么,当我设置一个演员时,我是否需要考虑演员ID应该是什么样子,或者让它由服务结构决定?我只是担心不能让我的参与者在单个节点上旋转,因为他们在开始时(当我唤醒他们设置提醒时)不消耗任何资源。谢谢你的回复!是的,我知道ActorID被映射到一个特定的分区,但是,既然Actor是有状态服务的扩展,为什么我不能做同样的事情并更改方案呢?为什么我们不能创建一个作为ID传递字符串的参与者,并将其映射到一个名称与该ID匹配的分区?为什么VS不显示任何错误/警告,并且在不给我任何线索的情况下默默地覆盖我的设置?如果您有一个与分区名称匹配的参与者名称,您将有效地将参与者实例计数限制为分区计数。这与Actor理论不符(通常会有许多Actor实例)。为什么VS不警告你,我不知道。你可以在这里创造一个问题:谢谢!我有许多任务要均匀地分布在机器上,任务的数量是可用节点数量的两倍。因此,我考虑将分区数设置为任务数,当运行任务时,我将使用Actor instan