ThingsKit开发指南-微服务架构

介绍

本文主要介绍ThingsKit物联网平台各种服务之间的数据流描述以及程序运行过程中的一些架构组成。

架构图

ThingsKit开发指南-微服务架构

消息传输微服务

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

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

上面列出的每个传输服务器都使用 Kafka 与主要 ThingsKit 节点微服务进行通信。 Apache Kafka是一个分布式、可靠且可扩展的持久消息队列和流平台。

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

Javascript执行器微服务

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

💡 提示

ThingsKit 整体应用程序在 java 嵌入式 JS 引擎中执行用户定义的函数,这不允许隔离资源消耗。

核心微服务

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

  • REST API调用;
  • 实体遥测和属性更改的WebSocket订阅;
  • 通过规则引擎处理消息;
  • 监控设备连接状态(活动/非活动)。

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

第三方服务

Kafka

Apache Kafka是一个开源流处理软件平台。ThingsKit 使用 Kafka 保存来自 HTTP/MQTT/CoAP 传输的传入遥测数据,直到由规则引擎处理。ThingsKit 还使用 Kafka 进行微服务之间的一些 API 调用。

Redis

Redis是一种开源(BSD 许可)内存中数据结构存储,ThingsKit 使用它进行缓存。ThingsKit 缓存资产、实体视图、设备、设备凭证、设备会话和实体关系。

Zookeeper

Zookeeper是一个开源服务器,可实现高度可靠的分布式协调。ThingsKit 使用 Zookeeper 来处理从单个实体(设备、租户)到特定 ThingsKit 服务器的请求处理,并保证在单个时间点只有一台服务器处理来自特定设备的数据。

💡 提示

Kafka 也使用 Zookeeper,因此几乎没有理由并行使用两个不同的协调服务(Consul、etcd)。