1. 首页
  2. 深入了解
  3. 技术架构

技术架构

进程模型

main(qidun-main)guard(qidun-guard)
端口529:HTTPS(API + Web 面板单端口,mTLS)530:心跳 /ping + 蜜罐(仅本机回环合法)
职责全部监控模块 + Web 服务 + 配置 + 审计仅看门狗上报 + 守卫(心跳 / 蜜罐 / 拉起 main)
运行载体同一可执行文件,run --role main|guard 区分;Windows 注册为两个 SCM 服务,Linux 注册为两个 systemd unit
互保每 2 秒互探;连续 3 次失联 → 自动拉起对方(先服务管理器,后派生进程),30 秒重启间隔保护

模块自愈机制

  • 模块 panic 不拖垮进程:捕获、记日志、按指数退避(5s → 10s → 20s → 40s…)自动重启。
  • 连续 panic 5 次才永久停用并记日志;运行状态登记到模块健康注册表。
  • 三层保活叠加:模块级(上述兜底)→ 进程级(guard 互拉)→ 系统级(SCM / systemd 重启策略)。

数据目录

Windows: C:\ProgramData\Qidun Linux: /var/lib/qidun ├── qidun.db # SQLite 主库(WAL 模式,busy_timeout=5s;运行时伴随 -wal/-shm) ├── certs/ # mTLS 证书体系(ca / server / client-local) ├── logs/ │ ├── qidun-main.log # main 进程日志 │ └── qidun-guard.log # guard 进程日志 └── mysql-backups/ # MySQL 备份产物:<实例名>/<库名>-时间戳.sql[.gz]
  • 数据库连接 MaxOpenConns=1 + WAL:双进程并发访问安全,迁移带锁重试。
  • 配置存 settings 表(键前缀 cfg.),WebUI 保存后即时生效,部分项需重启(见 配置项)。
  • 全部业务表默认保留 180 天,后台每日自动清理。
  • 数据目录解析优先级:--data-dir 参数 > QIDUN_DATA_DIR 环境变量 > 自动探测运行中服务 > 平台默认目录。

优雅重启与升级

  • 面板「保存端口 / 手动重启」触发优雅重启:先拉起新进程成功,再让旧进程走正常关停(HTTP 优雅关闭 3 秒 → 模块退出 → 关库并 checkpoint WAL);拉起失败则保持旧进程继续服务,杜绝空窗。
  • 服务模式下重启走 SCM / systemd(不产生孤儿进程);前台模式自动派生分离的自身进程。
  • 升级流程(替换二进制 → 幂等重装服务 → 重置自检基线)详见 升级与维护。

技术栈

层选型
语言 / 运行时Go 1.23+(跨平台交叉编译,Linux 构建 CGO_ENABLED=0)
存储SQLite(modernc 纯 Go 驱动,无 cgo 依赖)
系统指标gopsutil v4(CPU / 内存 / 磁盘 / 网络 / 进程 / IO)
服务管理kardianos/service(Windows SCM / Linux systemd)
认证与加密bcrypt(口令)、EC P-256 自签 CA、AES-256-GCM(MySQL 密码落库)、SHA-256 + HMAC(自检基线)
前端原生 JS + ECharts(go:embed 内嵌,无外部 CDN 依赖)
测试go test ./...(约 50 用例,含 -race)

性能特征

  • 常驻内存极小(面板实时显示自身内存占用并设阈值告警,默认 1GB)。
  • 大目录指纹用「相对路径 + 大小 + mtime」聚合,不逐文件读内容;单文件快速路径一致即跳过重哈希。
  • 历史指标环形缓冲 720 点(约 12 小时 @60 秒采集),趋势图直接读内存。
  • 告警上报批量(每 3 秒最多 10 条)、队列仅保留最新 500 条 pending/fail,防 DB 膨胀。
相关阅读:安全设计 · 告警参考 · 配置项
Qidun 启盾 v1.2.17 · 离线静态文档 · 界面基于 KuoqiUI · 返回首页