【问题标题】:Basic akka - locating actors and their state基本的 akka - 定位演员和他们的状态
【发布时间】:2017-05-10 23:25:32
【问题描述】:

这是关于 akka 的几个非常基本的问题。我在 akka 上完全是绿色的,所以任何建议都值得赞赏。

假设我有一个拥有数千名用户的应用程序,而不是数百万用户。

域模型是一个层次结构,其中每个用户位于一个国家/地区的一个地区,即一个国家有多个地区,一个地区有多个用户。

我正在考虑在 akka 中创建完全相同的层次结构。国家演员 ->* 区域演员 ->* 用户演员。 CountryActor/RegionActor 除了作为父母之外,还承担着收集新闻、计算统计数据、监督其子女等职能。

Q1:这样模仿领域模型有意义吗?

Q2:我应该将每个实体的属性存储在actor中吗? 这样数据只需要存储一次,akka 系统也将有效地成为内存数据库。

(伪代码)

CountryActor {
  Name,
  CountryCode,
  (children = list of RegionActors handled by akka)
}

RegionActor {
  Name,
  RegionCode,
  (children = list of UserActors handled by akka)
}

UserActor {
  UserId,
  Firstname,
  Lastname,
  Alias,
  ReceiveRegionalNews,
  ReceiveCountryNews,
  ...
}

Q3:如何通过 userId 高效查找用户? 我希望 UserActor 的子名称将是 userId,但鉴于我只有一个 userId,我仍然需要找到正确的国家和地区来执行 getContent().findChild(userId)?我是否需要保留所有 userId 的完整地图并引用他们的演员?

Q4:如何按状态定位演员? 想象一下,每个用户都可以打开一个RegionalNews 属性,这意味着他想接收来自RegionalActor 的新闻。每当 RegionActor 想要向所有听众分发新闻时,它是如何定位他们的?它是保留具有该属性的用户的内部地图,还是向所有子节点广播,然后发送给所有响应者?

提前致谢

【问题讨论】:

    标签: akka akka.net akka-persistence


    【解决方案1】:

    尤其是在 Akka(.Net) 中建模这些东西方面我没有大量经验,但我已经长大了,知道这些范式都不是魔法,只是因为演员系统是分层的并不意味着您可以将所有数据放入这样的结构中,而不会出现所谓的阻抗失配。

    如果你想更多地沿着......

    • 一个 UserManagerActor 对您的 UserActor 进行一些子实体管理;
    • 之外,还有一个国家/地区层次结构,其中至少 Region 实现了一些 pub-sub 模式并保留其订阅者列表;
    • 创建后,用户会向其相应的区域发送一条订阅消息(或多个区域,如果您喜欢的话);

    ...那么这会让你需要做的一切看起来更容易吗?

    There's more on design patterns here - 但不要太沉迷其中!

    【讨论】:

      猜你喜欢
      • 2019-04-23
      • 1970-01-01
      • 2019-11-24
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      相关资源
      最近更新 更多