基于 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,验证自动发现机制。 -> PassUT_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. 《系统测试计划》
- 测试策略:
- 功能测试: 使用
natsCLI 工具手动发布订阅。 - 性能测试: 使用
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_user和http_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的算法世界