menu

基于 NATS JetStream、高性能(High Performance)、3节点集群(3-Node Cluster)、替代旧系统(Replace Legacy)

这是一个非常庞大的工程文档集。为了让你能够直接使用,我将这 19 个文档的核心内容进行了深度填充

所有内容均基于你的环境:3 节点集群 (10.10.10.111-113),Ubuntu 22.04,NATS JetStream 架构。


第一阶段:需求与规划阶段

1. 《项目实施方案 / 执行计划》

  • 1.1 项目背景
  • 当前痛点:旧版 ActiveMQ 在高并发下延迟超过 200ms,且存在单点故障风险。
  • 建设目标:构建基于 NATS JetStream 的高可用消息中台,实现 TP99 < 5ms,支持 3 节点容灾。

  • 1.2 资源规划
  • 硬件资源: 3 台虚拟机 (4C/8G/100G SSD),IP: 10.10.10.111-113。
  • 软件版本: NATS Server v2.10.x, Ubuntu 22.04 LTS。

  • 1.3 实施时间表 (Gantt 摘要)
  • T+1~2天: 系统初始化(内核调优、防火墙配置)。
  • T+3~5天: NATS 集群部署与网络调通。
  • T+6~8天: JetStream 持久化配置与 Stream 规划。
  • T+9~10天: 压力测试与故障演练(模拟断电、拔网线)。

2. 《需求规格说明书 (SRS)》

  • 2.1 功能性需求
  • [F-01] 集群互联: 3 个节点必须组成 Full Mesh 网络,任意节点宕机不影响服务。
  • [F-02] 消息持久化: 核心订单数据必须落地磁盘 (File Store),保留周期 7 天。
  • [F-03] 消费模式: 支持“负载均衡消费”(Queue Group)和“广播消费”(Pub-Sub)。

  • 2.2 性能需求
  • 吞吐量: 集群写入 TPS ≥ 100,000 (1KB payload)。
  • 延迟: 端到端延迟 ≤ 2ms (无积压情况)。

  • 2.3 可靠性需求
  • RPO (数据丢失量) = 0 (开启 Ack 机制)。
  • RTO (恢复时间) < 10秒 (Raft 选举时间)。

3. 《需求确认单》

  • 确认项清单:
  • 确认废弃 MQTT 协议,统一使用 NATS 原生协议 (Port 4222)。
  • 确认不使用内存存储模式,全部使用 SSD 文件存储以保证数据安全。
  • 确认鉴权方式采用 NKEY 机制,而非简单的用户名密码。

  • 签字栏: [项目经理] [技术负责人] [202X-XX-XX]

第二阶段:系统设计阶段

4. 《概要设计说明书 (HLD)》

  • 4.1 拓扑架构图
  • Load Balancer (VIP 10.10.10.200): Nginx/HAProxy (TCP Stream 转发)。
  • Cluster Layer: Node1(Seed), Node2, Node3 相互通过 Port 6222 连接。
  • Storage Layer: 本地路径 /data/nats-server/jetstream

  • 4.2 交互流程
  • Producer -> VIP -> RoundRobin -> NATS Node (Leader/Follower) -> Raft Replicate -> Disk -> Ack。

5. 《详细设计说明书 (LLD)》

  • 5.1 端口定义
  • 4222: Client 接入端口。
  • 6222: Cluster 路由端口(内部互通)。
  • 8222: HTTP Monitoring 端口。

  • 5.2 系统参数调优 (sysctl.conf)
  • fs.file-max = 100000
  • net.core.somaxconn = 4096

  • 5.3 存储策略
  • 单条消息最大限制:8MB。
  • 最大流数量限制:1000 个。

6. 《数据库设计文档 (Stream/Subject 规划)》

  • 注意: NATS 无“表结构”,此文档定义流(Stream)与主题(Subject)
  • 6.1 命名规范
  • <环境>.<服务>.<动作>,例如:prod.order.created

  • 6.2 Stream 定义表 | Stream Name | Subjects | Retention | Replicas | Max Age | Storage | | :— | :— | :— | :— | :— | :— | | ORDERS | prod.order.> | WorkQueue | 3 | 7 Days | File | | LOGS | prod.logs.> | Limits | 1 | 24 Hours | File |

7. 《接口规范说明书 (API文档)》

  • 7.1 消息体结构 (JSON Schema)
  • Topic: prod.order.created
  • Payload Definition: ```json { “trace_id”: “uuid-v4”, “timestamp”: 1700000000, “data”: { “order_id”: “ORD-2024”, “amount”: 99.00 } }

  • 7.2 Header 定义
  • Nats-Msg-Id: 唯一去重 ID。
  • Content-Type: application/json

第三阶段:软件开发与编码

8. 《源代码 (Configuration Code)》

  • 核心配置文件 nats-server.conf (以 Node1 为例) ```text server_name: n1 listen: 0.0.0.0:4222 http_port: 8222

jetstream { store_dir: /data/nats max_mem: 1G max_file: 50G }

cluster { name: NATS_HA listen: 0.0.0.0:6222 routes: [ “nats://10.10.10.112:6222”, “nats://10.10.10.113:6222” ] }

9. 《单元测试报告》

  • 测试概况: 针对 Java/Go SDK 封装库进行测试。
  • 关键用例:
  • UT_01_Connect: 连接字符串包含 3 个 IP,验证自动发现机制。 -> Pass
  • UT_02_Reconnect: 模拟断开连接,SDK 是否在 2s 内重连。 -> Pass

10. 《开发环境部署文档》

  • 部署脚本 (setup.sh): bash

    安装 NATS

    curl -L https://github.com/nats-io/nats-server/releases/download/v2.10.0/nats-server-v2.10.0-linux-amd64.zip -o nats.zip unzip nats.zip cp nats-server /usr/local/bin/

    创建 Systemd 服务

    cp nats.service /etc/systemd/system/ systemctl enable –now na

第四阶段:测试与验证

11. 《系统测试计划》

  • 测试策略:
  • 功能测试: 使用 nats CLI 工具手动发布订阅。
  • 性能测试: 使用 nats-bench 工具进行 100 线程并发压测。
  • 破坏性测试: 运行时 kill -9 主节点。

12. 《系统测试用例 (Test Cases)》

ID 场景 操作步骤 预期结果 实测结果
TC-HA-01 Leader 选举 停止 Node1 (当前 Leader) Node2 或 Node3 在 2s 内成为新 Leader Pass
TC-PERF-01 写入峰值 发送 100万条 1KB 消息 耗时 < 10s (即 10w/s) Pass (9.8s)
TC-JS-01 数据持久化 发送消息 -> 重启集群 -> 消费 消息未丢失,Seq ID 连续 Pass

13. 《缺陷记录/Bug修复报告》

  • Bug ID: #NATS-001
  • 描述: 3 节点同时启动时,偶尔无法选主。
  • 原因: 虚拟机时间未同步,导致 Raft 心跳判断异常。
  • 解决方案: 所有节点安装 Chrony 进行 NTP 时间同步。
  • 状态: Closed。

14. 《系统测试报告》

  • 测试结论: * 集群在 3 节点模式下运行稳定。
  • 单节点故障对业务无感(客户端自动重连)。
  • TPS 稳定在 120,000 左右,满足设计指标。

15. 《安全扫描/渗透测试报告》

  • 扫描结果:
  • 端口 4222/6222 未发现溢出漏洞。
  • HTTP 8222 监控端口未授权访问风险(高危)。

  • 修复措施:nats.conf 中为 HTTP 监控配置 http_userhttp_password

第五阶段:试运行与验收

16. 《用户操作手册》

  • 16.1 客户端连接指南
  • 连接 URL: nats://10.10.10.111:4222,nats://10.10.10.112:4222,nats://10.10.10.113:4222

  • 16.2 常用命令 (Cheat Sheet)
  • 查看 Stream 状态:nats stream info ORDERS
  • 查看消费者状态:nats consumer info ORDERS WORKER-1
  • 发布测试消息:nats pub prod.order.created "hello"

17. 《系统运维维护手册》

  • 17.1 监控指标 (Prometheus Exporter)
  • nats_varz_in_msgs: 写入消息数。
  • nats_varz_slow_consumers: 慢消费者数量(需报警)。

  • 17.2 备份恢复流程
  • 备份: 每日凌晨 2 点执行 tar -zcvf nats_data_backup.tar.gz /data/nats/jetstream
  • 恢复: 停止服务 -> 解压数据 -> 修正文件权限 -> 启动服务。

18. 《试运行报告》

  • 运行周期: 2024/01/01 - 2024/01/15 (两周)。
  • 数据汇总:
  • 总处理消息:5,400 万条。
  • 集群宕机次数:0 次。
  • 报警触发次数:2 次(皆为磁盘空间预警,已清理)。

19. 《项目验收报告》

  • 验收清单核对:
  • 源代码与配置文件已移交 Git 仓库。
  • 运维手册已培训给运维团队。
  • 压力测试报告已通过审核。

  • 验收结论: 系统功能完备,性能达标,文档齐全,同意通过验收,准予上线

评论:


技术文章推送

手机、电脑实用软件分享

微信搜索公众号: AndrewYG的算法世界
wechat 微信公众号:AndrewYG的算法世界