ThingsBoard 物联网平台-代码结构分析

简介: ThingsBoard 物联网平台-代码结构分析

1. 工程代码及结构分析


文档更新日期:2023-02-20 11:21:00


ThingsBoard 是什么


ThingsBoard 是一个备受瞩目的开源物联网平台,其优秀的性能和高效的性能得到了广大开发者的认可。ThingsBoard 用于数据收集、处理、可视化和设备管理的开源物联网平台。它通过行业标准的物联网协议 - MQTT、CoAP 和 HTTP 实现设备连接,并支持云和本地部署。Thingsboard 具有可伸缩性、容错性和性能优越的特点。


功能列举:


  • 设备管理,资产和客户并定义他们之间的关系。


  • 基于设备和资产收集数据并进行可视化。


  • 采集遥测数据并进行相关的事件处理进行警报响应。


  • 基于远程 RPC 调用进行设备控制。


  • 基于生命周期事件、REST API 事件、RPC 请求构建工作流。


  • 基于动态设计和响应仪表板向你的客户提供设备或资产的遥测数据。


  • 基于规则链自定义特定功能。


  • 发布设备数据至第三方系统。


了解更多功能请参见 ThingsBoard 功能列表


ThingsBoard 功能


功能模块结构划分


模块 目录 消费方 简要说明 功能职责 是否可修改
ThingsBoard Server Application aplication Core 应用相关 同时也是启动类。包含 thingsboard 提供的 rest 接口,后端主要修改的模块 可修改
Thingsboard Server Commons common Core, Rule-engine 公共部分 thingsboard 公共接口 interface 定义,包含基础方法。包含了data、util、message 、actor、queue、 transport 、dao-api、cluster-api、stats、cache 、coap-serve、edge-api 共计 12 个 sub module 不可修改
Thingsboard Server DAO Layer dao Core, Rule-engine dao 层 数据访问层 可修改
Netty MQTT Client netty-mqtt Rule-engine Netty MQTT 客户端的实现 提供给规则引擎使用。目前为构建 MqttNode 提供支持,该节点用于发送消息到 MQTT broker 无需修改
Netty MQTT Client netty-mqtt Rule-engine Netty MQTT 客户端的实现 提供给规则引擎使用。目前为构建 MqttNode 提供支持,该节点用于发送消息到 MQTT broker。 无需修改
Thingsboard Rest Client rest-client 不适用 提供 java 版客户端 提供 java 版客户端,简化对 rest 接口的调用。 可修改
Thingsboard Extensions rule-engine Rule-engine 规则引擎 分为 api module 和 components module 两大块。 不可修改
Thingsboard Server Transport Modules transport Transports 提供给设备使用的 api ThingsBoard 提供基于 MQTT、 HTTP、 CoAP 和 LwM2M 的 api,可用于设备应用程序/固件。每个协议 api 都由一个单独的服务器组件提供,并且是 ThingsBoard “传输层” 的一部分。MQTT Transport 还提供了网关 api,供代表多个连接设备和/或传感器的网关使用。 不可修改
ThingsBoard Server UI ui-ngx ui 前端页面 ThingsBoard 提供了一个使用 Express.js 框架编写的轻量级组件来承载静态 web ui 内容。使用了 Angularjs、ES6、Reactjs、webpack、node 技术 可修改

其他目录结构划分

目录 消费方 简要说明 功能职责 是否可修改
docker 不适用 docker 部署文件夹 包含大量 docker 打包和虚拟部署的脚本和配置模板 无需修改
img 不适用 图片文件夹 仅用于存放 Logo.png 图片 可修改
msa 不适用 提供微服务支持 提供微服务支持 不可修改
packaging 不适用 打包应用专用目录 打包应用专用目录 不可修改
tools 不适用 工具类 系统工具类。提供了用于将 ThingsBoard 从 Postgres 迁移到 hybrid 模式。MQTT SSL 用于测试的客户端。基于 python 环境的 mqtt 测试工具类。 可修改


说明:aplication,rule-engine 和 transport 是需要重点关注的内容。已着重加粗表示。


编程语言和第三方


ThingsBoard 后端是用 Java 编写的但是我们也有一些基于 Node.js 的微服务。


ThingsBoard 前端是基于 Angular JS 框架的 SPA。


有关使用的第三方组件的更多详细信息请参见整体微服务页面。


协议Apache 2.0 License


架构说明


ThingsBoard 设计原则:


  • 高扩展: 使用领先开源技术构建的可水平扩展平台。


  • 高容错:无单点故障集群中的每个节点都是相同的。


  • 高性能:单个服务器节点可以根据用例处理几十甚至数十万个设备,集群可以处理数百万台设备。


  • 高灵活:开发新功能可以方便的使用自定义部件、规则引擎等。


  • 持久化:数据永久保存


重要概念:


设备接入:MQTT、CoAP、HTTP


规则引擎:配置设备消息的处理流程


核心服务:设备认证、规则和插件、租户和客户、小组件和仪表盘、告警和事件


服务端 API 网关:REST API、websockets


Actor 模型:主要用于并发


集群模式:Zookeeper 用于服务发现,一致性哈希保证消息的扩展性和可用性。


安全:SSL用于 HTTP 和 MQTT


设备认证:Token 和 X.509


第三方工具:AKKA【Actor】、Zookeeper、gRPC、Cassandra


单体技术架构说明


目前一共包含 Transports,UI,core 和 Rule-Engine 四部分内容。


1. Core 服务


ThingsBoard Core 负责处理 REST API 调用和 WebSocket 订阅。它还负责存储有关活动设备会话和监视设备连接状态的最新信息。ThingsBoard 核心使用角色系统实现主要实体的角色: 租户和设备。平台节点可以加入集群,其中每个节点负责传入消息的某些分区。

包接口展示:


  • appaction.main.java.org.thingsboard.server ThingsboardServerApplication.java(启动类)


  • install 服务开启相关配置、异常和调用


  • exception 响应错误及错误逻辑处理


  • controller 页面展示必要的系统数据接口


  • service 为 controller 提供支持


  • config 为同源策略、swagger、webSocket、消息及安全配置注册 spring bean


2. Transports components


ThingsBoard 提供基于 MQTT、 HTTP、 CoAP 和 LwM2M 的 api,可用于设备应用程序/固件。每个协议 api 都由一个单独的服务器组件提供,并且是 ThingsBoard “传输层”的一部分。MQTT 传输还提供了网关 api,供代表多个连接设备和/或传感器的网关使用


一旦传输从设备接收到消息,它将被解析并推送到持久消息队列。只有在消息队列确认了相应的消息之后,消息传递才会被设备确认。


3. Rule-Engine component


ThingsBoard 规则引擎是系统的核心,负责用用户定义的逻辑和流程处理传入的消息。使用了 Actor System 来实现主要实体的参与者: 规则链和规则节点。规则引擎节点可以加入集群,其中每个节点负责传入消息的某些分区。


Rule Engine 订阅来自队列的传入数据提要,并且只在处理消息后才确认该消息。有多种策略可用于控制订单或消息处理以及消息确认标准。详情请参阅提交策略和处理策略。


规则引擎可以在两种模式下运行: 共享和隔离。在共享模式下,规则引擎处理属于多个承租者的消息。在隔离模式下,规则引擎可能被配置为仅处理特定承租者的消息。


4. Web UI 服务


ThingsBoard 提供了一个使用 Express.js 框架编写的轻量级组件来承载静态 web ui 内容。这些组件是完全无状态的,没有多少可用的配置。静态网页界面包含捆绑。一旦加载完成,应用程序就开始使用 ThingsBoard Core 提供的 REST API 和 websocket API。


微服务架构说明


自 ThingsBoard v2.2 以来,该平台支持微服务部署模式。这里会说明包括高级图、各种服务之间的数据流描述以及所做的一些架构选择。


thingsboard 微服务构架详情:https://thingsboard.io/docs/reference/msa/


1. Transport 微服务


ThingsBoard 提供基于 MQTT、 HTTP 和 CoAP 的 api,可用于设备应用程序/固件。每个协议 api 都由一个单独的服务器组件提供,并且是 ThingsBoard 传输层的一部分。


2. Node 微服务


节点是一个用 Java 编写的核心服务,负责处理:


  • REST API 调用;


  • 关于实体遥测和属性更改的 WebSocket 订阅;


  • 通过规则引擎处理消息;


  • 监视设备连接状态(活动/非活动)。


注意: ThingsBoard v2.5 调度将规则引擎移动到单独的微服务。


ThingsBoard 节点使用 Actor System 来实现租户、设备、规则链和规则节点参与者。平台节点可以加入集群,其中每个节点相等。服务发现是通过 Zookeeper 完成的。节点使用基于实体 id 的一致哈希算法在彼此之间路由消息。因此,同一实体的消息在同一 ThingsBoard 节点上处理。平台使用 gRPC 在 ThingsBoard 节点之间发送消息。


注意: ThingsBoard 的作者们考虑在未来的版本中从 gRPC 迁移到 Kafka,以便在 ThingsBoard 节点之间交换消息。其主要思想是牺牲小的性能/延迟代价,以换取 Kafka 用户组提供的持久可靠的消息传递和自动负载平衡。


3. Web UI 微服务


提供了一个使用 Express.js 框架编写的轻量级组件来承载静态 web ui 内容。这些组件是完全无状态的,没有多少可用的配置。


4. JavaScript Executor 微服务


ThingsBoard 规则引擎允许用户指定自定义的 JavaScript 函数来解析、过滤和转换消息。由于这些函数是用户定义的,因此我们需要在独立的上下文中执行它们,以避免影响主处理。提供了一个使用 Node.js 编写的轻量级组件,远程执行用户定义的 JavaScript 函数,将它们与核心规则引擎组件隔离开来。


依赖中间件说明


单体架构依赖中间件说明


消息队列


ThingsBoard 支持多种消息队列实现: Kafka、 RabbitMQ、 AWS SQS、 Azure 服务总线和 Google Pub/Sub。未来 thingsborad 还会将名单进行扩充。


数据库


ThingsBoard 使用数据库存储实体(设备、资产、客户、仪表板等)和遥测数据(属性、时间/传感器读数、统计数据、事件)。平台目前支持三种数据库选项:


  • NoSQL (不推荐)-存储所有实体和遥测数据在 NoSQL 数据库。ThingsBoard 的作者建议使用 Cassandra,这是目前唯一一个 ThingsBoard 支持的 NoSQL 数据库。


  • 混合(PostgreSQL + Cassandra)-在 PostgreSQL 数据库中存储所有实体,在 Cassandra 数据库中存储时间序列数据。


  • 混合(PostgreSQL + Timescale)-在 PostgreSQL 数据库中存储所有实体,在 Timescale 数据库中存储时间序列数据。


Redis


Redis 用于缓存资产、实体视图、设备、设备凭证、设备会话和实体关系。


微服务架构依赖中间件说明


在单体架构需要的中间件的基础上,还要有以下补充。


kafka


ThingsBoard 使用 Kafka 持久保存从 HTTP / MQTT / CoAP 传输站传入的遥测数据,直到它被规则引擎处理为止。ThingsBoard 还在微服务之间使用 Kafka 进行一些 API 调用。


Zookeeper


Zookeeper 可实现高度可靠的分布式协调。使用 Zookeeper 来处理从单个实体(设备、资产、租户)到特定 ThingsBoard 服务器的请求处理,并确保只有一个服务器在单个时间点处理来自特定设备的数据。Zookeeper 使用一致性哈希算法确定每个使用者应订阅的分区列表。如单体架构中使用了 kafka 则会成为必选组件。


LoadBalancer 组件


在微服务架构中,官方建议使用 HAProxy,您也可以用一些其他 LoadBalancer。


相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
7月前
|
人工智能 边缘计算 监控
【开源视频联动物联网平台】视频AI智能分析部署方式
【开源视频联动物联网平台】视频AI智能分析部署方式
363 3
|
9天前
|
存储 安全 物联网
C语言物联网开发之设备安全与代码可靠性隐患
物联网设备的C语言代码安全与可靠性至关重要。一是防范代码安全漏洞,包括缓冲区溢出和代码注入风险,通过使用安全函数和严格输入验证来预防。二是提高代码跨平台兼容性,利用`stdint.h`定义统一的数据类型,并通过硬件接口抽象与适配减少平台间的差异,确保程序稳定运行。
|
6月前
|
人工智能 物联网 5G
物联网投资趋势:市场分析与预测
【6月更文挑战第7天】物联网驱动全球经济,市场规模迅速扩大,尤其在智能家居、智能工业、智能医疗领域。新兴商业模式和投资机会涌现,如平台整合、核心技术研发。5G普及、AI融合及物联网安全是未来投资趋势。Python示例代码显示了与物联网设备交互的可能性。尽管面临技术更新快、竞争激烈等挑战,投资者需了解行业趋势、关注创新企业、评估风险和回报,以实现长期投资成功。物联网投资前景广阔,将成为投资领域关键部分。
85 2
|
27天前
|
SQL 监控 物联网
ClickHouse在物联网(IoT)中的应用:实时监控与分析
【10月更文挑战第27天】随着物联网(IoT)技术的快速发展,越来越多的设备被连接到互联网上,产生了海量的数据。这些数据不仅包含了设备的状态信息,还包括用户的使用习惯、环境参数等。如何高效地处理和分析这些数据,成为了一个重要的挑战。作为一位数据工程师,我在一个物联网项目中深入使用了ClickHouse,以下是我的经验和思考。
61 0
|
2月前
|
安全 网络协议 物联网
物联网僵尸网络和 DDoS 攻击的 CERT 分析
物联网僵尸网络和 DDoS 攻击的 CERT 分析
|
5月前
|
安全 物联网 物联网安全
物联网安全风险分析
### 物联网安全概览 #### 背景 物联网设备因其默认安全设置薄弱,成为黑客攻击目标。随着OT网络中物联网角色增多,这些设备临近关键系统,攻击者利用其发起攻击。 #### 物联网定义 物联网(IoT)是通过信息传感设备连接物品与互联网,实现智能化识别、定位、跟踪的网络。涵盖智能家居、可穿戴设备到复杂工业系统。 #### 攻击者偏好 物联网设备易受攻击,2022年针对物联网的网络攻击大幅增长,如DDoS攻击和恶意软件事件。物联网端点的安全疏忽使其成为恶意软件传播途径。 #### 制造业面临风险 制造业因物联网设备被攻击,导致勒索软件攻击增加,因生产中断造成的损失更大。
物联网安全风险分析
|
5月前
|
机器学习/深度学习 数据可视化 物联网
物联网设备的数据可视化与分析:解锁未来智能世界的钥匙
【7月更文挑战第6天】物联网设备的数据可视化与分析是解锁未来智能世界的关键。通过不断探索和实践,我们可以更好地利用物联网数据,推动技术创新,提升社会运行效率,为人们的生活带来更多便利和惊喜。面对技术挑战,我们应保持开放心态,积极学习新技术、新方法,不断优化数据可视化与分析的流程和效果,为物联网的繁荣发展贡献力量。
|
5月前
|
数据采集 存储 运维
物联网设备的数据处理与分析技术探讨
【7月更文挑战第2天】探索物联网(IoT)数据处理技术,涵盖数据采集(传感器、无线通信)、存储(分布式系统、NoSQL)、处理(清洗、压缩、转换)和分析(描述性、聚类、分类、异常检测)。未来趋势涉及AI集成、边缘计算、多模态处理和系统自主化。随着技术演进,期待更智能、高效的解决方案。
|
7月前
|
传感器 数据采集 安全
物联网的五层架构分析
物联网五层架构,包括感知层、网络层、数据层、应用层和业务层,扮演着关键的角色。
371 2
|
7月前
|
网络协议 物联网 Java
Go与Java:在物联网领域的适用性分析
本文对比分析了Go和Java在物联网领域的适用性。Go语言因其轻量级、高效和并发特性,适合资源受限的物联网设备,特别是处理并发连接和数据流。Java则凭借跨平台性、丰富的生态系统和企业级应用能力,适用于大型物联网系统和复杂业务场景。两者在物联网领域各有优势,开发者可根据项目需求选择合适的语言。

相关产品

  • 物联网平台