.net 用于处理传感器数据的服务结构参与者
我们目前正在设计一个能够处理大量传感器事件的系统 由于需要处理数百万个不同的传感器实例,我认为ServiceFabricActor模型非常适合。 因此,我们的想法是让一个参与者负责处理一个传感器的事件(SensorId=ActorId) 映射很容易,因为我们只需要通过特定的SensorId查询数据,所以我们在一个地方就有了所有的数据,这可以实现真正快速的查找 现在的问题是,(一些)传感器正在以单个参与者无法再处理的速率发送数据 这就是我们现在陷入困境的原因,我们不能提示系统并告诉它将负载分配给更多的参与者,用于特定的传感器,如Sensor123和Sensor567 有没有可能通过ServiceFabric提供的虚拟参与者系统来解决这个问题 更新1: 我认为我们没有一个单一演员的问题。对于一个独特的演员,我们可以每秒收到大约5k条消息。 但有些传感器需要50-100k/s的目标吞吐量。因此,通过设计(单线程执行),单个参与者将无法完成此任务 因此,为了澄清最初的问题:我们或多或少地在寻找一种自动划分“某些”参与者的方法 (当然,我们可以为每个传感器创建10个参与者来划分负载。但这会使查找效率低下.net 用于处理传感器数据的服务结构参与者,.net,azure,azure-service-fabric,service-fabric-actor,.net,Azure,Azure Service Fabric,Service Fabric Actor,我们目前正在设计一个能够处理大量传感器事件的系统 由于需要处理数百万个不同的传感器实例,我认为ServiceFabricActor模型非常适合。 因此,我们的想法是让一个参与者负责处理一个传感器的事件(SensorId=ActorId) 映射很容易,因为我们只需要通过特定的SensorId查询数据,所以我们在一个地方就有了所有的数据,这可以实现真正快速的查找 现在的问题是,(一些)传感器正在以单个参与者无法再处理的速率发送数据 这就是我们现在陷入困境的原因,我们不能提示系统并告诉它将负载分配给更
此外,我们还需要10倍的RAM。这似乎是不合理的,因为0.5-1%的传感器需要更大的吞吐量)我建议调查以下选项:
状态管理器
中将事件排队,并使用提醒
在后台处理它们。通过这种方式,事件的处理与接收事件是分离的。(不过,您将转变为“最终一致性”的模型)我不认为这会给你带来你想要的足够的收益,但是你有没有尝试过为这种“特殊情况”传感器测试一种新的Actor类型,它使用了一种不太持久的持久性方法 例如StatePersistence.Volatile或StatePersistence.None?我已经看到这显著提高了参与者吞吐量,尤其是statePersistence.None 显然,这可能不适合您所期望的耐用性要求,但在您获得长期解决方案之前,这可能是一个快速的胜利 必须同意@LoekD,选项3将是您的最佳选择。尝试将责任细分为不同的参与者,然后可以聚合(在循环计划中?)并向能够处理报告负载的传感器的上帝参与者报告-这再次导致一些最终的一致性,对于您的用例来说,这些一致性可能是可接受的,也可能是不可接受的 如果所有这些都失败了,您可以尝试在裸机上而不是虚拟机上运行集群,以获得可观的性能增益
最后,在裸机上评估Erlang。。。说没有.NET开发人员非常感谢您的投入!但在我们的情况下,这些选择不会有多大帮助;(.我更新了最初的问题,以澄清我们的需求。