Azure service fabric 用于与外部设备双向通信的服务结构策略

Azure service fabric 用于与外部设备双向通信的服务结构策略,azure-service-fabric,Azure Service Fabric,我的公司有兴趣使用一个独立的服务结构集群来管理与机器人的通信。在我们的场景中,每个机器人将托管自己的服务器,我们的服务结构应用程序将维护每个机器人的WebSocket客户端。我设想一个沿着设备ID划分的有状态服务,它在启动时打开连接。它应该通过心跳监测连接健康状况,将消息从机器人传递到某个协议网关服务,并侦听其他服务以获取要传递给机器人的消息 我没有在Service Fabric文档中看到关于这种外部通信方式的讨论-我无法判断这是否是因为: 以这种方式从服务结构管理WebSocket(或任何双

我的公司有兴趣使用一个独立的服务结构集群来管理与机器人的通信。在我们的场景中,每个机器人将托管自己的服务器,我们的服务结构应用程序将维护每个机器人的WebSocket客户端。我设想一个沿着设备ID划分的有状态服务,它在启动时打开连接。它应该通过心跳监测连接健康状况,将消息从机器人传递到某个协议网关服务,并侦听其他服务以获取要传递给机器人的消息

我没有在Service Fabric文档中看到关于这种外部通信方式的讨论-我无法判断这是否是因为:

  • 以这种方式从服务结构管理WebSocket(或任何双向网络协议)没有特殊考虑。我没有看到关于限制的讨论,也没有看到任何理由,从概念上讲,为什么我不能这样做。我最初认为复制会有问题(复制消息?),但由于在任何时候只有一个副本可以是主副本,因此这似乎不是问题
  • 服务结构不太适合与外部设备进行双向通信

我希望能就这种架构是否可行提供一些指导。如果没有,讨论为什么它不起作用将是有帮助的。欢迎对服务结构服务和外部设备之间双向通信的局限性进行一般性讨论。我更希望我们能继续讨论独立的集群-我们目前没有使用Azure服务的计划。

我希望我对一切都理解正确

关于障碍:

我认为这里的主要问题是可以在服务副本和机器人之间建立双向连接

这有两个主要问题:

  • 只有主副本具有写访问权限,即只有一个副本能够修改状态。因此,可以通过为每个robot创建单独的分区(但请记住,在创建服务后,不能更改分区计数)或为每个robot创建单独的服务实例来缓解此问题(这将允许您动态添加或删除机器人,但需要与服务可发现性相关的附加逻辑)
  • 由于各种原因,复制副本可以关闭(终止)、移动到另一个节点(关闭并启动新复制副本)甚至降级(主复制副本get降级为次复制副本,另一个次复制副本get升级为主复制副本)。因此,服务代码和机器人通信代码应该能够处理此问题
  • 关于WebSocket的信息


    通过实现自定义和使用WebSocket,这看起来是可能的。

    您希望SF托管客户端而不是相反的原因是什么

    按照您的建议,我认为您将面临巨大的挑战,让SF在您的网络上找到这些设备并跟踪它们,例如防火墙、IPs、NAT、计划维护、故障、连接问题,除非您计划手动完成

    从我在您提供的关于rosbridge服务器的文档中看到的简短描述中,我可以理解您必须将其托管在服务器上(就像使用服务结构服务一样),并且您的设备将连接到它,在这种情况下,您的设备将安装ROS以进行此通信

    考虑到您对通信的担忧,service fabric服务只是您通常在本地机器上运行的可执行程序,如果它在本地机器上运行,则可能在本地的service fabric环境中运行,您唯一需要担心的是对群集的外部访问(如果在azure或网络配置中)和服务发现

    在我看来,您应该使用SF作为通信的中心点,每个设备都将连接到SF服务。 另一种方法是在两者之间架起沟通的桥梁。有一种很好的方法可能适合你的需要


    因为您希望避免使用Azure,所以在这种情况下,您可以使用另一个消息平台替换IoT Hub,或者在您的服务中实现rosbridge来处理呼叫。

    您有任何特定的理由使用service Fabric而不是WebApp吗?在某些情况下,我们对使用可靠的集合进行存储感兴趣。我们喜欢服务结构的可扩展性和可靠性。虽然目前不使用Azure,但我们最终还是希望销售托管在Azure中的项目。我们喜欢服务结构,因为我们可以在云和独立托管模型之间进行选择,同时维护类似的部署过程。到目前为止,我与rosbridge的交互都是机器人tself运行rosbridge服务器,我的服务必须作为客户端连接到它。我的公司是一家集成商,因此我们无法控制这些设备-我同意设备发现是一个问题,如果SF能够监听传入的连接会更好。此时,我准备通过手动注册来管理它。在这种情况下,您应该我对SF没意见。我给你的唯一建议是在规划这些有地位的服务时要小心,因为你知道每个服务可能有多个副本,并且只有一个主副本,一个辅助副本可能会升级到主副本,你的代码应该正确处理它。你能详细介绍一下
    ICommunicationListener?此架构中的SF将托管websocket客户端,而不是侦听器(机器人将侦听来自我的连接-我无法控制这一点,无论它听起来多么落后).在这种情况下,由于我不需要让命名服务发现任何URI,是否需要
    ICommunicationListener
    ?这就是为什么我认为复制不会带来问题-如果客户端生存期是在有状态服务的
    RunAsync
    方法中管理的,