2025年11月24日
本周工作计划与执行完成进度
中心服务平台 - 新增功能
- 目标: 完善运维相关功能
- 进度: 已完成 65% | 计划完成 80%。受多个非计划内事务的影响。(🟢 未开始 | 🟡 进行中 | ⚠️ 部分完成 | ✅ 已完成 | 📌 已验证)
- ✅ 中心服务器数据库备份功能,实现通过 Web 界面手动触发数据库备份,并支持每日凌晨 1 点自动执行定时备份任务。为避免磁盘空间过度占用,当备份文件数量超过 30 个时,系统将自动删除最旧的备份文件,确保备份数据的时效性与存储合理性。
- ✅ 📌 后端开发:
- ✅ es-center-server-agent(Rust + axum 等生态组件,编译为的原生服务程序)
- ✅ 完成跨 Docker 容器执行数据备份命令的技术调研,确定安全、可靠的执行方案。
- ✅ 搭建 es-center-server-agent 项目框架,集成 Rust 生态主流库:axum(Web 框架)、tokio(异步运行时)、serde / serde_json(序列化)、color-eyre(错误处理)、ring(加密)、ulid(唯一标识生成)、flurry(并发哈希表)及 redis(缓存支持)。
- ✅ 实现配置管理模块,支持加载 .env(生产环境)与 .env.development(开发环境)配置文件,开发环境配置可覆盖生产环境配置,便于多环境适配。
- ✅ 基于 OpenAPI 3.0 规范(通过 swagger-ui 与自动生成的 openapi.json),完成端到端接口链路开发:涵盖 API 层、服务层、仓库层,最终执行底层 SQL 查询并统一封装为标准化 JSON 响应格式。
- ✅ 实现数据库自动备份机制:每小时轮询检查当日备份是否已完成;若未完成,则触发备份流程。备份成功后,自动清理超出 30 个的最旧文件,确保备份的时效性与存储合理性。
- ✅ 移除 /agent-api/v1/user 测试接口,避免暴露非生产用途接口。
- ✅ 新增三项核心接口:手动触发数据库备份、获取备份文件列表及下载指定备份文件。其中,手动触发数据库备份接口已实现备份文件数量管控机制,限制手动类别最多保留 50 个备份文件,超出上限时自动清理最旧的备份文件,确保存储资源合理使用。
- ✅ 为所有对外接口实现安全防护机制,防止未授权访问与恶意调用。
- ✅ es-center-server-agent(Rust + axum 等生态组件,编译为的原生服务程序)
- ✅ 📌 前端开发:
- ✅ es-secure-encoder(Rust + wasm-bindgen 等生态组件,编译为 WASM 的前端模块)
- ✅ 开发 Web 端 Agent API Token 生成所用的 WASM 模块,通过将加密逻辑编译至二进制字节码,提升安全性,有效抵御反编译风险,保护核心算法。
- ✅ es-center-server-web-app(React + shadcn-ui 等生态组件,纯前端程序)
- ✅ 集成新版本的 es-secure-encoder wasm 模块,实现 Agent API Token 生成
- ✅ 手动触发数据库备份功能界面
- ✅ 数据库备份文件列表功能界面,支持下载备份文件,其中备份文件下载权限限定为超级管理员和租户管理员(受后端权限策略的控制)
- ✅ es-secure-encoder(Rust + wasm-bindgen 等生态组件,编译为 WASM 的前端模块)
- ✅ 📌 后端开发:
- ✅ es-center-server-main-service (Java + spring boot 等生态组件,编译为的微服务程序)
- ✅ 新功能的权限策略维护,明确数据库备份及备份文件下载操作仅对超级管理员开放(受后端权限策略的控制)。
- ✅ es-center-server-main-service (Java + spring boot 等生态组件,编译为的微服务程序)
- ✅ 📌 安装与更新程序集成, center-server-install-app(Python + click 等生态组件,编译为的原生工具程序)
- ✅ 将 es-center-server-agent 集成至现有安装与更新程序,实现一键部署并注册为 Linux 系统服务,提升运维自动化水平。
- ✅ 部署至
zxs-ca服务器,对更新程序进行测试,确保功能正常运行。
- ✅ 📌 后端开发:
- 🟡 提供设备通用上传接口,并制定上传协议,确保日志完整上传至服务器,便于客户分析问题、排查原因。
- ✅ 后端开发:
- ✅ es-center-server-main-service (Java + spring boot 等生态组件,编译为的微服务程序)
- ✅ 制定设备通用上传接口通信协议(通过传入 type 字段进行归类区分),并输出标准化接口文档,供设备端开发人员对接使用。涉及接口实现安全防护机制,防止未授权访问与恶意调用。
- ✅ 完成设备通用上传接口的开发与实现。
- ✅ 新功能的权限策略维护,日志下载权限限定为超级管理员和租户管理员。
- ✅ OpenAPI 开发:获取已上传的第一层文件夹列表,提取已上传文件夹名称为设备编号列表
- ✅ OpenAPI 开发:根据指定的设备编号(对应第一级目录)和类别(对应第二级目录),第三级目录中的文件列表包含类别、文件大小及文件名等字段。
- ✅ es-center-server-device-service (Java + spring boot 等生态组件,编译为的微服务程序)
- ✅ 通知设备端上传文件的 MQTT 消息:设备端收到消息后,根据消息内容执行文件上传操作。例如,通过
type字段指定需上传的文件类型,如日志文件、数据库文件、配置文件等。
- ✅ 通知设备端上传文件的 MQTT 消息:设备端收到消息后,根据消息内容执行文件上传操作。例如,通过
- ✅ es-center-server-main-service (Java + spring boot 等生态组件,编译为的微服务程序)
- 🟡 前端开发:
- 🟡 es-center-server-web-app(React + shadcn-ui 等生态组件,纯前端程序)
- 🟡 开发在设备通用已上传文件列表界面:支持按设备编号筛选功能。支持具备权限的用户下载文件,其中文件下载权限限定为超级管理员和租户管理员(受后端权限策略的控制)。
- ✅ 其它
- ✅ 部署至
zxs-cs测试环境,用于支撑与设备端的联调;结合日志记录与反馈信息,持续优化接口性能与功能完整性。
- ✅ 部署至
- 🟡 es-center-server-web-app(React + shadcn-ui 等生态组件,纯前端程序)
- ✅ 后端开发:
- ✅ 中心服务器数据库备份功能,实现通过 Web 界面手动触发数据库备份,并支持每日凌晨 1 点自动执行定时备份任务。为避免磁盘空间过度占用,当备份文件数量超过 30 个时,系统将自动删除最旧的备份文件,确保备份数据的时效性与存储合理性。
其它
- 目标: 记录日常耗时的杂项工作、协作事项,以及必要的沟通、讨论等隐性事务。
- 进度: 属非计划内事务(🟢 未开始 | 🟡 进行中 | ⚠️ 部分完成 | ✅ 已完成 | 📌 已验证)
- 24 日
- ✅ 📌 数据库自动备份情况跟踪,数据库自动备份情况跟踪如下:每日零点后均能成功完成备份(20251121-20251124)。在架构设计阶段,已充分考虑数据存储优化:将设备上报的电量、定位等海量数据,以及用户的登录、登出等各类操作记录,均存入更廉价的搜索引擎。因此,数据库中的核心业务数据不会过度膨胀,每日执行一次自动备份具备可行性(备份文件数量超过 30 个时,将自动删除最早的备份文件)。
- 25 日
- ✅ app 岗简历筛选分析
- 26 日
- ✅ app 开发群技术交流并提供源代码示例
- 27 日
- ✅ 开会议讨论跨境通信提速需求
- ✅ 调研跨境数据同步的最佳实践方案(随着技术演进,当前可能存在较以往更优的解决方案)
- 国内端
- 使用 Tailscale 建立 P2P 隧道,分配虚拟 IP 实现跨境网络互通
- 业务程序写入配置至 Nacos(主):包括盐值、Token、Kafka 及 PostgreSQL 连接信息
- PostgreSQL 子库通过 Flink CDC SQL 捕获变更数据(复用现有 CDC 经验)
- 变更数据写入 Kafka(单机或集群部署,适配跨境网络环境)
- 国外端
- 通过 Tailscale 接入同一虚拟网络
- Nacos(从)自动同步国内端配置信息(复用 Nacos 主从同步机制)
- Kafka 作为消息中转,由国外端 Flink SQL 消费变更流(复用 Flink-Kafka 集成经验)
- Flink 将数据通过 JDBC 写入 PostgreSQL 主库(用 Flink JDBC 写入经验)
- 国内端
- 28 日
- ✅ 关于设备与 App 强制绑定方案的讨论:当用户丢失 App 账号时,原已绑定的设备无法重新绑定至新的 App 账号。
- ✅ 部署国外新的服务器环境: 107.174.0.54, 107.174.0.6
- ✅ 调研跨境数据同步的最佳实践方案:完善细节
- 国内端
- 使用 Tailscale 建立 P2P 隧道,分配虚拟 IP 实现跨境网络互通;数据面启用压缩与 BBR,必要时叠加站点型 WireGuard(固定节点、
MTU 1280–1320)提升吞吐与稳定性 - 业务程序写入配置至 Nacos(r-nacos):包括盐值、Token、Redpanda
bootstrap.servers、PostgreSQL(pgpool地址)连接信息;目标库为POSTGRESQL_DATABASE=es-center-server,敏感项用环境变量或加密文件(SOPS)管理 - PostgreSQL 子库通过 Flink CDC SQL (rlink‑rs) 捕获变更数据(逻辑复制 CDC,使用内置
pgoutput,库为es-center-server)- 已通过环境变量启用
wal_level=logical等参数并重启两节点 - rlink‑rs 启动前置(经
pgpool且/*NO LOAD BALANCE*/强制主库):创建cdc_user(REPLICATION LOGIN+只读)、为“表创建者”设置默认权限、按模式发布到es-center-server的public模式:CREATE PUBLICATION rlink_pub FOR TABLES IN SCHEMA public WITH (publish='insert,update,delete,truncate');对无主键且需删除定位的表设REPLICA IDENTITY FULL - CDC 直连当前主库(不走
pgpool),在es-center-server数据库上使用复制协议与pgoutput抓取I/U/D/TRUNCATE;主库发现用 VIP/DNS 或SELECT pg_is_in_recovery()探测;偏移以LSN持久化,切换后自动重建槽续接
- 已通过环境变量启用
- 变更数据写入 Kafka(Redpanda 单机或集群部署,适配跨境网络环境)
- 主题:
pg.es-center-server.public.{table};键=主键;保留期 7–30 天;必要时启用 compact 处理墓碑 - 客户端参数:
enable.idempotence=true、acks=all、compression.type=zstd、linger.ms=20–50、batch.size=64–256KB;安全启用SASL/SCRAM + TLS
- 主题:
- 使用 Tailscale 建立 P2P 隧道,分配虚拟 IP 实现跨境网络互通;数据面启用压缩与 BBR,必要时叠加站点型 WireGuard(固定节点、
- 多个境外端
- 通过 Tailscale 接入同一虚拟网络;就近直连国内 Redpanda;网络不稳时后续可引入区域 Redpanda + MirrorMaker 2 扩展
- Nacos(r-nacos)自动同步国内端配置信息(复用 Nacos 主从同步机制)
- 单源写(国内),境外端只读订阅;应用侧启用本地缓存与版本标识;敏感项与密钥独立管理与轮换;目标库连接信息指向本地
pgpool,数据库名统一为es-center-server
- 单源写(国内),境外端只读订阅;应用侧启用本地缓存与版本标识;敏感项与密钥独立管理与轮换;目标库连接信息指向本地
- rlink‑rs 直接消费国内 Redpanda 主题
- 消费
pg.es-center-server.public.{table}主题,解析op/table/key/lsn/txid/ts/(before)/(after);按需做字段过滤/脱敏与轻量变换;监控主题滞后与错误率 - 批量 Upsert/删除:
INSERT ... ON CONFLICT (id) DO UPDATE ...与DELETE FROM t WHERE id=:id;每批事务成功后手动提交位点,实现“至少一次 + 幂等” - 连接经本地
pgpool路由主库(数据库名es-center-server),主备切换透明;失败整批回滚重试;必要时限流保护数据库与网络
- 消费
- 国内端
- 24 日
总结
- 已完成关键容灾功能的开发与部署,包括数据库的自动备份与手动备份,并支持通过 Web 界面将服务器上的数据库备份文件下载至本地。
- 原计划的设备日志上传功能已优化为通用文件上传能力,现支持上传设备上的各类文件,包括日志文件、数据库文件及配置文件等。相关 API 已部署上线,基于 Web 界面的服务器端文件下载功能正在开发中(下载设备上传的文件)。
- 后续工作重点将聚焦于平台架构优化,优先保障海外 App 的稳定运行。遵循“就近接入”原则,直播流与信令交互将调度至区域最近的服务器,跨境数据同步作为核心支撑环节之一,将持续优化以提升整体服务质量。
备忘
已在 zxs-ca 环境完成三轮自测,第一、二轮发现的问题均已修复。安装及更新程序新增逻辑与配置如下:
一、新增配置与转发规则
- Nginx 代理新增转发规则:将请求转发至内网IP的 8066 端口(对应 ES_CENTER_SERVER_AGENT_PORT),用于代理 agent API 的 HTTP 请求;
- 原始配置文件及升级配置文件中,新增配置项:
ES_CENTER_SERVER_AGENT_PORT=8066。
二、安装/更新程序优化逻辑
安装及更新程序执行过程中,用户确认输入 yes 后,会先执行以下命令停止目标程序,避免因程序正在运行导致无法替换文件:
sudo systemctl stop es-center-server-agent
sudo pkill -f es-center-server-agent待安装及更新程序中所有原有服务均完成更新并正常运行后,再将 es-center-server-agent 安装为系统服务。
三、最终验证步骤及期望结果
-
查看服务状态
- 执行命令:
systemctl status es-center-server-agent --no-pager - 期望结果:输出中包含
Active: active (running),且主进程 PID 与配置文件中ExecStart指定的路径一致;
- 执行命令:
-
检查开机自启状态
- 执行命令:
systemctl is-enabled es-center-server-agent - 期望结果:输出
enabled;
- 执行命令:
-
检查当前运行状态
- 执行命令:
systemctl is-active es-center-server-agent - 期望结果:输出
active。
- 执行命令:
计划有调整,这些先不做了
- 🟢 在多个采集设备信息界面中,增加其绑定的采集服务器信息及最新固件版本信息,例如:直播(地图)模块和远程模块中的设备运行信息页面。
Last updated on