OpenIoT-Server 是 OpenIoT-Hub 项目的分布式后台管理平台,基于 Go 语言编写、使用 Kitex 框架和 protobuf IDL 的分布式后台管理系统,旨在为物联网提供服务。
- 分布式架构
- 高效的通信协议
- 可扩展性强
- 支持定制化开发
我们使用 Docker 创建生产环境,故使用前请使用指令生成运行环境:
docker-compose up -d
然后我们就可以启动各个微服务模块,所有微服务模块都被存放在 /internal
之中。切入微服务目录,使用指令:
sh build.sh
sh output/bootstrap.sh
最终,你需要运行网关,切入目录 /api-gateway
,使用指令:
sh run.sh
-
API 接口
该系统提供了一系列 API 接口,用于管理分布式系统,包括设备注册、数据采集、命令下发等功能。具体使用方式请参考接口文档。
-
数据库配置
该系统使用 MySQL 数据库存储数据,支持使用默认配置,也可以在运行前进行相应的数据库配置。请修改
config/config.toml
文件中的数据库连接信息,以及deploy/sql/init.sql
文件中的数据表结构。 -
日志输出
该系统使用 glog 进行日志输出。您可以在各个微服务最终包装模块下的
log/
下查看相关日志信息。
├─api-gateway // 服务器网关模块
├─config // 公共配置文件
├─deploy // 部署文件,包括 docker-compose.yaml 等
├─idl // 接口定义文件,使用的语言为 protobuf
├─internal // 内部服务,包含所有微服务模块
│ ├─ user // 用户微服务模块
│ └─ ... // 其他微服务模块
├─kitex_gen // RPC 存根,由 Kitex 生成
└─pkg // 第三方函数
├─consts // 项目公共常量
├─errno // 项目错误处理封装定义
├─logging // 日志工具函数
└─util // 其他工具函数,例如雪花算法生成唯一 ID
这里是网关的项目结构,其负责通过远程过程调用(Remote Process Call, RPC)唤起对应的微服务。同时,网关也负责与鉴权服务进行交互,验证请求可信度。
api-gateway/
├─ biz // 事务层,业务代码
│ ├─ handler // 请求处理,控制器层
│ ├─ model // 调用的模型 DTO
│ ├─ router // 路由层,路由组中间件管理
│ └─ rpc // RPC 调用工具函数
├─ script // 运行脚本
├─ main.go // 程序入口
└─ Makefile // 常用指令
对于每个不同的微服务,我们都有类似的文件结构,这里我们使用用户模块举例,如下所示,
user/
├── configs // 微服务启动配置,包括数据库连接
├── service // 微服务业务代码,服务层
├── model // 微服务相关结构体,模型层
├── script // 编译指令,由 Kitex 生成
├── pack // 请求封装,序列化层,将 BO -> DTO
├── utils // 通用函数,在项目根路径中
├── main.go // 程序入口
├── handler.go // 请求处理,控制器层
├── kitex.yaml // Kitex 配置项
└── Makefile // 常用指令
本项目主要设计了四个模块,包括 User,Auth,Device,Gateway,分别负责管理系统的用户,鉴权,设备监控,网关。你可以在这里看到他们的进一步具体信息。
欢迎您为 openiot-server 项目作出贡献!您可以通过以下方式参与项目:
-
提出 Issue。
-
编写和改进代码,提交 Pull Request。
这个项目使用 Apache 2.0 开源许可证,详情请参阅 LICENSE 文件。