我有兴趣将AKKA用于物联网设备场景,但我担心让个别演员复杂化。在大多数行业中,设备并不像大多数教程中所见的“温度传感器”那么简单。设备代表更复杂的东西,可以具有以下特征:
所以我的一般问题是,是否有人对演员应该采取的复杂程度有什么好的建议?
由于 史蒂夫
答案 0 :(得分:0)
以下是在确定演员应该采取的复杂程度时,可能需要记住的几个要点:
Akka演员是轻量级的,并且通过设计松散耦合,因此在分布式环境中可以很好地扩展。另一方面,每个参与者都可以使用Akka的功能丰富的API来处理相当复杂的业务逻辑。这样可以非常灵活地确定演员应该承担多少工作量。
通常,gatsby-node.js
和quantity of IoT devices
是设备actor设计中的两个关键因素。如果设备总数量很大,则应考虑使用一些组设备角色,每个组件设备角色使用例如私有键值集合来处理一组设备。另一方面,如果每个IoT设备涉及相当复杂的计算或状态变异逻辑,那么使每个actor代表单个设备可能更好。值得注意的是,这两种策略并不是相互排斥的。
对于历史数据,我建议让演员定期向数据库(例如Cassandra,PostgreSQL)提供OLAP查询。应该让演员只回答简单的查询。
Akka演员有一个明确定义的lifecycle,其中包含operational complexity in each device
,preStart()
,postRestart()
等钩子,用于编程逻辑控制。可以创建Supervisor strategies以根据特定业务规则管理参与者(发送警报,重新启动演员等)。
在自定义特定于设备类型的属性(例如度量单位)时,可以将设备类型及其关联的传感器属性建模,例如postStop()
,并使其成为参数设备演员。
通过非阻塞消息传递处理不同消息类型的能力是Akka actor的最大优势之一。 actor中的case class
部分函数通过模式匹配有效地处理各种消息类型。当表示具有复杂状态变异逻辑的设备时,其操作状态可以通过context.become安全地进行热交换。
关于模拟物联网设备的blog post可能会引起人们的兴趣。