Skip to Content

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-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-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 字段指定需上传的文件类型,如日志文件、数据库文件、配置文件等。
      • 🟡 前端开发:
        • 🟡 es-center-server-web-app(React + shadcn-ui 等生态组件,纯前端程序)
          • 🟡 开发在设备通用已上传文件列表界面:支持按设备编号筛选功能。支持具备权限的用户下载文件,其中文件下载权限限定为超级管理员和租户管理员(受后端权限策略的控制)。
        • ✅ 其它
          • ✅ 部署至 zxs-cs 测试环境,用于支撑与设备端的联调;结合日志记录与反馈信息,持续优化接口性能与功能完整性。

其它

  • 目标: 记录日常耗时的杂项工作、协作事项,以及必要的沟通、讨论等隐性事务。
  • 进度: 属非计划内事务(🟢 未开始 | 🟡 进行中 | ⚠️ 部分完成 | ✅ 已完成 | 📌 已验证)
    • 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_userREPLICATION LOGIN+只读)、为“表创建者”设置默认权限、按模式发布到 es-center-serverpublic 模式: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=trueacks=allcompression.type=zstdlinger.ms=20–50batch.size=64–256KB;安全启用 SASL/SCRAM + TLS
        • 多个境外端
          • 通过 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),主备切换透明;失败整批回滚重试;必要时限流保护数据库与网络

总结

  • 已完成关键容灾功能的开发与部署,包括数据库的自动备份与手动备份,并支持通过 Web 界面将服务器上的数据库备份文件下载至本地。
  • 原计划的设备日志上传功能已优化为通用文件上传能力,现支持上传设备上的各类文件,包括日志文件、数据库文件及配置文件等。相关 API 已部署上线,基于 Web 界面的服务器端文件下载功能正在开发中(下载设备上传的文件)。
  • 后续工作重点将聚焦于平台架构优化,优先保障海外 App 的稳定运行。遵循“就近接入”原则,直播流与信令交互将调度至区域最近的服务器,跨境数据同步作为核心支撑环节之一,将持续优化以提升整体服务质量。

备忘

已在 zxs-ca 环境完成三轮自测,第一、二轮发现的问题均已修复。安装及更新程序新增逻辑与配置如下:

一、新增配置与转发规则

  1. Nginx 代理新增转发规则:将请求转发至内网IP的 8066 端口(对应 ES_CENTER_SERVER_AGENT_PORT),用于代理 agent API 的 HTTP 请求;
  2. 原始配置文件及升级配置文件中,新增配置项: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 安装为系统服务。

三、最终验证步骤及期望结果

  1. 查看服务状态

    • 执行命令:systemctl status es-center-server-agent --no-pager
    • 期望结果:输出中包含 Active: active (running),且主进程 PID 与配置文件中 ExecStart 指定的路径一致;
  2. 检查开机自启状态

    • 执行命令:systemctl is-enabled es-center-server-agent
    • 期望结果:输出 enabled
  3. 检查当前运行状态

    • 执行命令:systemctl is-active es-center-server-agent
    • 期望结果:输出 active

计划有调整,这些先不做了

  • 🟢 在多个采集设备信息界面中,增加其绑定的采集服务器信息及最新固件版本信息,例如:直播(地图)模块和远程模块中的设备运行信息页面。
Last updated on