Skip to content

基于netty,Reactor3的大型响应式分布式智能家电管理系统,主要技术包括: Reactor3,netty,SpringCloud,nacos,Elasticsearch,Kafka,docker,Redisson,mqtt,mysql,mongodb,EKL

Notifications You must be signed in to change notification settings

liangqiding/mind-links-reactor

Repository files navigation

mind-mqtt-reactor

基于Reactor3 netty的大型响应式分布式物联网智能家电系统,十万长连接

本项目尚未完成,且已于2020.10.10停止维护更新

前言

本项目尚未完成,且已于2020.10.10停止维护更新

mind-links 本项目基于netty的大型响应式分布式物联网智能家电系统,主要技术包括:mqtt,Reactor3,netty,SpringCloud,nacos,Elasticsearch,Kafka,docker,Redisson,mysql,mongodb,EKL

阅读本项目代码需要一定的reactor及lambda基础

项目包含前端web页面,后端web服务,tcp服务器 整合mqtt协议支持,百万长连接设计方案

已达成12万长连接后面有测试图

目前项目还在持续更新中

项目文档

  • 文档地址:
服务 文档
tcp项目文档 tcp项目文档
m-security security授权服务文档
m-logger 全局日记收集文档
m-minio 文件服务器

项目介绍

mind-links项目是一套分布式的智能家电系统,包括前台监控系统及后台管理系统,采用多种流行技术实现,核心技术如:netty,springCloud,nacos,采用Docker容器化部署。

架构图

系统架构图

系统架构图

业务架构图

业务架构图

效果预览

工具 mqttx mqttx测试效果 工具 mqtt.fx mqtt.fx测试效果

压测效果

测试工具 jmeter 测试工具

压测效果 单机下压测效果 稳定6万连接(自身配置限制 i5 6300hq+16G) 测试工具

压测效果 集群模式下(两节点)压测效果 达成12万连接 测试工具

说明:由于测试机的端口限制,单机最多也就65553个端口了,所以理论上jmeter最大也就可以模拟6万个连接(系统本身也会有很多服务占用端口)

使用虚拟机理论上是可以让测试机端口无限的,前提性能跟得上。但实际中我们发现,单台测试机跑jmeter到3万个连接,其实已经是极限了(内存和cpu性能问题)

这里借来了多台测试机运行jmeter,两个性能较好的用来集群部署ming-links-server服务

到了9万连接的时候,会明显感觉到连接变慢(这里感觉应该快到瓶颈了),而且偶尔会有连不上的问题,不过好在之前的连接都非常稳定,新的连接虽然连接变慢,但还是可以慢慢的增长, 为了让其慢慢涨,编写了一个脚本程序,让测试机 每隔一段时间连200个,最后连接稳定在12万多。

后续会测试消息的并发量,及kafka的吞吐速度。

后台模块

服务 服务说明 进度 备注
m-common 公共组件 公用组件包
m-auth 授权认证 登录认证,授权,token管理
m-server TCP核心服务 🏗 TCP核心服务
m-center 总线控制测试中心 🏗 各种测试集合,程序总监控中心
m-search ES 搜索框架 🏗 Elasticsearch 搜索引擎
m-logger 分布式日记收集 🏗 设计多模块共用自定义注解,并引入kafka日记统一收集,其它模块导入添加注解即可实现日记生成和收集,实现分布式日记收集分析
m-gateway 网关统计 🏗 网关实现多模块统计授权认证,分流及服务熔断

前端模块

服务 使用技术 进度 备注
设计中

平台功能

服务 使用技术 进度 备注
用户管理 设计中 用户是系统操作者,该功能主要完成系统用户配置。
设备管理 设计中 用户管理设备,对设备数据范围权限划分。
权限管理 设计中 配置权限管理系统,操作权限,给用户分配权限。
机构管理 设计中 配置系统组织机构,树结构展现,可随意调整上下级。
网关动态路由 设计中 网关动态路由管理

开发运维

服务 使用技术 进度 备注
代码生成 后端代码的生成
测试管理 🏗
文档管理 Swagger3
服务监控 Spring Boot Admin
链路追踪 SkyWalking
操作审计 🏗 系统关键操作日志记录和查询
日志管理 ES + Kibana、Zipkin
监控告警 Grafana

项目演示

TCP mqtt服务器压测

后台管理系统

前端项目更新中地址:https://github.com/liangqiding/xxx

项目演示地址(更新中): http://#

后台监控系统功能演示(更新中)

前台监控仪表盘系统

前端项目web地址:敬请期待......

项目演示地址:http://#

前台仪表盘系统功能演示

技术选型

后端技术

技术 版本 说明 官网
SpringCloud Hoxton.SR5 微服务容器 https://spring.io/projects/spring-cloud
SpringBoot 2.3.3.RELEASE SpringBoot容器 https://spring.io/projects/spring-boot
webFlux 2.3.3.RELEASE 响应式编程 https://github.com/reactor/reactor-core
reactor-core 3.3.9.RELEASE reactor核心 https://github.com/reactor/reactor-core
SpringSecurity 认证和授权框架 https://spring.io/projects/spring-security
mybatis-plus 3.3.1 ORM框架
mybatis-plus-generator 3.3.1 数据层代码生成 http://www.mybatis.org/generator/index.html
PageHelper 1.2.13 MyBatis物理分页插件 http://git.oschina.net/free/Mybatis_PageHelper
Swagger-UI 3.0.0 文档生产工具 https://github.com/swagger-api/swagger-ui
Hibernator-Validator 6.1.5.Final 验证框架 http://hibernate.org/validator
Elasticsearch 7.10.1 搜索引擎 https://github.com/elastic/elasticsearch
Kafka 2.5.x 消息队列
Redisson 3.14.0 分布式缓存,分布式锁 https://redis.io/
MongoDB 4.4 NoSql数据库 https://www.mongodb.com
Docker 应用容器引擎 https://www.docker.com
Druid 1.2.3 数据库连接池 https://github.com/alibaba/druid
MinIO 8.x 对象存储 https://github.com/minio/minio
JWT JWT登录支持 https://github.com/jwtk/jjwt
LogStash 7.10.1 日志收集工具 https://github.com/logstash/logstash-logback-encoder
Lombok 简化对象封装工具 https://github.com/rzwitserloot/lombok
Jenkins 自动化部署工具 https://github.com/jenkinsci/jenkins

前端技术

技术 说明 官网
Node 核心引擎 https://nodejs.org/zh-cn/
ts.js 核心语言 https://www.tslang.cn/
Vue 前端框架 https://vuejs.org/
Vue-router 路由框架 https://router.vuejs.org/
Vuex 全局状态管理框架 https://vuex.vuejs.org/
Element 前端UI框架 https://element.eleme.io
Axios 前端HTTP框架 https://github.com/axios/axios
v-charts 基于Echarts的图表框架 https://v-charts.js.org/
Js-cookie cookie管理工具 https://github.com/js-cookie/js-cookie
nprogress 进度条控件 https://github.com/rstacruz/nprogress

开发工具

工具 说明 官网
IDEA 2020 开发IDE https://www.jetbrains.com/idea/download
RedisDesktop redis客户端连接工具 https://github.com/qishibo/AnotherRedisDesktopManager
Robo 3T mongo客户端连接工具 https://robomongo.org/download
X-shell Linux远程连接工具 http://www.netsarang.com/download/software.html
Navicat Premium15 数据库连接工具 http://www.navicat.com.cn/navicat-15-highlights/
Navicat Premium15 数据库设计工具
draw.io 流程图设计工具 https://drawio-app.com/
ApiFox 已弃用postman,变更为ApiFox,API接口调试工具 https://www.apifox.cn/
VS code 做为Markdown编辑器 https://code.visualstudio.com/

开发环境

工具 版本号 下载
JDK 1.8 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Mysql 8.0 https://www.mysql.com/
Redis https://redis.io/download
MongoDB 4.3 https://www.mongodb.com/download-center
Kafka http://kafka.apache.org/
Nginx 1.19.x http://nginx.org/en/download.html
Elasticsearch 7.10.1 https://www.elastic.co/downloads/elasticsearch
Logstash 7.10.1 https://www.elastic.co/cn/downloads/logstash
Kibana 7.10.1 https://www.elastic.co/cn/downloads/kibana

搭建步骤

编译 & 启动

开发阶段暂不提供docker-compos 可自行maven打包启动 或 编译工具启动

~~ * 1.启动基础服务:进入docker-compose目录,执行docker-compose -f docker-compose.yml up 或单个启动docker-compose up 服务名, 服务名如下~~

在启动应用之前,需要先启动数据库、缓存、MQ等中间件,可根据自己需要启动的应用选择启动某些基础组件,一般来说启动mysql、redis、kafka、mangodb即可,其它组件若有需要,根据如下命令启动即可。

该步骤使用了docker快速搭建相应的基础环境,需要你对docker、docker-compose有一定了解和使用经验。也可以不使用docker,自行搭建以下服务即可。

服务 服务名 端口 备注
数据库 mysql 3306 目前各应用共用1个实例,各应用可建不同的database
KV缓存 redis 6379 目前共用,原则上各应用单独实例
消息中间件 rabbitmq 5672 共用
注册与配置中心 nacos 8848 启动和使用文档
日志收集中间件 zipkin-server 9411 共用
搜索引擎中间件 elasticsearch 9200 共用
日志分析工具 kibana 5601 共用
数据可视化工具 grafana 3000 共用
  • 2.创建数据库及表

只有部分应用有数据库脚本,若启动的应用有数据库的依赖,请初使化表结构和数据后再启动应用。

docker方式脚本初使化:进入docker-compose目录,执行命令 docker-compose up mysql-init

子项目脚本

路径一般为:子项目/db

如:auth/db 下的脚本,请先执行ddl建立表结构后再执行dml数据初使化

应用脚本

路径一般为:子项目/应用名/src/main/db

如:demos/producer/src/main/db 下的脚本

  • 3.启动应用

根据自己需要,启动相应服务进行测试,cd 进入相关应用目录,执行命令: mvn spring-boot:run

以下应用都依赖于rabbitmq、nacos,启动服务前请先启动mq和注册中心

开发进度

基础架构搭建

服务 使用技术 进度 备注
注册中心 Nacos
配置中心 Nacos
消息总线 SpringCloud kafka 🏗
灰度分流 OpenResty + lua 🏗
动态网关 SpringCloud Gateway 🏗 多种维度的流量控制(服务、IP、用户等),后端可配置化🏗
授权认证 Spring Security OAuth2 🏗 Jwt模式
服务容错 SpringCloud Sentinel 🏗
服务调用 SpringCloud OpenFeign
对象存储 FastDFS/Minio 🏗
任务调度 Elastic-Job 🏗
分库分表 Mycat 🏗
数据权限 🏗 使用mybatis对原查询做增强,业务代码不用控制,即可实现。

更新日志

2020-10-10:

About

基于netty,Reactor3的大型响应式分布式智能家电管理系统,主要技术包括: Reactor3,netty,SpringCloud,nacos,Elasticsearch,Kafka,docker,Redisson,mqtt,mysql,mongodb,EKL

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published