物联网场景 As Actor 的粒度

Granularity of an Akka Actor for IoT Scenario

我对将 AKKA 用于 IoT 设备场景很感兴趣,但我担心会使单个参与者复杂化。在大多数行业中,设备并不像您在大多数教程中看到的 'temperature sensor' 那么简单。设备代表更复杂的东西,可以具有以下特征:

所以我的一般问题是,对于演员应该承担的复杂程度,有没有人有好的建议?

谢谢 史蒂夫

以下是在确定演员应承担的复杂程度时可能需要牢记的几个要点:

  • Akka actor 是轻量级的,并且在设计上是松散耦合的,因此在分布式环境中可以很好地扩展。另一方面,每个参与者都可以使用 Akka 的丰富功能 API 来处理相当复杂的业务逻辑。这导致在确定演员应该承担多少工作量时具有很大的灵活性。

  • 一般来说,quantity of IoT devicesoperational complexity in each device是device actor设计的两个关键因素。如果设备总数很大,应该考虑让一些组设备参与者使用例如私有键值集合来处理一组设备。另一方面,如果每个 IoT 设备都涉及相当复杂的计算或状态突变逻辑,则最好让每个参与者代表一个单独的设备。值得注意的是,这两种策略并不相互排斥。

  • 对于历史数据,我建议让参与者定期输入数据库(例如 Cassandra、PostgreSQL)以进行 OLAP 查询。演员应该只回答简单的问题。

  • Akka actor 有一个定义明确的 lifecycle with hooks like preStart(), postRestart(), postStop() for programmatic logic control. Supervisor strategies 可以根据特定的业务规则创建管理 actor(发送警报,重启 actor 等)。

  • 关于自定义特定于设备类型的属性(例如度量单位),可以对设备类型及其关联的传感器属性进行建模,例如,作为 case class 并制作它是设备演员的参数。

  • 通过非阻塞消息传递处理不同消息类型的能力是 Akka Actor 的最大优势之一。 actor 中的 receive 部分函数通过模式匹配有效地处理各种消息类型。当表示具有复杂状态突变逻辑的设备时,可以通过 context.become.

  • 安全地热交换其操作状态

这个 blog post 关于将 IoT 设备模拟为个体参与者可能会感兴趣。