使用gRPC作为物联网协议而非LWM2M/CoAP

10
我一直在考虑使用gRPC来连接物联网设备,这些设备不太受限制,比如传感器;更像是内置单板计算机的设备,比如机器人、无人机等。需要一个接口来连接设备和集中控制器,因为这些设备是由不同公司分别开发的。所以必须有一个版本化的接口语言,并且它不应该只是一个 Word 文档,而是像头文件、WSDL、IDL 或 ProtocolBuffer 这样可编程的东西。同时,在设备和控制器之间,应该指定常见用例的行为,比如注册、重新注册等。这可以在 Word 文件或某些非技术文件中进行。
使用 Protocol Buffer(版本 3)中的(rpc)接口规范以及通过 gRPC 的高效实现,使我选择它而不是 CoAP / LWM2M(Leshan Java 和 C++ 实现)。
使用过 LWM2M 和 gRPC 后,我可以说 gRPC 更适合开发者;与 OMA LWM2M 流程相比,接口定义和实现更快。当然,gRPC 没有 Observer-Notify,但对于此问题,MQTT 应该足够了。
严格来说,LWM2M 不能与 gRPC 相比较。LWM2M 不仅定义了接口,还在许多物联网案例中定义了行为,例如 BootStrap、Registration、KeepAlive、SW Upgrade 等,并且它的通用 HTTP 类 GET、PUT 在 URL 可寻址资源上使其非常完整。然而,这些行为中的大多数都可以通过一些努力进行自定义定义。
我们计划编排的一些物联网设备远非像灯泡那样简单,更像机器人。有人使用 gRPC 进行类似的目的吗?有没有成功或失败的故事分享?

在grpc社区中也提出了这个问题,但没有得到回应,因此在这里发布;https://groups.google.com/forum/#!topic/grpc-io/H0DBwvUqIDA - Alex Punnen
1
虽然看起来很完整,但我一直在模糊地跟进gRPC,它真的是全新的。我正在内部测试它用于Node.js微服务,但我不敢自信地说它经过了实战考验和/或生产稳定。除非你愿意玩长期游戏,进行研发/原型设计并/或坚持使用可能会成为最好基础的东西,并且不必担心大规模重写,因为随着时间的推移,gRPC变得更加稳定。 (也许在一年内,它可以被认为是一个可靠的库),否则你可能更安全地使用你所知道的或者纯粹的协议缓冲区。 - Nexii Malthus
谢谢,现在我知道gRPC存在了!我正在研究一些不太受限制的M2M,并且有两个问题困扰着我。第一个是传输比看起来更接近硬件。Coap由Arm标准化并以C实现,这很好。第二个是安全性,没有人关心,因为他们期望在一年内出售并逃脱邪恶帝国的恶棍剥夺公司的知识产权。我无法为MQTT找到PKI,因此不能将其暴露在工业机器上的互联网上。它必须是一个整体解决方案。 - Arthur Tarasov
4个回答

8

如果使用gRPC来进行物联网通信,我会想念MQTT MQ的能力,例如消息排队、代理器桥接和QoS参数。而对于CoAP协议,则需要通过短信传输进行带外消息的传递。在这种情况下,gRPC只是一个远程过程调用框架,它假定始终通过TCP保持连接。


4
我们考虑采用与Joe相同的解决方案,其中包括CoAP+Protobuf:
  • Protobuf和其IDL是一种非常有帮助的方式,可以以集中的方式定义和管理我们的API。Google的api-linterAIPs是保持一切合理性的高质量资源。
  • 用于传输的CoAP:轻量级协议,用于物联网设备。它几乎在所有RTOS/嵌入式/平台上都可用,并且适应了我们通常在这个世界中面临的低带宽。作为Thread选择的协议以及Project Connected Home Over IP提供的支持也有所帮助。
  • 无论是请求/响应还是由物联网设备推送的事件消息,都使用Protobuf进行消息处理。 nanopb已经解决了这个问题,它是针对嵌入式系统的protobuf兼容C代码生成器。
  • 根据IDL生成我们自己的存根,以创建我们自己的包装器覆盖CoAP和nanopb代码。通过利用此功能,支持一元调用和服务器流呈现CoAP可观察机制。

3

我已经决定在一个与“设备”相关的项目中使用它;这些是像树莓派一样的小型计算机。总体来说,这是一个不错的经验;主要使用的语言是C++和Java,还有Node.js中的JavaScript。我们将其作为Docker化的微服务使用;负载均衡是我们没有做的事情;我读到了基于HTTP/2的负载均衡很棘手;我会更新这个部分;计划使用Kubernetes来解决这个问题。总的来说,版本化接口的容器技术-GRPC似乎非常适合(微)服务。


有趣,你有任何示例代码吗?你是如何让gRPC在受限设备上工作的? - thegreendroid
嗨,我们拥有的设备并不太受限制;你可以把它想象成一个树莓派。 - Alex Punnen

0

我使用esp32和R_Pi与CoAP和protobufs。据我所知,esp32/8266不支持gRPC。我对它感到非常满意,但没有针对lwm2m进行任何具体测试。实现在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接