尝试在 Python 中使用 gRPC 与多个服务器或可能多路复用

Trying to use gRPC in Python with multiple servers or possibly multiplexing

我们的用例涉及一个 class,它必须远程初始化另一个 class 的多个实例(每个都在不同的 IoT 设备上),并且必须从每个实例中获得特定结果。最多,我们需要每秒从每个远程客户端接收 30 条消息,每条消息都相对较小。你们会推荐什么类型的架构来解决这个问题?

我们在想,每个位于物联网设备上的 class 将充当服务器,接收结果的 class 将是客户端,所以我们应该创建一个服务器,每个物联网设备都有自己的频道?或者是否可以让每个 IoT 设备在同一台服务器上使用相同的服务(意味着同一台服务器上的同一服务会有多个实例,但在不同的设备上)?

这个问题需要更多的细节来帮助指导答案。

gRPC(及其对 HTTP/2 的使用)是 'heavier' 协议,例如MQTT。 MQTT 更常用于 IoT 设备,因为它占用空间更小。 REST/HTTP(即使比 MQTT 更重)也可能比 gRPC/HTTP2 对您有好处。

如果您致力于 gRPC,我想知道是否可以颠倒您提出的架构并将 IoT 设备作为客户端更好?这似乎提供了额外的安全性,因为客户端发起与您的服务器的通信而不是公开服务。无论哪种方式(如果您决定使用 MQTT),希望您将使用 mTLS。我假设 (!?) 客户端实现小于服务器实现。

无论方向如何,客户端和服务器都可以(独立地)传输消息。 IoT 设备(客户端或服务器)可以流式传输 30 messages/second。服务器可以流式传输管理|控制消息。

我没有管理 IoT 设备群的经验,但我认为,远程管理|监控和无线升级|打补丁对您来说是重要的要求。 gRPC 不限制任何这些功能 调试可能更具挑战性。例如REST/HTTP,卷曲端点是微不足道的,但使用 gRPC(即使使用出色的 grpcurl),您将受限于所实现的服务。是的,您也不能调用不存在的 REST API,但我发现远程调试 gRPC 服务比 REST 更具挑战性。