0%

从零构建物联网平台-平台架构


从零构建物联网平台系列文章:

  1. 从零构建物联网平台-给个理由先
  2. 从零构建物联网平台-平台架构
  3. 从零构建物联网平台-需求规划、技术选型和系统设计
  4. 从零构建物联网平台-环境构建
  5. 从零构建物联网平台-MQTT消息代理(Message Broker)
  6. 从零构建物联网平台-构建关键组件
  7. 从零构建物联网平台-实现WebSocket通信

针对物联网铺天盖地的宣传,影响了人们对其工作原理的理解。就像1000个读者心中有1000个哈姆雷特,如果你问1000个人物联网是如何工作的,你会得到1000个不同的答案。这些答案可能太片面或者只针对某解决方案,而不是物联网本身的运作方式。

本篇主要针对以下内容进行展开:

  • 物联网解决方案的关键模块
  • 物联网平台的架构图
  • 模块之间如何协调工作
  • 后续开发计划

让我们首先讨论一些常用的术语。物联网解决方案和物联网应用系统之间存在差异。物联网解决方案通常指端到端的产品、服务或两者的混合;而物联网应用系统通常指IT软件或移动应用程序,或两者的组合。显然,物联网解决方案比物联网系统包含更多的内容。很多业务环境、客户环境都会影响物联网解决方案。

然而,从物联网平台的角度来看,它处于物联网应用的边缘,通常是处理物理对象(即物联网和软件系统)的边界系统。典型物联网解决方案的架构如下图。

物联网解决方案

设备及网关可以参考我的文章(物联网技术栈之网关技术),在这就不做赘述。

物联网平台是整个物联网解决方案的协调者,通常托管在云上。负责与下游设备通信并高速度接收大量遥测数据。该平台还负责以时间序列和结构化格式存储数据以供进一步处理和分析。

根据内置的复杂性,平台可以支持深层数据分析和其他操作。然而,物联网平台的核心是作为整个系统的协调器。

在大多数情况下,应用系统是整个解决方案的前端。它必须以有业务价值的方式呈现给最终用户。这些应用系统是基于桌面的、基于移动的,或者两者兼具。应用系统还以各种方式丰富平台中的数据,并以可视化的格式将其呈现给用户。此外,这些应用系统提供接口与其他系统和应用进行集成,并支持应用间的数据交换。比如自动库存盘点,设备为库存物资提供了轨迹跟踪功能,并将数据上传到ERP系统以进行库存管理。

物联网平台架构

让我们看看通用型物联网平台的架构组成。下图展示了典型物联网平台的架构图。

物联网平台架构图

箭头表明每个模块之间的数据和信息流。每个模块表示平台的主要功能组件。下面我们对每个模块展开说明。

边缘接口、消息代理和消息总线模块

这个模块连接物理世界:主要是异构设备、传感器和网关。由于设备可以通过多种通信技术进行通信,如Wi-Fi、蓝牙、LoRaWAN、GPRS等,因此该模块需要满足所有这些技术要求。我们可以用模块化的方式来实现,其中每种类型的通信协议都是单独实现的。例如,支持Wi-Fi的设备可以是REST API,它可以是基于MQTT的消息代理,支持以发布/订阅方式进行通信。

该模块有效地将整个平台与设备解耦。现代物联网设备支持许多边缘接口和协议。无论使用何种通信媒介、网络类型和协议,消息代理的工作都是以统一的方式整合数据并将其推送到公共消息总线。所有其他模块共享消息总线进行进一步操作。代理充当消息的协调器和合并器。

消息路由和通信管理模块

一旦消息发送到消息总线,消息需要加入更多上下文信息,以便其他模块识别和处理。通信管理模块的工作是丰富化现有的数据消息,并将其重新广播到消息总线,在消息到达后附加上下文信息和其他消息来标记它们。通信管理功能与消息代理和规则引擎块协调,根据需求与设备管理模块交互。

此外,通信管理模块执行格式转换的任务;例如,它将数据从CSV转换为JSON,或将二进制转换为文本格式。我们还可以让它执行某些操作,如数据去重,数据去重是从设备中消除或丢弃多个重复消息或冗余数据包的过程,因为它们可能没有任何用处。数据去重取决于设备或传感器类型,我们需要根据具体情况来实现。作为通信路由,该模块可以进一步控制平台上的消息和通信。

时序存储和数据管理模块

顾名思义,该模块按顺序(时间序列)存储消息总线上的所有接收和分析数据。虽然数据存储不是物联网平台的核心功能,平台外的模块或系统可以处理数据存储。但通常,通信和路由模块或消息代理本身出于特定的功能目的需要最新的数据,数据存储对于这样的需求都很方便。

对于许多物联网应用,用户更喜欢从物联网平台中提取数据,并将其存储在数据仓库中进行进一步处理。因此,它通常用于设备数据的临时存储,而不是用于大数据存储、处理和分析。

随着物联网的普及,市面上的时序数据库产品越来越多,比如Cassandra、InfluxDB等,国内的产品也日渐丰富,并且质量不输于国外产品,比如近两年比较有名的TDEngine。前面作者写过Cassandra的系列文章,可以参考。

规则引擎模块

这是一个非常强大的模块,规则引擎是一个执行模块,它监听整个平台上的消息总线和事件,并根据设置的规则执行操作。

例如,一个典型的规则引擎功能可能是这样的:“当下游设备发送包含alarm关键字的数据包时触发并广播报警消息。”规则引擎不断监听消息总线广播。当通信模块将解码后的数据包从下游设备传输到消息总线时,规则触发。规则引擎将另一条消息(报警)广播到消息总线。由于这一切都发生在物联网平台内和模块之间,执行效率会非常高。

规则引擎还帮助强化其他模块,比如添加解码新加入的设备协议数据的规则,因此增强了通信模块的功能。除此之外,很容易实现对其他模块、应用系统的回调。

REST API模块

Restful API对于不需要持续或实时连接和访问的函数和程序非常有用。通常由上游程序和应用系统调用,但下游设备也可以在需要时访问这些API。

一个典型例子是使用Wi-Fi连接的温度传感器,它每15分钟发送一次数据。由于两个后续遥测数据之间的时间较长,因此不需要长链接。简单的HTTP操作可以相对高效地完成数据发送任务。在这种情况下,传感器可以通过REST API将数据发送到平台。REST API与消息代理和通信管理模块一起工作,将接收到的数据post给消息总线。它还可以使用时序数据库数据将响应发送回传感器。这个响应可能包含传感器在下一轮中以特定方式执行操作的附加信息。

REST API模块还可以支持数据聚合和批量操作功能,例如上游应用系统查询多条记录。这样,上游应用系统与核心物联网平台保持解耦,从而保持功能划分清晰,确保设计的合理性。可以内置各种基于角色的鉴权功能来访问API。

REST API模块还可以操作规则引擎,并允许应用系统在任何时间配置或触发特定的规则。也可以让下游设备能够利用相同的功能,当设备需要自动启动某些工作流来代替应用系统触发器时,这可能很方便。例如智能门锁,当房主不在家时,房门有需要房主注意的报警时,上游应用系统可以及时通知用户,然后期望用户响应进一步的操作。如果用户不响应,则应用系统可以触发预定义操作的规则。如果报警的等级相对较高,则设备可以配置为不等待用户操作或响应,而直接触发默认工作流(例如,提高安全性、发出报警声、拨打110等)。这些功能可以在设计智能设备时派上用场。

微服务模块

物联网平台除了具有上述功能外,还需要一定的支撑功能才能有效运行。短信或电子邮件通知、验证码、社交媒体身份验证或支付服务集成等服务是这些辅助服务。这些服务聚合在微服务模块中。

微服务的抽取(下沉)原则是,如果在平台内频繁使用某些功能,可以将其聚合成一个微服务,将其与平台解耦。一旦微服务化,它就可以暴露在平台内外的模块中复用。

设备管理模块

当平台接入50台以上的设备时,可能会变得难以管理。有必要为管理设备提供相应的功能。这就是设备管理模块的作用。它本质上提供了将设备作为资产进行管理的通用功能。这包括查询所有设备、它们的活动非活动状态、位置信息、电池电量、网络状况、访问密钥、遥测数据、设备详细信息、会话信息和其他内容。

设备管理模块还有助于管理设备组的OTA(在线固件升级),系统管理员的集中监控。在某些使用情况下,设备还需要访问权限,用户可以分配到一组设备的某些访问权限。使用设备管理模块可以轻松地实现这些功能。

系统管理和用户管理模块

这个模块提供与设备管理模块类似的功能。不同之处在于,它为上游应用系统和用户提供了必要的功能。典型的用户管理功能(如密码、访问密钥、登录和权限)通过此块进行管理。对于上游应用和各种其他系统的集成,可以通过这一模块管理API密钥和访问权限。

虽然它看起来更像是一个应用层的功能,但将其划分到平台符合物联网平台的设计原则,这样使其与平台整体架构、下游设备及上层应用紧密集成。

所有模块都是必要的吗

答案是不。虽然8个模块定义了一个架构良好的物联网平台,但并非所有模块都是必需的。特定的垂直领域或行业可能会以不同的方式拆解或重组这些模块。你不需要一开始就使用所有模块,它们可能会在平台演进的生命周期中迭代添加。

核心功能模块设备接口和消息代理、消息路由和通信模块、数据存储、设备管理和规则引擎对于物联网平台的有效运行至关重要。其他模块REST API、微服务、系统管理和用户管理通常可以让系统开发和运维变得简单,但不是必要的,也不会妨碍物联网平台的功能。

在从零开发物联网平台过程中,我们会将这些功能放在次要位置,只有在时间和资源允许的情况下才进行实现。

开发计划

为了在最快的时间内开发出一个物联网平台,我们不仅会以模块化的形式开发,还会以敏捷的方式推进。每个模块都会被规划、设计、开发,然后部署进行测试。一旦我们测试一个单独的模块可以正常工作,我们就可以进入下一个模块。

作为第一步,我们会准备服务器等基础设施;然后构建我们的第一个模块基础组件:边缘接口和消息代理;接下来的步骤是构建时序数据存储;然后我们将开发基本的REST API,然后是消息路由模块功能。

一些微服务会在构建好平台的基本框架之后再开发。我们对所有这些模块进行多次迭代,以构建一个稳定的核心平台。

核心功能构建完成后,就可以构建规则引擎模块;然后是设备管理模块;最后是系统管理和用户管理模块,因为它属于非必要模块。

总结

在这一篇中,我们讨论了物联网平台核心架构及功能模块,介绍了所有模块的详细规范。并确定了我们的开发计划。

坚持原创技术分享,您的支持将鼓励我继续创作!