Files
zhub/README.md
绝尘 44d4fcdbc4 更新:1、依赖升级
2、module 名称地址
2025-10-06 00:46:51 +08:00

7.1 KiB
Raw Permalink Blame History

ZHub 工程项目文档

1. 概述

ZHub 是一个基于 Go 的高性能分布式消息中间件,支持发布/订阅模式、定时任务、延时消息、分布式锁等功能。它适用于需要高并发、低延迟的消息传递场景。


2. 技术栈

  • 语言: Go (Golang)
  • 网络库: net, bufio
  • 并发模型: 使用 goroutines 和 channels 实现并发处理。
  • 持久化: 使用文件存储(如延时任务和锁信息)。
  • 配置管理: 使用 Viper 读取 INI 格式的配置文件。
  • 权限控制: 基于 YAML 的用户、组、Token 和频道权限管理。
  • 监控界面: 使用 Gin 提供 HTTP 接口用于监控和服务管理。
  • 数据库支持: 支持 MySQL 和 PostgreSQL 用于定时任务的配置。

3. 核心功能模块

3.1 消息总线 (zbus)

  • 主题管理: 支持多主题订阅与发布。
  • 组订阅: 每个主题可以有多个消费组,组内客户端共享消息。
  • 延时消息: 支持延时发送消息,使用 time.Timer 实现。
  • 定时任务: 支持 cron 表达式或固定时间间隔的任务调度。
  • 分布式锁: 提供互斥锁机制,支持重入和自动释放。
  • 持久化: 使用文件保存延时任务和锁的状态,确保服务重启后数据不丢失。

3.2 权限管理 (auth)

  • 用户认证: 支持基于 Token 的认证。
  • 角色授权: 用户分属不同组,组内定义读写权限。
  • 频道访问控制: 频道可设置为公开或私有,私有频道需授权访问。
  • 配置热加载: 支持运行时重新加载权限配置。

3.3 客户端 (client)

  • 连接管理: 支持自动重连机制。
  • 订阅与发布: 提供 API 订阅主题并接收消息。
  • RPC 调用: 支持远程过程调用,并处理超时和返回结果。
  • 锁机制: 支持获取和释放分布式锁。

3.4 监控 (monitor)

  • HTTP 接口: 提供 /_/info, /_/cleanup, /timer/reload 等接口。
  • 可视化界面: 提供简单的 HTML 页面展示系统状态。
  • 版本信息: 显示当前运行的 ZHub 版本。

4. 架构设计

4.1 总体架构

ZHub 采用经典的 C/S 架构,包含以下主要组件:

  • 服务端 (main.go)
    • 启动 TCP 服务器监听客户端连接。
    • 加载配置文件并初始化日志。
    • 启动监控服务Gin
  • 客户端 (client.go)
    • 提供连接、订阅、发布、RPC 调用等 API。
    • 自动重连机制保证连接稳定性。
  • 消息总线 (zbus)
    • 处理消息的发布、订阅、延时、定时等核心逻辑。
  • 权限管理 (auth)
    • 管理用户、组、Token 和频道权限。
  • 监控 (monitor)
    • 提供 HTTP 接口和 Web 界面用于管理和监控。

4.2 数据流图

+-------------------+     +------------------+     +------------------+
|   Client (Go)     |<--->|   ZHub Server    |<--->|   Monitor (Gin)  |
+-------------------+     +------------------+     +------------------+
                             |
                             v
                       +------------------+
                       |   Persistence    |
                       | (File, DB)      |
                       +------------------+

5. 配置说明

5.1 配置文件 (app.ini)

  • [service]: 服务相关配置。
    • watch: 监控服务地址。
    • addr: 主服务监听地址。
    • auth: 是否启用认证0 不启用1 启用)。
  • [data]: 数据目录配置。
  • [log]: 日志配置。
    • handlers: 输出方式console/file
    • level: 日志级别info/debug/error
    • file: 日志文件路径。
  • [ztimer]: 定时任务数据库配置。
    • db.addr, db.user, db.password, db.database, db.schema, db.type.

5.2 权限配置 (auth.yml)

  • users: 用户列表,包含 ID、用户名、密码、状态、所属组、读写权限。
  • groups: 用户组列表,包含名称、描述、读写权限。
  • tokens: Token 列表,包含 ID、用户 ID、Token 值、过期时间和状态。
  • channels: 频道列表,包含名称、描述、是否为公开频道。

6. 部署与构建

6.1 构建脚本 (build.bat)

  • 支持跨平台编译Linux、Windows、Mac
  • 使用 UPX 压缩生成的二进制文件。
  • 自动生成版本号并嵌入到程序中。

6.2 启动命令

  • 服务端启动:

    go run main.go
    
  • 客户端启动:

    go run cmd/client.go -cli -r <command>
    

6.3 监控服务

  • 默认监听地址:http://<host>:<port>/
  • 支持的接口:
    • /_/info: 获取系统信息。
    • /_/cleanup: 清理无订阅的主题。
    • /timer/reload: 重新加载定时任务。
    • /topic/publish: 发布主题消息。
    • /topic/delay: 发送延时消息。
    • /auth/reload: 重新加载权限配置。

7. 安全性设计

7.1 认证机制

  • 所有客户端必须通过 Token 认证才能进行操作。
  • Token 具有过期时间和状态管理。

7.2 授权机制

  • 用户分属不同组,组内定义读写权限。
  • 频道可设置为公开或私有,私有频道需授权访问。
  • 支持正则表达式匹配主题名,实现细粒度的权限控制。

7.3 分布式锁

  • 使用互斥锁机制防止多个客户端同时执行关键操作。
  • 锁具有超时机制,避免死锁。

8. 性能优化

8.1 并发处理

  • 使用 goroutines 和 channels 实现高效的并发处理。
  • 所有 I/O 操作异步化,减少阻塞。

8.2 内存管理

  • 使用缓冲区池化技术减少内存分配。
  • 对频繁使用的结构体进行复用。

8.3 日志优化

  • 支持日志级别控制,减少不必要的日志输出。
  • 日志输出格式化,便于调试和分析。

9. 测试与验证

9.1 单元测试

  • 覆盖所有核心模块的功能测试。
  • 使用 Go 的 testing 包编写测试用例。

9.2 集成测试

  • 模拟多个客户端并发操作,验证系统的稳定性和一致性。
  • 测试定时任务、延时消息、锁机制等复杂场景。

9.3 压力测试

  • 使用基准测试工具评估系统的吞吐量和响应时间。
  • 优化瓶颈部分,提升整体性能。

10. 未来规划

10.1 功能增强

  • 支持更多类型的数据库(如 MongoDB、Redis
  • 增加消息持久化支持(如 Kafka、RabbitMQ
  • 提供更丰富的监控指标和告警机制。

10.2 性能优化

  • 引入零拷贝技术减少内存复制。
  • 进一步优化 goroutine 调度策略。

10.3 安全加固

  • 增加 TLS 加密通信支持。
  • 支持更复杂的权限策略(如 RBAC、ABAC

10.4 用户体验

  • 开发图形化管理界面,简化配置和监控操作。
  • 提供 SDK 支持多种编程语言(如 Python、Java