gpt4 book ai didi

java - 了解 Akka 集群分片

转载 作者:行者123 更新时间:2023-12-05 08:50:02 25 4
gpt4 key购买 nike

我正在学习 Akka 分片模块。关于分片,我有些不明白。让我们想象一下你想要分片一个 Actor :你有许多来自同一个 Actor 的实体分布在许多节点上。每个实体都可以有自己的状态,这可能与另一个实体不同。

客户端正在向您的分片 actor 发出请求(发送消息)以取回其状态值。这是消息将由实体处理并返回其值作为结果。但如果它被另一个实体对待,结果就会不同。但它应该是相同的,因为所有实体都源自同一个参与者,不是吗?

最佳答案

看来你对Akka集群分片的概念理解有误,我举个例子说明一下。

假设您的服务负责使用用户配置文件响应请求。为了获得极低的延迟,您决定使用 Akka actors 将用户配置文件缓存在内存中,而不是每个请求都必须查询数据库。

如果您的网站只有 10 个用户并且每个用户配置文件只有几 KB,您可以毫无问题地将所有 10 个用户配置文件保存在一个 actor 中,并且您肯定不需要集群分片。但是,如果您有 1000 万用户,那么 1000 万用户配置文件可能无法放入单个 actor 的内存中,而且如果 actor 宕机,成本会很高,因为这意味着您需要大型数据库查询才能取回这些数据来自坚持。

在这种情况下,集群分片很合适。您将有 1000 万个 Akka 参与者,分布在您的集群中,每个参与者仅存储 1 个用户配置文件。所以 GetUserProfile(userProfileId = 123) 不会给你不同的响应——它总是被路由到持有用户 123 的用户配置文件的参与者,因此响应总是相同的。

路由是如何工作的?检查 doc 中的 extractShardIdextractEntityId

关于java - 了解 Akka 集群分片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62861841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com