【A11】近期实现架构:面向 EPC 工作流企业 QQ 化的第一阶段

一、总体思路

远期目标是构建一个以 IM 为交互外壳、融合工作流、计划调度、文档增量同步的 EPC 协同平台。

近期只做第一阶段:PC 客户端登录 + 自动采集并上传资产指纹。

核心原则:

  • 近期做薄:只实现 HTTP 短连接、请求-响应模式,不引入 Flare-core。
  • 远期可扩展:用户体系、设备标识、认证方式、事件模型、Service 层全部为后续 IM、流程、计划、同步预留接口。
  • 服务边界清晰:近期是单体 Axum 服务,远期可拆分为 HTTP API、IM 网关、工作流引擎、计划调度器、文档同步服务。
  • 数据模型统一:用户、设备、事件三张核心表贯穿远期。

二、近期架构总览

~~~text

┌──────────────────────────────────────────────────────┐

│ PC 客户端 │

│ 登录模块 | 指纹采集模块 | 资产信息读取模块 | 上报模块 │

└───────────────────────┬──────────────────────────────┘

│ HTTPS / JSON

│ Authorization: Bearer

┌───────────────────────▼──────────────────────────────┐

│ Axum HTTP 服务(近期单体) │

│ │

│ ┌────────────┐ ┌────────────┐ ┌────────────────┐ │

│ │ 认证模块 │ │ 设备指纹接收│ │ 资产信息存储 │ │

│ │ /api/login │ │ /api/device│ │ /api/assets │ │

│ └────────────┘ └────────────┘ └────────────────┘ │

│ │

│ ┌────────────┐ ┌────────────┐ ┌────────────────┐ │

│ │ 设备管理 │ │ 审计日志 │ │ 配置管理 │ │

│ └────────────┘ └────────────┘ └────────────────┘ │

│ │

│ ┌────────────────────────────────────────────────┐ │

│ │ Service 业务层 │ │

│ │ 认证服务 | 设备服务 | 资产服务 | 事件服务 │ │

│ └────────────────────────────────────────────────┘ │

└───────────────────────┬──────────────────────────────┘

│

┌───────────────┼───────────────┐

▼ ▼ ▼

┌──────────────┐ ┌──────────────┐ ┌──────────────┐

│ SQLite │ │ 本地文件存储 │ │ tracing 日志 │

│ sqlx 连接池 │ │ 配置文件/备份 │ │ 审计输出 │

└──────────────┘ └──────────────┘ └──────────────┘

~~~

远期扩展时,在现有 Axum HTTP 服务旁并列增加:

~~~text

┌──────────────────────────────────────────────────────┐

│ 远期服务群 │

│ Flare-core IM 网关 | 工作流引擎 | 计划调度器 │

│ 文档增量同步服务 | 消息队列 Kafka | Redis 缓存 │

└───────────────────────┬──────────────────────────────┘

│ 共享用户、设备、事件模型

┌───────────────────────▼──────────────────────────────┐

│ PostgreSQL / MinIO / Redis / Kafka │

└──────────────────────────────────────────────────────┘

~~~

三、近期模块划分

1. 认证模块

  • 接口:POST /api/login
  • 职责:验证用户名/密码,签发 JWT。
  • 技术:
    • axum 提供路由;
    • argon2 做密码哈希;
    • jsonwebtoken 签发和校验 JWT;
    • JWT 中携带 user_id、device_id、exp。
  • 中间件:基于 Axum Extractor 实现 JWT 提取器,保护后续接口。

2. 设备指纹接收模块

  • 接口:POST /api/device/report
  • 职责:接收 PC 客户端上报的设备指纹和资产信息。
  • 技术:
    • serde / serde_json 反序列化;
    • 设备指纹由客户端生成,服务器只做校验和去重;
    • 单次上报数据量小,无需分块上传。
  • 关键字段:
    • 设备指纹:Machine GUID + CPU ID 的 SHA-256;
    • 资产信息:23 列中实际可读取字段,如 CPU 型号、核数、频率、内存、磁盘、主板序列号、OS 版本等。

3. 资产信息存储模块

  • 职责:持久化设备与资产数据,支持查询和版本记录。
  • 技术:
    • 起步用 SQLite + sqlx;
    • 连接池 SqlitePoolOptions;
    • 通过 sqlx 迁移管理表结构。
  • 表设计:
    • users:用户账户;
    • devices:设备注册与最后上线;
    • asset_info:资产详情;
    • audit_log:操作审计;
    • events:预留统一事件表。

4. 设备管理模块

  • 职责:
    • 设备首次上报自动注册;
    • 记录最后上线时间;
    • 支持按用户、部门查询设备列表。
  • 远期衔接:
    • device_id 将成为 IM 消息发送者、流程参与者、计划执行者的标识。

5. 审计与日志模块

  • 技术:tracing + tracing-subscriber。
  • 记录:
    • 登录成功/失败;
    • 设备上报;
    • 资产变更;
    • 配置下发。
  • 审计日志写入 audit_log 表,包含操作者、时间、类型、变更前后哈希。

6. 配置管理模块

  • 技术:config-rs 或 figment。
  • 支持:
    • 环境变量;
    • 配置文件;
    • 默认值分层。
  • 管理服务器自身配置,也为远期客户端配置下发预留结构。

四、近期数据模型

~~~sql

-- 用户表

CREATE TABLE users (

id INTEGER PRIMARY KEY AUTOINCREMENT,

username TEXT NOT NULL UNIQUE,

password_hash TEXT NOT NULL,

display_name TEXT,

department TEXT,

created_at TEXT NOT NULL DEFAULT (datetime('now'))

);

-- 设备表

CREATE TABLE devices (

id INTEGER PRIMARY KEY AUTOINCREMENT,

user_id INTEGER NOT NULL,

device_fingerprint TEXT NOT NULL UNIQUE,

hostname TEXT,

last_seen_at TEXT,

created_at TEXT NOT NULL DEFAULT (datetime('now')),

FOREIGN KEY (user_id) REFERENCES users(id)

);

-- 资产信息表

CREATE TABLE asset_info (

id INTEGER PRIMARY KEY AUTOINCREMENT,

device_id INTEGER NOT NULL UNIQUE,

cpu_model TEXT,

cpu_physical_cores INTEGER,

cpu_logical_cores INTEGER,

cpu_frequency_mhz INTEGER,

memory_total_gb REAL,

disk_total_gb REAL,

disk_serial TEXT,

board_serial TEXT,

os_name TEXT,

os_version TEXT,

hostname TEXT,

reported_at TEXT NOT NULL DEFAULT (datetime('now')),

FOREIGN KEY (device_id) REFERENCES devices(id)

);

-- 审计日志表

CREATE TABLE audit_log (

id INTEGER PRIMARY KEY AUTOINCREMENT,

user_id INTEGER,

device_id INTEGER,

action TEXT NOT NULL,

detail TEXT,

created_at TEXT NOT NULL DEFAULT (datetime('now'))

);

-- 预留统一事件表

CREATE TABLE events (

id INTEGER PRIMARY KEY AUTOINCREMENT,

event_type TEXT NOT NULL,

source_id TEXT,

target_id TEXT,

payload TEXT,

created_at TEXT NOT NULL DEFAULT (datetime('now'))

);

~~~

五、客户端采集与上报

  • 采集库:
    • sysinfo:CPU、内存、磁盘、OS、主机名;
    • device-fingerprint:Windows Machine GUID + CPU 特征,生成 SHA-256 指纹。
  • 上报流程:

~~~text

PC 客户端 服务器

│ │

│── POST /api/login ──────────────────→│

│←── { token, user_id, device_id } ────│

│ │

│ 本地采集指纹 + 资产信息 │

│ │

│── POST /api/device/report ──────────→│

│ Authorization: Bearer │

│←── { status: "ok" } ─────────────────│

~~~

  • 数据量:单次 JSON 通常几 KB,无需消息队列或后台任务。

六、近期接口清单

方法 路径 说明 认证
POST /api/login 用户登录,签发 JWT 否
POST /api/device/report 上报设备指纹与资产 是
GET /api/devices/me 查询当前用户设备列表 是
GET /api/assets/:device_id 查询指定设备资产 是
GET /api/health 健康检查 否

七、与远期目标的衔接

1. 用户与设备标识统一

  • users.id、devices.id、device_fingerprint 从第一阶段就稳定。
  • 远期 Flare-core 的 HttpHookTokenValidator 可直接调用现有认证接口。
  • IM 消息中的 sender_id、device_id 直接复用。

2. 认证体系复用

  • 近期 JWT 由 Axum 签发。
  • 远期 Flare-core IM 网关可校验同一套 JWT。
  • 无需重建用户体系。

3. Service 层解耦

  • 资产上报逻辑写在独立 Service 中。
  • Axum Handler 只做参数提取和调用 Service。
  • 远期 Flare-core 扩展点、工作流回调、计划任务可直接调用同一 Service。

4. 事件模型预留

  • events 表可扩展为:
    • 聊天消息事件;
    • 流程节点事件;
    • 计划触发事件;
    • 文档同步完成事件。
  • 近期只写入资产上报事件,远期平滑扩展。

5. 存储演进

  • 近期:SQLite + 本地文件。
  • 远期:迁移到 PostgreSQL + MinIO + Redis + Kafka。
  • sqlx 支持多数据库,迁移成本可控。

6. 服务拆分路径

~~~text

近期:

Axum HTTP 单体

├── 认证

├── 设备

├── 资产

└── 审计

远期:

Axum HTTP API Flare-core IM 网关

工作流引擎 计划调度器

文档增量同步服务 消息队列 / 缓存

~~~

八、部署形态

  • 近期:
    • 单个 Rust 二进制;
    • SQLite 文件随服务部署;
    • systemd 或 Docker 运行;
    • 可选 Nginx/Caddy 反向代理并启用 HTTPS。
  • 远期:
    • HTTP API、IM 网关、工作流、调度器、同步服务独立部署;
    • 共享 PostgreSQL、Redis、MinIO、Kafka;
    • 按需水平扩展。

九、近期不启用 Flare-core 的理由

  • 当前是 HTTP 短连接,不需要 WebSocket/QUIC 长连接。
  • Flare-core 的价值在 IM 阶段:心跳、重连、消息路由、扩展点。
  • 过早引入会增加调试成本和框架锁定风险。
  • 远期在文字聊天开始时,将 Flare-core 作为独立 IM 网关引入,与现有 Axum 服务并列。

十、演进路线

  1. 第一阶段:PC 登录 + 资产指纹上报 + SQLite 存储。
  2. 第二阶段:设备管理、配置下发、审计完善。
  3. 第三阶段:引入 Flare-core,实现文字聊天与实时通知。
  4. 第四阶段:接入工作流引擎,流程即特殊聊天。
  5. 第五阶段:计划调度器驱动多流程定时发生。
  6. 第六阶段:文档增量同步后台管道,小时级同步。

十一、关键注意点

  • 不要在第一阶段引入 Flare-core。
  • 认证、用户、设备、事件模型要一次设计好。
  • Service 层与 Axum 解耦,为远期扩展点复用。
  • 数据库从 SQLite 起步,但 SQL 尽量保持 PostgreSQL 兼容。
  • 所有上报行为写入审计日志,满足企业资产追溯要求。
相关推荐
海宇数据1 小时前
零信任架构实战:基于海宇身份证OCR构建自动化证照采集网关
人工智能·架构·自动化·ocr
天远数科1 小时前
零信任架构实战:基于天远股权穿透构建自动化供应商准入合规网关
大数据·人工智能·架构·自动化
Cx330❀2 小时前
【Qt 进阶指南】详解 Qt 常用标准对话框与主窗口组件架构
开发语言·qt·ui·性能优化·架构·图形渲染
学步_技术2 小时前
具身智能—DDS通讯架构介绍
人工智能·架构·信息与通信
海宇服务2 小时前
零信任架构实战:基于海宇身份证OCR构建自动化自助终端核验网关
运维·人工智能·架构·自动化
执明wa2 小时前
Android RecyclerView 实战:点击频道栏切换对应内容
android·开发语言·windows·microsoft·android studio
bing.shao3 小时前
让机器从数据中生成本领:诺因Knowin通用具身智能生成式学习架构GLOW深度解析
学习·架构
LRL_3 小时前
【K8s 存储】Longhorn v1.12.1 离线安装全流程:外网制作离线包 + 内网部署(附踩坑实录)
linux·windows·node.js
EatFan3 小时前
2026 后端架构进入 AI 原生阶段:事件驱动 + 虚拟线程 + Agent 内嵌三驾马车怎么落地
人工智能·架构·agent·虚拟线程·事件驱动·ai原生·后端架构