Ant*_*arf 1 java scala sharding akka akka-cluster
我正在学习 Akka 分片模块。关于分片,我有一些不明白的地方。假设您想对一个 actor 进行分片:您有许多来自同一 actor 的实体分布在许多节点上。每个实体都可以有自己的状态,这可能与另一个实体不同。
客户端向您的分片actor 发出请求(发送消息)以取回其状态值。这是消息将由实体处理并作为结果返回其值。但如果它被另一个实体处理,结果就会不同。但它应该是一样的,因为所有实体都来自同一个演员,不是吗?
看来你对Akka集群分片的概念有误解,我举个例子来解释一下。
假设您的服务负责使用用户配置文件响应请求。为了获得极低的延迟,您决定使用 Akka actor 将用户配置文件缓存在内存中,而不必为每个请求查询数据库。
如果您的网站只有 10 个用户并且每个用户配置文件只有几 KB,那么您可以将所有 10 个用户配置文件保存在一个参与者中而不会出现问题,并且您肯定不需要集群分片。但是,如果您有 1000 万用户,那么 1000 万个用户配置文件可能无法放入单个演员的内存中,而且如果演员宕机,代价也会很高,因为这意味着您需要一个大型数据库查询来获取这些数据来自坚持。
在这种情况下,集群分片是合适的。您将拥有 1000 万个 Akka actor,分布在您的集群中,每个 actor 仅存储 1 个用户配置文件。所以GetUserProfile(userProfileId = 123)不会给你不同的响应——它总是被路由到保存用户 123 的用户配置文件的参与者,因此响应将始终相同。
路由是如何工作的?检查extractShardId并extractEntityId在文档中
| 归档时间: |
|
| 查看次数: |
576 次 |
| 最近记录: |