物联网场景的Akka演员的粒度

时间:2018-05-08 17:15:45

标签: akka iot

我有兴趣将AKKA用于物联网设备场景,但我担心让个别演员复杂化。在大多数行业中,设备并不像大多数教程中所见的“温度传感器”那么简单。设备代表更复杂的东西,可以具有以下特征:

  • 可以表示许多传感器(温度,电气/流体流量,功率输出,开/关值.....
  • 上面的每个值都可以查询当前值,更有可能是历史值(趋势,直方图....)
  • 可以为任何一个传感器值设置警报规则
  • 每个设备都有相当复杂的配置,必须进行管理(传感器,测量单位)
  • 可以发送许多不同的消息类型(传感器读取请求,警报,配置更新......)

所以我的一般问题是,是否有人对演员应该采取的复杂程度有什么好的建议?

由于 史蒂夫

1 个答案:

答案 0 :(得分:0)

以下是在确定演员应该采取的复杂程度时,可能需要记住的几个要点:

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

  • 通常,gatsby-node.jsquantity of IoT devices是设备actor设计中的两个关键因素。如果设备总数量很大,则应考虑使用一些组设备角色,每个组件设备角色使用例如私有键值集合来处理一组设备。另一方面,如果每个IoT设备涉及相当复杂的计算或状态变异逻辑,那么使每个actor代表单个设备可能更好。值得注意的是,这两种策略并不是相互排斥的。

  • 对于历史数据,我建议让演员定期向数据库(例如Cassandra,PostgreSQL)提供OLAP查询。应该让演员只回答简单的查询。

  • Akka演员有一个明确定义的lifecycle,其中包含operational complexity in each devicepreStart()postRestart()等钩子,用于编程逻辑控制。可以创建Supervisor strategies以根据特定业务规则管理参与者(发送警报,重新启动演员等)。

  • 在自定义特定于设备类型的属性(例如度量单位)时,可以将设备类型及其关联的传感器属性建模,例如postStop(),并使其成为参数设备演员。

  • 通过非阻塞消息传递处理不同消息类型的能力是Akka actor的最大优势之一。 actor中的case class部分函数通过模式匹配有效地处理各种消息类型。当表示具有复杂状态变异逻辑的设备时,其操作状态可以通过context.become安全地进行热交换。

关于模拟物联网设备的blog post可能会引起人们的兴趣。