物联网平台之单体架构

介绍
本文主要介绍平台的单体架构,包括各个组件之间的数据流描述以及所做的一些架构选择。
在单体架构模式下,所有 ThingsKit 组件都在单个 Java 虚拟机 (JVM) 中启动,并共享相同的操作系统资源。由于 ThingsKit 是用 Java 编写的,因此整体架构的明显优势是最小化运行 ThingsKit 所需的内存。您可以在受限环境中使用 512 MB RAM 启动并运行 ThingsKit 进程。明显的缺点是,如果一个组件的消息过载(例如 MQTT 传输),它也可能会影响其他组件。
架构图

c19ffed67c3bd50925cf7c1c51aacbc0.jpeg

传输组件

ThingsKit提供基于 MQTT、HTTP 和 CoAP 的 API,可用于您的设备应用程序/固件。每个协议 API 均由单独的服务器组件提供,并且是 ThingsKit “传输层”的一部分。下面列出了组件的完整列表和相应的文档页面:

  • HTTP 传输组件,平台提供了设备 API 接入;
  • MQTT 传输组件,平台提供了直连设备 API接入,请参考;还有网关设备 API接入;
  • CoAP 传输组件,平台提供了设备 API 接入,;
  • TCP/UDP 传输组件,平台提供TCP设备 API接入;还有UDP设备 API接入;

每个传输组件将数据推送到规则引擎,并且还可以使用核心服务向数据库发出请求以验证设备凭证等。

由于 ThingsKit 在传输和核心服务之间使用非常简单的通信协议,因此很容易实现对自定义传输协议的支持,例如:通过JT808、HJ212、IEC104等,都可以在传输层写脚本来完善。

数据库组件

数据库组件,主要由PostgreSQL 数据库,再加上TimescaleDB时序数据库插件或者Cassandra分布式数据库插件构造而成。

核心服务组件

核心服务组件主要功能:

  • REST API 调用
  • 设备遥测数据的订阅
  • 监控设备的连接状态

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

外部系统组件

数据库组件,主要由PostgreSQL数据库,再加上TimescaleDB时序数据库插件或者Cassandra分布式数据库插件构造而成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dnf手游攻略,新手入坑必备!

一、角色创建策略 在DNF手游中,角色创建是玩家初入游戏的首要步骤。为最大化游戏体验和收益,新手玩家通常建议创建三个角色:一个主账号和两个副账号。 主账号选择 主账号的选择应基于玩家个人的喜好和对职业的熟悉程度。无论选择哪个职业&a…

番外篇 | 手把手教你利用YOLOv8进行热力图可视化 | 针对视频

前言:Hello大家好,我是小哥谈。YOLOv8的热力图可视化可以帮助我们更加直观地了解模型在图像中的检测情况,同时也可以帮助我们进行模型的调试和优化。热力图是一种颜色渐变的图像,不同颜色的区域表示不同程度的关注度或者置信度。在YOLOv8中,可以通过设置阈值来控制热力图的…

电机控制杂谈——“双采样双更新模式”对模型预测控制/PI控制的提升有多大?

1.采样频率与PWM开关频率的关系 一般有以下两种采样模式。 如下图(a)所示,这种方式称之为单采单更模式,即在一个PWM周期内,采样一次,更新一次PWM占空比,在这种情况下,采样频率&…

小红书自动私信获客,打造个人品牌

在当今这个内容为王、社交至上的时代,小红书作为新兴的社交电商平台,凭借其独特的社区氛围和强大的种草能力,成为了众多KOL、商家以及个人品牌打造的首选平台。想要在小红书上脱颖而出,精准引流获客,利用自动私信功能不…

【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)

文章目录 1. 环境准备2. 增加数据(Create)3. 查询数据(Retrieve)4. 更新数据(Update)5. 删除数据(Delete)6. 总结 🎉欢迎来到Java学习路线专栏~探索Java中的静态变量与实…

强化训练:day8(求最小公倍数、数组中的最⻓连续⼦序列、字⺟收集)

文章目录 前言1. 最小公倍数1.1 题目描述1.2 解题思路1.3 代码实现 2. 数组中的最⻓连续⼦序列2.1 题目描述2.2 解题思路2.3 代码实现 3. 字母收集3.1 题目描述3.2 解题思路3.3 代码实现 总结 前言 1. 最小公倍数   2. 数组中的最⻓连续⼦序列   3. 字⺟收集 1. 最小公倍数…

JavaEE之线程(5)——Java内存模型、内存可见性、volatile关键字

前言 volatile可以理解成轻量级的 synchronized, 它在多CPU开发中保证了共享变量的“可见性”,可见性我们可以理解成是:当一个线程修改一个共享变量时,另一个线程可以读到这个修改的值。由于它不会引起线程的上下文切换和调度&am…

HTML的使用(中)

文章目录 前言一、HTML表单是什么&#xff1f;二、HTML表单的使用 &#xff08;1&#xff09;<form>...</form>表单标记&#xff08;2&#xff09;<input>表单输入标记总结 前言 在许多网页平台上浏览&#xff0c;大多逃不了登录账号。此时在网页中填写的用户…

Centos 7.9 安装 tigervnc-server

环境&#xff1a;当前使用的 Centos 7.9 的光盘作为的本地源&#xff0c;或使用离线rpm包。 1 检查是否已安装 tigervnc [rootlocalhost /]# rpm -q tigervnc tigervnc-server 未安装软件包 tigervnc tigervnc-server-1.8.0-21.el7.x86_64 如果安装过卸掉 卸载: rpm -e [ro…

MYSQL DBA运维实战 SQL2

1.DML:通过SQL语句中的DML语言来实现数据的操作。 insert实现数据的插入。 update实现数据的更新。delete实现数据的删除。 插入&#xff0c;完全插入insert into 表名 values(值) 非完全插入:insert into 表名(列名&#xff0c;列名) values(值) 更新&#xff0…

RustGUI学习(iced)之小部件(十二):如何使用rule分割线部件来分割UI?

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述 这是本专栏的第十二篇,主要讲述rule分割线部件的使用,会结合…

【计算机网络】http协议的原理与应用,以及https是如何保证安全传输的

HTTP 超文本传输协议&#xff08;英文&#xff1a;HyperText Transfer Protocol&#xff0c;缩写&#xff1a;HTTP&#xff09;是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 HTTP的发展是由蒂姆伯纳斯-李于1989年在欧洲核子研究组织…

React useEffect Hook: 理解和解决组件双重渲染问题

在React中&#xff0c;useEffect可能会在组件的每次渲染后运行&#xff0c;这取决于它的依赖项。如果你发现useEffect运行了两次&#xff0c;并且你正在使用React 18或更高版本的严格模式&#xff08;Strict Mode&#xff09;&#xff0c;这可能是因为在开发模式下&#xff0c;…

轻松掌握抖音自动点赞技巧,快速吸粉

在当今这个信息爆炸的时代&#xff0c;抖音作为短视频领域的领头羊&#xff0c;不仅汇聚了庞大的用户群体&#xff0c;也成为了品牌和个人展示自我、吸引粉丝的重要平台。如何在众多内容创作者中脱颖而出&#xff0c;实现高效引流获客&#xff0c;精准推广自己的内容&#xff0…

LVS负载均衡超详细入门介绍

LVS 一、LVS入门介绍 1.1.LVS负载均衡简介 1.2.负载均衡的工作模式 1.2.1.地址转换NAT&#xff08;Network Address Translation&#xff09; 1.2.2.IP隧道TUN&#xff08;IP Tunneling&#xff09; 1.2.3.直接路由DR&#xff08;Direct Routing&#xff09; 1.3.…

ThingsBoard版本控制配合Gitee实现版本控制

1、概述 2、架构 3、导出设置 4、仓库 5、同步策略 6、扩展 7、案例 7.1、首先需要在Giitee上创建对应同步到仓库地址 ​7.2、giit仓库只能在租户层面进行配置 7.3、 配置完成后&#xff1a;检查访问权限。显示已成功验证仓库访问&#xff01;表示配置成功 7.4、添加设…

”数组指针变量与函数指针变量“宝典

大家好呀&#xff0c;我又来啦&#xff01;最近我很高效对不对&#xff0c;嘿嘿&#xff0c;被我自己厉害到了。 这一节的内容还是关于指针的&#xff0c;比上一期稍微有点难&#xff0c;加油&#xff01;&#xff01;&#xff01; 点赞收藏加关注&#xff0c;追番永远不迷路…

AI大事记(持续更新)

文章目录 前言 一、人工智能AI 1.基本概念 2.相关领域 2.1基础设施 2.2大模型 2.3大模型应用 二、大事记 2024年 2024-05-14 GPT-4o发布 2024-02-15 Sora发布 2023年 2023-03-14 GPT-4.0发布 2022年 2022-11-30 ChatGPT发布 总结 前言 2022年11月30日openai的…

从零开始学习Linux(6)----进程控制

1.环境变量 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数&#xff0c;我们在编写C/C代码时&#xff0c;链接时我们不知道我们链接的动态静态库在哪里&#xff0c;但可以连接成功&#xff0c;原因是环境变量帮助编译器进行查找&#xff0c;环境变量通常具有…

【爬虫之scrapy框架——尚硅谷(学习笔记two)--爬取电影天堂(基本步骤)】

爬虫之scrapy框架--爬取电影天堂——解释多页爬取函数编写逻辑 &#xff08;1&#xff09;爬虫文件创建&#xff08;2&#xff09;检查网址是否正确&#xff08;3&#xff09;检查反爬&#xff08;3.1&#xff09; 简写输出语句&#xff0c;检查是否反爬&#xff08;3.2&#x…