写点什么

使用 HiveMQ 4 构建更具可扩展性和可靠性的 IoT 应用

2018 年 12 月 25 日

使用HiveMQ 4构建更具可扩展性和可靠性的IoT应用

HiveMQ 是一个基于 MQTT 的消息传递平台,设计用于支持物联网应用程序。最近发布的 HiveMQ 4 增加了对 MQTT 5 的支持,改进了其扩展系统,优化了与 Docker 和 Kubernetes 以及 AWS EC2 的集成。HiveMQ 4 支持所有的 MQTT 5 新特性,包括用户属性、否定确认和主题别名,并力争使 MQTT 3 和 MQTT 5 客户端可以透明地通信。此外,HiveMQ 4 还引入了一个新的扩展系统,旨在简化与企业级系统的集成。


InfoQ 采访了 HiveMQ 开发商 dc-square GmbH 的首席技术官 Dominik Obermaier。


InfoQ:您能简要说明一下 MQTT 5 给物联网应用程序带来了什么价值吗?它在哪些方面对 MQTT 3 进行了改进?


Dominik Obermaier:MQTT 于 1999 年开始开发,MQTT 3.1 规范于 2010 年发布。自 2010 年以来,很多事都变了,特别是在云计算和大规模系统开发领域。MQTT 也变得更加流行,所以规范现在应该更新了。以下是 MQTT 5 的部分关键目标。


  • 更容易以可伸缩且可靠的方式托管大型系统。

  • 改进错误报告,使整个应用程序更有弹性。

  • 使向 MQTT 消息添加用户属性成为可能,并改进性能和对小型客户端的支持。


如果一定要总结一下,我要说,对于原生云应用程序,MQTT 5 将使 MQTT 更具可伸缩性和可靠性。虽然一个支持 MQTT 3.1 的 HiveMQ 部署已经可以支持多达 1000 万个并发 MQTT 连接,每秒用于数据交换的消息超过 100 万条,但是 MQTT 5 是扩展到更大数量的基础。


InfoQ:MQTT 实现领域的竞争非常激烈。HiveMQ 如何从竞争中脱颖而出?


Obermaier:看到 MQTT 成为如此受欢迎的物联网标准真是太棒了。许多物联网平台供应商都将 MQTT 作为他们支持的协议之一。然而,对于 HiveMQ,MQTT 是我们平台的核心;它不是一个附加组件。我们认为,MQTT 是在连接设备和云平台之间传输数据的最佳协议。


我们在以下这些方面做得更好。


  • HiveMQ 可以扩展到 1000 万个连接。在运行时,HiveMQ 代理可以通过我们的自动弹性集群进行伸缩,并以 Kubernetes、Openshift 和 DC/OS 作为运营环境,提供对 Docker 等先进技术的支持。

  • HiveMQ 对于集群节点故障有更强的恢复能力。HiveMQ 会创建独立于集群节点的设备会话池。这意味着,如果集群节点失败,所有 MQTT 客户端都可以在不了解底层基础设施的情况下在另一个节点上恢复会话。如果你的物联网连接设备需要具有非常灵敏的用户体验,并且需要给终端用户提供始终在线的体验,那么这一点就非常重要。

  • HiveMQ 4 引入了一个新的扩展框架,极大地简化了将 HiveMQ 和 MQTT 消息集成到不同后端系统的过程。例如,我们集成了 InfluxDB 和 Prometheus,以简化 MQTT 消息数据的监控。我们的客户还使用扩展框架将他们的(通常是专有的)安全系统与 HiveMQ 集成。

  • 我们已经花费了大量的时间构建企业部署基于 MQTT 的系统时需要的管理和故障排除工具。例如,使用 HiveMQ 可以设置实时跟踪,以记录 MQTT 客户端和代理之间的交互。这使得运营团队可以识别出已部署系统的瓶颈和问题,并使得支持团队可以帮助遇到连接问题的终端用户。

  • 最后,HiveMQ 100%符合 MQTT。你可以使用任何符合 MQTT 协议的客户端,如 Eclipse Paho,来连接 HiveMQ 代理。其他一些供应商要求客户使用他们的客户端 SDK,这是因为他们不是符合 MQTT。我们在全球有超过 110 个客户,为了避免供应商锁定,他们需要完全基于标准的通信。


InfoQ:MQTT 是一项 ISO 标准,但绝不是物联网领域中存在的唯一协议。与其他广泛使用的物联网通信协议相比,您能否解释下 MQTT 在哪些场景中提供了最好的价值?


Obermaier:你说得对,有很多协议,实际上,HTTP 经常被用于物联网解决方案。在许多场景中,我们看到开发人员从 MQTT 中获益。


  • 如果你正在构建一个无法依赖于稳定的网络连接的连接产品。例如,汽车共享应用程序需要在网络连接中断时继续工作,然后在汽车通过隧道后重新连接。MQTT 允许会话连接在客户端和代理之间一直保持。

  • 如果你正在构建一个需要非常有效地利用网络带宽的物联网应用程序,例如在 GSM/3G 上运行。MQTT 消息非常小,而发布/订阅协议使得 MQTT 不像 HTTP 之类的协议或基于 XML 的冗长协议(如 XMPP)那么繁琐。MQTT 最初设计于 1999 年,用于石油和天然气行业的管道监控。他们需要一种可以高效利用网络和电力的协议,这正是今天物联网产品面临的关键挑战。


我认为,使 MQTT 在物联网中流行的关键技术差异包括:


  • 它是轻量级的,易于学习和使用(与 AMQP 等其他一些重量级协议相比);

  • 发布/订阅协议非常适合连接设备的大规模部署;

  • 它运行在 TCP/IP 上,因此,它对防火墙友好,并且很容易在数据中心或云平台上设置;

  • 所有连接尝试都是由客户端发起的,MQTT 客户端永远无法通过 Internet 寻址,这是一个巨大的安全特性。与 CoAP 等其他协议相比,MQTT 不会在客户端打开拒绝服务攻击的攻击媒介,因此,MQTT 在设计上是安全的。


InfoQ:物联网应用程序其中一个最大的问题是安全性。MQTT 5 和 HiveMQ 4 在这方面的表现如何?在您看来,要保证物联网设备的安全,还需要做哪些改进?


Obermaier:到目前为止,安全是所有物联网部署中最重要的挑战之一。有一个好消息:MQTT 5 在设计上是安全的。鉴于其发布/订阅架构,所有连接都是由客户端发起的。MQTT 代理自己永远不会建立到任何客户端的连接。因此,攻击者不可能访问设备,因为 MQTT 客户端不能通过 Internet 寻址。


对于高级应用层安全,MQTT 5 还引入了身份验证协议包,它允许使用挑战/响应协议(如 Kerberos、SCRAM 或其他 SASL 框架协议)进行身份验证和授权。当然,MQTT 仍然支持基于令牌或凭据的经典身份验证机制(如 OAuth 2.0 或古老的 username/password 身份验证)。


多年来,IT 行业在安全方面学到的一个重要经验是:不要自己重复发明轮子!这就是 MQTT 使用 TLS(最好是 1.2 或全新的 1.3 版本)在客户端和代理之间进行加密通信的原因。这是我们今天 Internet 安全的基础,也是 HTTP 和其他 Internet 协议(如 SMTP 和 FTP)用于创建加密通信通道的方法。


HiveMQ 4 实现了上面讨论的所有安全机制。通过灵活的扩展系统,可以通过预构建的扩展以插件的形式接入 OAuth 2.0 服务器、LDAP 或设备管理数据库。其代理提供高级权限管理,因此,你可以限制个人客户端或客户组发布或订阅哪些数据。由于 HiveMQ 通常部署在部署着企业级系统的企业环境中,因此,它提供了开箱即用的 OCSP Stapling 或 PKI 集成等高级安全机制。


InfoQ:您如何看待物联网通信协议的发展?它们会收敛于一个共同的标准吗?特别地,您对 MQTT 的未来有什么设想?


Obermaier:由于存在不同类型的物联网用例,所以总会有不同的物联网通信协议。我没有看到一个共同的标准出现。不过,如果你查看最近的调查数据,似乎 MQTT 和 HTTP 将成为主导标准。我们在客户部署中也看到了这一点。


对于 MQTT 的未来,我认为,采用 MQTT 作为边缘计算的通信协议将是一个看点。当边缘节点相互通信,形成网络网格时,这一点尤为重要。MQTT-SN 是网格网络的一个潜在解决方案,我认为它将在未来几年被采用。


很明显,MQTT 将继续存在,而且在我看来,将来 MQTT 的采用率将继续增加,对于专业的大规模部署而言尤其如此。


消息队列遥测传输(MQTT)是一种用于物联网应用的 ISO 标准通信协议。它定义了支持设备之间一对多通信的发布-订阅协议。MQTT 客户端可以通过代理服务发布消息和/或订阅新消息的通知。


查看英文原文:


https://www.infoq.com/news/2018/12/hivemq-4-mqtt-5-support


2018 年 12 月 25 日 08:001132
用户头像

发布了 1008 篇内容, 共 308.2 次阅读, 收获喜欢 273 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

第九周作业

solike

架构师训练营 - 作业 - 第九周

Max2@12

架构师训练营 2 期 - 第五周总结

Geek_no_one

极客大学架构师训练营

「架构师训练营第 1 期」第九周作业

张国荣

架构一期 第九周作业

haha

极客大学架构师训练营

架构师训练营 1 期 - 第九周作业(vaik)

行之

极客大学架构师训练营

架构师训练营 2 期 - 第5周命题作业

Geek_no_one

极客大学架构师训练营

五周 - 作业

水浴清风

一致性hash

架构师训练营第九周总结

邓昀垚

极客大学架构师训练营

java实现一致性 hash 算法

Mars

一致性Hash算法

第五周 作业

Geek_9527

第五周总结

Griffenliu

第五周作业

Griffenliu

训练营第五周总结

大脸猫

极客大学架构师训练营

第九周总结

solike

极客时间架构 1 期:第 9 周 性能优化(三) - 命题作业

Null

架构师训练营 - 第九周 - 作业一

行者

架构师训练营第 1 期 -- 第九周作业

发酵的死神

极客大学架构师训练营

第 5 周 系统架构作业

心在那片海

性能优化(三)

wing

极客大学架构师训练营

架构师训练营第九周作业

邓昀垚

极客大学架构师训练营

Python进阶——如何正确使用魔法方法?(上)

Kaito

Python

第九周作业

TheSRE

极客大学架构师训练营

第 5 周 系统架构总结

心在那片海

架构师训练营第九周学习笔记

郎哲

极客大学架构师训练营

「架构师训练营」第 5 周作业

小黄鱼

极客大学架构师训练营

架构师训练营作业

郎哲

极客大学架构师训练营

顺序查找

ilovealt

算法和数据结构

极客时间架构 1 期:第 9 周 性能优化(三) - 学习总结

Null

一致性hash算法

落朽

常见的负载均衡实现方案

幸福小子

负载均衡架构

NLP领域的2020年大事记及2021展望

NLP领域的2020年大事记及2021展望

使用HiveMQ 4构建更具可扩展性和可靠性的IoT应用-InfoQ