文档导航 v5.0.0
内容区域 / Content

系统核心文档中心 v5.0.0

欢迎使用系统核心文档中心。本手册涵盖架构设计、协议规范、配置参数、接口定义及运维指南。所有文档均已更新至 v5.0.0 版本。建议使用 Chrome/Firefox 最新版本浏览。

1. 版本概览

版本发布日期支持状态主要变更
v5.0.02024-02-20当前稳定版架构重构、协议升级
v4.2.12023-11-15维护中安全补丁
v4.0.02023-08-01已停止EOS

2. 关键指标概览

100K+
QPS 峰值
<5ms
P99 延迟
99.999%
可用性

3. 快速导航

简介与核心概念

本系统是一个高性能、分布式、可扩展的消息传输与处理平台。设计初衷是解决大规模分布式环境下的数据一致性、传输可靠性和系统可维护性问题。

1. 核心概念

术语定义
Node (节点)运行系统核心进程的物理机或虚拟机实例。每个节点拥有唯一的 NodeID。
Cluster (集群)由多个节点组成的逻辑集合,通过一致性协议协调工作。
Partition (分区)数据分片的基本单位。同一分区的数据有序且存储在多个副本上。
Replica (副本)分区数据的冗余备份,分为主副本和从副本。
Producer (生产者)向系统发送数据的客户端应用。
Consumer (消费者)从系统拉取数据进行处理的客户端应用。
Offset (位移)消息在分区中的唯一标识,单调递增的64位整数。
Quorum (仲裁)进行写入操作所需的最小确认副本数,通常为 N/2 + 1。

2. 数据流转模型

Producer -> [Serialize] -> [Compress] -> [Encrypt] -> Network
                                                            |
                                                            v
Consumer <- [Deserialize] <- [Decompress] <- [Decrypt] <- Network
      

3. 设计目标

  • 高吞吐: 单节点支持百万级 TPS。
  • 低延迟: 端到端延迟控制在毫秒级。
  • 高可用: 故障自动转移,RPO接近0。
  • 可扩展: 支持在线水平扩展,无需停机。

快速开始指南

本指南仅用于开发环境测试。生产环境部署请参考安装部署章节。

1. 环境准备

依赖版本要求检查命令
Docker>= 20.10docker --version
Docker Compose>= 2.0docker compose version
curlAnycurl --version

2. 启动服务

点击展开 docker-compose.yaml
version: '3.8'
services:
  core:
    image: registry.io/sys/core:5.0.0
    ports: ["8080:8080", "9090:9090"]
    environment: [SYS_MODE=dev]
  db:
    image: postgres:15
    environment: [POSTGRES_PASSWORD=sys]
        
# 1. 启动容器
docker compose up -d

# 2. 检查状态
docker compose ps

# 3. 测试连接
curl http://localhost:8080/healthz
# Expected: {"status": "ok", "uptime": "12s"}
      

更新日志

v5.0.0 (2024-02-20) - Major Release

重大变更

  • NEW 全新二进制协议格式,性能提升 40%。
  • NEW 原生支持 WebSocket 双向流。
  • BREAK 移除废弃的 HTTP/1.0 长连接支持。

修复

  • FIX [CORE-123] 修复高并发下的死锁问题。
  • FIX [NET-456] 修复连接泄漏问题。

优化

  • OPT 内存占用降低 30%。
  • SEC 升级 OpenSSL 至 3.0.12 修复安全漏洞。
  • FIX 修复时区解析错误的 Bug。

系统架构总览

1. 宏观架构图

+---------------------+       +---------------------+
|   Client Layer      |       |   Management Layer  |
| (SDK/CLI/Gateway)   |       |   (Admin/Monitor)   |
+----------+----------+       +----------+----------+
           |                             |
           v                             v
+----------+----------+       +----------+----------+
|   Access Layer      |<----->|   Control Layer     |
| (LB/Proxy/Ingress)  |       | (Scheduler/Manager) |
+----------+----------+       +----------+----------+
           |                             |
           v                             v
+----------+----------+       +----------+----------+
|   Compute Layer     |<----->|    State Layer      |
|  (Worker/Executor)  |       | (Storage/Cache/MQ)  |
+---------------------+       +---------------------+
      

2. 组件交互流程

  1. Client 通过 SDK 发起连接,经由 Access 层负载均衡。
  2. Access 层将请求路由至 Compute 层对应节点。
  3. Compute 层处理业务逻辑,读写 State 层数据。
  4. Control 层负责全链路调度、熔断、限流。

设计原则

系统设计遵循以下核心原则,以保障在高负载场景下的稳定性和可维护性。

原则缩写说明
Design for FailureDFF假设任何组件都可能故障,设计自动容错机制。
ImmutabilityIMM核心数据结构不可变,通过版本控制实现变更。
BackpressureBKP当下游处理能力不足时,反向传导压力至源头。
LocalityLOC数据与计算尽量靠近,减少网络开销。

容错机制

系统采用熔断、降级、隔离三种手段保障核心链路:

  • 熔断: 当下游错误率超过 50% 且持续 10s 时触发熔断,直接返回降级响应。
  • 降级: 熔断触发后,返回缓存数据或默认值。
  • 隔离: 不同业务线使用独立的资源池,避免相互影响。

网络拓扑

推荐部署于多可用区架构,以实现跨机房容灾。

Region A (Active)                    Region B (Standby)
+-------------------+                +-------------------+
| AZ-1              |                | AZ-2              |
| +----+  +----+    |                | +----+  +----+    |
| |Node|  |Node|<---+--Cross Region--+ |Node|  |Node|    |
| +----+  +----+    |   Replication  | +----+  +----+    |
+-------------------+                +-------------------+
      

网络端口规划

端口协议用途开放范围
8080HTTP对外服务端口公网
9090gRPC内部通信端口内网
2379etcd集群元数据节点间

组件清单

组件名语言依赖功能描述
sys-coreGo-核心服务进程,处理所有业务逻辑。
sys-agentRust-轻量级代理,负责监控采集和命令下发。
sys-cliPythonsys-core命令行管理工具。

协议分层模型

层级名称职责
L7Application业务数据序列化
L6Presentation加密/压缩
L5Session会话管理与认证
L4Transport可靠传输 (TCP/QUIC)

二进制帧结构

  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |   Magic (0x5A) | Version (1B) |    Type (1B)   |   Flags (1B) |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                       Sequence ID (4B)                        |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                       Payload Length (4B)                     |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                     Payload Data (Variable)                   |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                       CRC32 Checksum (4B)                     |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      

字段说明

字段长度说明
Magic1B魔数,固定为 0x5A。
Version1B协议版本,当前为 0x02。
Type1B帧类型:0x01=数据, 0x02=ACK, 0x03=心跳。
Flags1B标志位:Bit0=压缩, Bit1=加密。
Sequence ID4B包序号,用于确认和去重。
Payload变长实际数据负载。
CRC324B校验和。

内置数据类型

系统支持以下基础数据类型,用于编解码过程。

类型码名称长度范围
0x01INT81-128 ~ 127
0x02UINT810 ~ 255
0x03INT162-32768 ~ 32767
0x04UINT1620 ~ 65535
0x05INT324-2^31 ~ 2^31-1
0x06UINT3240 ~ 2^32-1
0x07INT648-2^63 ~ 2^63-1
0x08UINT6480 ~ 2^64-1
0x09FLOAT324IEEE 754
0x0AFLOAT648IEEE 754
0x0BSTRING变长UTF-8编码,最大16MB
0x0CBINARY变长原始字节,最大64MB

错误处理机制

所有错误响应均遵循统一格式。

{
  "code": 10001,
  "message": "Resource not found",
  "details": {
    "resource_id": "res_12345",
    "trace_id": "abc-123-def"
  }
}
      

错误码范围

范围类别
0x0000 - 0x00FF成功状态
0x0100 - 0x0FFF系统错误
0x1000 - 0xFFFF业务错误

主配置文件详解

配置文件路径默认为 /etc/sys/config.yaml

基础配置
参数类型默认值说明
node_idstringauto节点唯一标识。若为auto则自动生成。
cluster_namestringdefault集群名称。
data_dirstring/var/data数据存储目录。
log_dirstring/var/log/sys日志文件目录。
pid_filestring/var/run/sys.pidPID文件路径。
modeenumproduction运行模式:development|test|production。
参数默认值说明
max_open_files65535最大打开文件数。
max_connections10000最大并发连接数。
max_memory_mb0内存软限制,0为不限制。

完整配置示例

node_id: "node-01"
cluster_name: "prod-cluster"
data_dir: "/data/sys"
log_dir: "/var/log/sys"
mode: "production"

listen:
  - "0.0.0.0:8080"
  - "0.0.0.0:9090"

limits:
  max_connections: 50000
  max_memory_mb: 8192
      

网络配置

参数默认值说明
net.bind_addr0.0.0.0绑定IP地址。
net.port8080监听端口。
net.io_threads0IO线程数,0为自动。
net.tcp_nodelaytrue禁用Nagle算法。
net.tcp_keepalivetrue启用TCP KeepAlive。
net.read_buffer_size65536读缓冲区大小。
net.write_buffer_size65536写缓冲区大小。
net.idle_timeout300s连接空闲超时。

性能调优参数

调优参数需要根据实际负载场景进行调整,盲目调整可能适得其反。
参数默认值推荐场景说明
perf.worker_threadsautoCPU密集型工作线程数,建议设为CPU核数。
perf.batch_size1000高吞吐批量处理大小。
perf.queue_size10000突发流量内部队列深度。
perf.prefetch_count10消费者预取消息数量。

安全配置

参数默认值说明
security.tls_enabledtrue启用TLS加密传输。
security.cert_file-证书文件路径。
security.key_file-私钥文件路径。
security.ca_file-CA证书路径(双向认证)。
security.cipher_suitesTLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384加密套件。
security.min_tls_versionTLS1.2最小TLS版本。

权限控制 (RBAC)

roles:
  - name: admin
    permissions: ["*"]
  - name: viewer
    permissions: ["read:*"]
      

日志配置

参数默认值说明
log.levelinfo日志级别:debug|info|warn|error
log.formatjson输出格式:json|text
log.outputstdout输出位置:stdout|stderr|文件路径
log.max_size100单个日志文件最大尺寸(MB)。
log.max_backups10保留旧日志文件数量。
log.max_age30保留天数。
log.compresstrue压缩旧日志文件。

REST API 规范

所有API遵循 RESTful 设计规范,基础路径为 /api/v1

方法路径描述
GET/clusters获取集群列表
POST/clusters创建集群
GET/clusters/{id}获取集群详情
PUT/clusters/{id}更新集群配置
DELETE/clusters/{id}删除集群

请求示例

curl -X POST https://api.example.com/api/v1/clusters \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "prod-01", "region": "us-west"}'
      

响应格式

成功响应

{"code": 0, "data": {...}}

错误响应

{"code": 10001, "msg": "Error"}

RPC 接口定义

内部服务间通信采用 gRPC 协议,定义文件位于 proto/ 目录。

service.proto
syntax = "proto3";

package sys.v1;

service ClusterService {
  rpc GetCluster(GetClusterRequest) returns (GetClusterResponse);
  rpc ListClusters(ListClustersRequest) returns (ListClustersResponse);
  rpc CreateCluster(CreateClusterRequest) returns (CreateClusterResponse);
  rpc UpdateCluster(UpdateClusterRequest) returns (UpdateClusterResponse);
  rpc DeleteCluster(DeleteClusterRequest) returns (DeleteClusterResponse);
  rpc WatchCluster(WatchClusterRequest) returns (stream WatchEvent);
}
        

消息定义

消息名字段类型说明
GetClusterRequestcluster_idstring集群ID
GetClusterResponseclusterCluster集群对象

事件流接口

系统支持通过 WebSocket 或 SSE 推送实时事件。

事件类型

事件码名称触发时机
E001NodeJoined新节点加入集群
E002NodeLeft节点离开集群
E003ResourceCreated资源创建成功
E004ResourceDeleted资源删除成功
E005AlertTriggered告警触发

事件格式

{
  "id": "evt_123456",
  "type": "E001",
  "timestamp": "2024-02-20T10:00:00Z",
  "payload": {
    "node_id": "node-02",
    "address": "192.168.1.20"
  }
}
      

系统状态码

名称说明
0x0000SUCCESS操作成功
0x0001SUCCESS_ASYNC异步处理中
0x0100ERR_UNKNOWN未知错误
0x0101ERR_TIMEOUT处理超时
0x0102ERR_OVERLOAD系统过载
0x0200WARN_SLOW响应缓慢

业务状态码

名称说明
0x1001BIZ_NOT_FOUND资源不存在
0x1002BIZ_ALREADY_EXISTS资源已存在
0x1003BIZ_PERMISSION_DENIED权限不足
0x1004BIZ_INVALID_PARAM参数错误
0x1100BIZ_QUOTA_WARNING配额即将用尽
0x1101BIZ_QUOTA_EXCEEDED配额已超限

生产环境部署

1. 系统要求

项目最低要求推荐配置
操作系统CentOS 7+Ubuntu 22.04 LTS
CPU4核16核
内存8GB64GB
磁盘100GB SSD1TB NVMe
网络1Gbps10Gbps

2. 安装步骤

  1. 下载二进制包
    wget https://releases.example.com/sys/5.0.0/sys-5.0.0-linux-amd64.tar.gz
    tar -xzf sys-5.0.0-linux-amd64.tar.gz -C /opt/
  2. 创建用户和目录
    useradd -r -s /bin/false sys
    mkdir -p /var/data/sys /var/log/sys
    chown -R sys:sys /var/data/sys /var/log/sys
  3. 配置 systemd 服务
    [Unit]
    Description=System Core Service
    After=network.target
    
    [Service]
    Type=simple
    User=sys
    ExecStart=/opt/sys/bin/sys-core -config /etc/sys/config.yaml
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
              
  4. 启动服务
    systemctl daemon-reload
    systemctl enable sys-core
    systemctl start sys-core

关键监控指标

系统通过 Prometheus 格式暴露指标,路径为 /metrics

指标名类型标签说明
sys_connections_totalGaugestatus当前连接数
sys_requests_totalCountermethod, code请求总数
sys_request_duration_secondsHistogrammethod请求耗时分布
sys_queue_sizeGaugename队列深度
sys_memory_usage_bytesGaugetype内存使用量

告警规则配置

推荐配置以下告警规则,保障系统稳定运行。

P1 - 严重告警 (立即处理)
名称表达式持续时间
服务宕机up{job="sys"} == 01m
错误率飙升rate(sys_requests_total{code=~"5.."}[5m]) > 0.12m
内存耗尽sys_memory_usage_bytes / node_memory_MemTotal_bytes > 0.951m
名称表达式持续时间
高延迟histogram_quantile(0.99, sys_request_duration_seconds) > 0.55m
磁盘空间不足node_filesystem_avail_bytes / node_filesystem_size_bytes < 0.1510m

常见问题排查

问题1: 服务无法启动

现象

执行 systemctl start 后服务立即退出。

排查步骤

  1. 检查日志: journalctl -u sys-core -n 50
  2. 检查配置文件语法: sys-core -config /etc/sys/config.yaml -verify
  3. 检查端口占用: netstat -tlnp | grep 8080
  4. 检查权限: ls -la /var/data/sys

现象

监控面板显示连接数曲线单向上升,未呈现锯齿状。

原因分析

  • 客户端未正确关闭连接。
  • 空闲超时配置过长或未生效。
  • 存在连接泄漏Bug。

解决方案

调整配置 net.idle_timeout 为合理值(如 300s),并在客户端实现保活机制。

现象

系统RSS内存持续增长,触发OOM Killer。

排查工具

# 查看堆内存分配
curl http://localhost:6060/debug/pprof/heap > heap.out
go tool pprof heap.out

# 查看goroutine数量
curl http://localhost:6060/debug/pprof/goroutine?debug=1
        
系统状态

实时性能

8,241
QPS
4.2ms
Latency
34%
CPU
6.2G
Memory

节点状态

NodeRoleStatus
node-01LeaderActive
node-02FollowerActive
node-03FollowerSyncing

最近日志

10:00:02INFO Checkpoint saved
10:00:01INFO Heartbeat received
09:59:58WARN Slow query detected
版本: v5.0.0
运行时间: 3d 4h 12m
Goroutines: 284

快速操作

健康检查 | 重新加载
查看日志 | 性能分析