ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

【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签发和校验 JWTJWT 中携带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. 审计与日志模块技术tracingtracing-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’)));五、客户端采集与上报采集库sysinfoCPU、内存、磁盘、OS、主机名device-fingerprintWindows Machine GUID CPU 特征生成 SHA-256 指纹。上报流程textPC 客户端 服务器│ ││── 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 服务并列。十、演进路线第一阶段PC 登录 资产指纹上报 SQLite 存储。第二阶段设备管理、配置下发、审计完善。第三阶段引入 Flare-core实现文字聊天与实时通知。第四阶段接入工作流引擎流程即特殊聊天。第五阶段计划调度器驱动多流程定时发生。第六阶段文档增量同步后台管道小时级同步。十一、关键注意点不要在第一阶段引入 Flare-core。认证、用户、设备、事件模型要一次设计好。Service 层与 Axum 解耦为远期扩展点复用。数据库从 SQLite 起步但 SQL 尽量保持 PostgreSQL 兼容。所有上报行为写入审计日志满足企业资产追溯要求。
返回列表