Java & Vue.js 全栈项目,大规模集群设备管理云平台,由以下几部分组成:Java 后端服务器、基于 Vue.js 的 Web 前端「SPA」单页应用程序、JavaFX 集群设备模拟客户端、辅助工具组件「Python 脚本、基于 C# & WPF 的可视化配置工具」,简要介绍如下:
-
Java 后端服务器:使用 Spring Boot 2.0 作为基础框架,使用 Netty 搭建 TCP 服务器与上万台设备组成的集群通信,采用自定义帧格式。
-
基于 Vue.js 的 Web 前端「SPA」单页应用程序:绚丽的现代化 SPA 应用程序,可视化展现服务器内部的各项数据,包括服务器消息队列、通信压力、实时通信信息等。
-
JavaFX 集群设备模拟客户端:使用基于 JavaFX 的图形界面应用程序模拟上万台设备的行为,并可对服务器进行压力测试。
-
辅助工具组件:Python 编写的数据库初始化及测试脚本、C# 编写的基于 WPF 的可视化服务器配置工具。
注意:「基于 Vue.js 的 Web 前端「SPA」单页应用程序」为单独的项目,点击此处跳转
注意:主项目正在奋力优化中,还未成熟,暂时可使用子项目进行演示,运行方法如下:
下载并进入子工程「clusterdeviceplatform-demo」的根目录:
cd clusterdeviceplatform-demo
而后在命令行执行如下命令:
gradle assemble
或者执行:
gradle build
稍后即可生成 jar 文件,找到并执行该 jar 文件即可:
cd build\libs
java -jar -Dfile.encoding=UTF-8 clusterdeviceplatform-demo-1.0.0.jar
而后进入配套的 Web 前端项目,根据该项目的说明,即可成功构建并运行 Web 页面。
当然,以上运行说明并不完善,详细的构建方法及方便的一键构建脚本,可参考如下两篇文章:
特别提示:如果无法查看后面的图片,可能需要科学上网。
Web 登录页面
Web 单设备组详细信息显示
Web 服务器压力图示
Web 模拟客户端主界面重新设计
Web 模拟客户端主界面
Web 模拟客户端的压力测试功能
-
JRE:Java SE 8u121 及以上环境测试通过
-
操作系统:在 Windows 7 及以上,CentOS、Ubuntu 等系统下测试通过
-
数据库:MongoDB 3.4.0 下测试通过
-
IDE:IntelliJ IDEA 2017
-
构建工具:Gradle
注:在运行 Java 服务器前,需预先正确部署并启动 MongoDB 数据库
-
基于 Spring Boot 实现业务处理,基于 Netty 实现与设备的通信,提供 Rest API 完成系统运行监控、设备管理等。
-
服务端与至少 1W 台设备进行通信,基于 Netty 实现 TCP 通信、路由转发、设备抽象。
-
为提升系统的吞吐,借鉴 Kafka 的 IO 模型及 Netty 的 IO 模型,结合内存缓存、线程池、发布订阅模式,实现应用实例整体 TPS 高于 2W / s。
-
服务端与设备集群的业务数量众多,所需通信帧的格式、执行策略、处理方式各异,结合责任链模式、策略模式、模板方法模式、命令模式等实现了可插拔的插件式业务接入方案,降低业务处理与底层架构的耦合,新增业务功能及配套的通信帧时成本低、可维护性高。
-
单台设备性能弱、可靠性差,但设备数量极多,基于时间轮定时器设计了拥塞控制、超时重发、心跳监测方案,在服务端大规模下发数据帧时,保证系统的一致性和稳定性。
本节内容总结为以下文章,点击查看:
本节介绍 Java 服务器中,Netty 模块使用的帧调度算法,由于众多硬件设备的数据帧处理能力较差,可靠性较差,服务器大规模下发数据帧时,需进行有效的拥塞控制、超时重发,可有效提升集群设备的可靠性,降低集群设备的研发难度。
内容较多,这部分内容被放在了独立博文中,请使用如下链接查看:
基于 Netty 的帧调度策略,自行实现流量控制及可靠性通信
「注」本部分为源码「Netty服务器」部分的解释说明,需结合源码进行阅读。
基于 JavaFX 开发 GUI 客户端,模拟集群设备的行为,并可对服务器进行压力测试。
本程序开发时,相关技巧和填坑总结为以下文章:
JavaFX 8 下简化自定义控件的外部调用以及流式布局示例
Maven 集成 JavaFX 8 以及 fx:root 问题探讨
绚丽的现代化 SPA 应用程序,可视化展现服务器内部的各项数据,包括服务器消息队列、通信压力、实时通信信息等。
该应用开发时,设计经验总结可见以下文章:
基于 Vue.js 2.0 酷炫自适应背景视频登录页面的设计
MIT License
Copyright (c) 2022 123lml123
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
兴趣方向: Java, Web, Android, Vue.js, C#, JavaScript, Node.js, Kotlin 等
-
Email: bitkylin@163.com