先说结论:整套系统最后打包出来是一个约 45MB 的 fat jar + 一个 SQLite 单文件库,不依赖 Tomcat/MySQL/Redis,一台普通 Windows 主机双击就能跑。它现在能管设备拓扑、无线终端、射频信道、告警工单、配置回滚,还能被 AI 助手通过 MCP 协议直接调用。
这篇文章想聊聊它是怎么一步步长出来的,以及 Vert.x 在这个场景里到底香不香。
起点:一个极简的拓扑工具
最初的需求很朴素——网络里的 Mikrotik 设备越来越多,登 Winbox 一台台看状态太痛苦,能不能有张图实时显示谁在线谁离线、CPU 多少、流量多大?
于是第一版就是个 Vert.x + AntV G6 的拓扑图工具:设备通过 RouterOS 自带的 scheduler + script 把 heartbeat/report/manage 三类信息被动上报到服务端,服务端解析后刷新拓扑节点。单个服务 jar 只有 7MB 左右,资源占用极低,1 核 2G 的机器能跑好几个 Vert.x 服务——这是它私有化基因的源头。
演进:被真实运维需求推着走
用起来之后,需求像滚雪球:
- “客户报网卡,我怎么知道是哪个终端哪个信道的问题?” → 加了无线终端明细(RSSI/SNR/CCQ)和射频信道热力分析,按 802.11 语义建模,推荐信道可以一键下发;
- “半夜设备掉了没人知道” → 加了阈值告警引擎:指标字典 + 每设备阈值 + firing/resolved 状态机 + 防抖 + 静默期,推企微/钉钉/飞书/邮件;
- “配置被人偷偷改过,故障没法恢复” → 加了配置基线:抓取、快照、行级 Diff、一键回滚,外加每日自动备份(用 SQLite 的
VACUUM INTO滚动备份); - “几十台新设备要逐台配上报,手酸” → 加了接入向导:bootstrap.rsc 三步生成一键植入,目标脚本正文的 SHA-256 写进设备侧 script 注释,周期对账发现 missing/stale 自动幂等覆写收敛——设备配置漂移会被自动纠正或暴露;
- “值班不想装 Winbox” → 加了浏览器内嵌 SSH 终端(SSH over WebSocket,独立端口 + 专属
sys:ssh权限点,凭据由服务端解密不出服务器); - “能不能让 AI 帮我查告警?” → 加了API Key(read/write/mcp 分级)+ MCP 服务,设备/告警/拓扑/无线终端/射频扫描/流量做成 9 个标准工具,JSON-RPC 调用,写操作强制 write 权限,全程可审计。
架构速览(给想参考的同学)
| 层 | 选型 | 备注 |
|---|---|---|
| 内核 | Vert.x 4.4.6(定制封装)+ RxJava2 | 事件循环 + 服务代理,REST 由注解扫包自动注册,180+ 端点 |
| 数据 | vertx-jdbc-client + HikariCP + SQLite | SQL 集中在 yaml 的 sqlConfig,启动期幂等建表/加列迁移链 |
| 前端 | Vue 2 + Element-UI + AntV G6 + echarts | 40+ 路由,构建产物内嵌进 jar 的 resources/dist |
| 安全 | JWT 全局鉴权 + RBAC + BCrypt + AES-256 + TrueLicense + ClassFinal | 设备凭据加密存储,密钥外置不入包 |
| 采集 | 设备被动上报为主 + RouterOS API/SSH 主动补采 | NAT 后设备采不到,所以被动上报是主链路 |
几个踩过的坑,写出来省大家时间:
- 经 RouterOS API 下发命令必须斜杠全路径(
/queue/simple/print),空格形式会被 SDK 把首段当命令路径,报 no such command; - 多行脚本走传统 API 通道必须 LF 归一,带 CRLF 会把后续参数解析成新命令,静默污染脚本正文;
- SQLite 的 PRAGMA 只能靠 JDBC URL query 参数注入(WAL/busy_timeout),connection_init_sql 在 vertx-jdbc-client 4.4.6 会被静默忽略;
- 新增表必须挂到启动建表链,否则运行期才报 no such table;
- 设备 IO 要用独立有界线程池隔离,否则阻塞采集会挤占 worker 池把事件循环拖死。
现状与获取
目前系统版本 3.4:138 个 Java 源文件、47 张表、180+ REST 端点、40+ 前端页面,分社区/标准/专业/企业四档,社区版免费。整个技术栈没有黑盒——拓扑可导入导出 JSON,接口全部开放,想看源码聊实现的,评论区见。
#Vert.x #Java #Mikrotik #RouterOS #SQLite #开源 #后端架构 #Vue