Ice 架构概览
理解 Ice 的 Server + Client + 共享存储架构模式
整体架构
Ice 采用 零外部依赖 的极简架构,通过文件系统实现配置存储和同步。
┌─────────────────────────────────────────────────────────────┐
│ 共享存储目录 (ice-data/) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │
│ │ apps/ │ │ bases/ │ │ confs/ │ │ versions/ │ │
│ │ 应用配置 │ │ 规则配置 │ │ 节点配置 │ │ 版本增量 │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
▲ 写入配置 ▲ 读取配置
│ │
┌───────┴───────┐ ┌───────┴───────┐
│ Ice Server │ │ Ice Client │
│ (配置管理) │ │ (规则执行) │
│ │ │ │
│ • Web 管理界面 │ │ • 轮询版本文件 │
│ • 规则编排配置 │ │ • 加载增量更新 │
│ • 版本发布管理 │ │ • 内存执行规则 │
└───────────────┘ └───────────────┘
架构特点
| 特点 | 说明 |
|---|---|
| 🚫 无数据库依赖 | 不需要 MySQL,配置以 JSON 文件存储 |
| 🚫 无中间件依赖 | 不需要 ZooKeeper、Redis 等 |
| 🚫 无长连接通信 | 不需要 NIO/Netty,Client 通过轮询文件获取更新 |
| ✅ 文件系统同步 | Server 和 Client 共享同一存储目录 |
| ✅ Docker 友好 | 一行命令即可部署 |
核心组件
Ice Server - 规则管理平台
功能定位:可视化规则配置管理中心
核心能力:
- 提供 Web 可视化规则配置界面
- 以 JSON 文件存储所有规则配置
- 支持规则版本管理和历史回溯
- 生成增量更新供 Client 消费
- 多应用(App)隔离管理
Ice Client - 规则执行引擎
功能定位:业务应用的规则执行核心
核心能力:
- 从文件系统加载规则配置到内存
- 轮询版本文件检测配置变更
- 提供高性能的规则执行接口
- 支持多种节点类型和编排模式
- 纯内存运算,毫秒级响应
共享存储 - 配置同步桥梁
功能定位:Server 和 Client 的配置同步媒介
存储结构:
ice-data/
├── apps/ # 应用配置
│ ├── _id.txt # ID 生成器
│ └── {app}.json # 应用信息
├── clients/ # 客户端信息
│ └── {app}/
│ ├── {address}.json # 心跳文件
│ └── _latest.json # 最新客户端
└── {app}/ # 应用规则
├── version.txt # 版本号
├── bases/ # Base 配置
├── confs/ # Conf 配置
├── versions/ # 增量更新
└── history/ # 发布历史
配置同步流程
1. Server 发布配置
用户在 Web 界面修改规则
↓
点击「发布」按钮
↓
Server 更新 bases/ 和 confs/ 文件
↓
生成增量文件到 versions/
↓
更新 version.txt 版本号
2. Client 轮询更新
Client 定期检查 version.txt(默认 5 秒)
↓
发现新版本号
↓
读取 versions/ 增量更新文件
↓
热更新内存中的规则配置
3. 心跳机制
Client 定期写入心跳文件到 clients/
↓
Server 读取心跳文件感知 Client 状态
↓
超时未更新的 Client 被标记为离线
部署方式
单机部署
最简单的部署方式,Server 和 Client 在同一台机器:
# 启动 Server
docker run -d --name ice-server \
-p 8121:8121 \
-v ./ice-data:/app/ice-data \
waitmoon/ice-server:latest
# Client 配置相同路径
ice:
storage:
path: ./ice-data
Docker Compose 部署
version: '3.8'
services:
ice-server:
image: waitmoon/ice-server:latest
ports:
- "8121:8121"
volumes:
- ./ice-data:/app/ice-data
your-app:
build: .
volumes:
- ./ice-data:/app/ice-data # 共享存储
depends_on:
- ice-server
分布式部署
多个 Server/Client 实例共享存储:
services:
ice-server-1:
image: waitmoon/ice-server:latest
volumes:
- /shared/ice-data:/app/ice-data # NFS/云盘
ice-server-2:
image: waitmoon/ice-server:latest
volumes:
- /shared/ice-data:/app/ice-data
client-1:
volumes:
- /shared/ice-data:/app/ice-data
client-2:
volumes:
- /shared/ice-data:/app/ice-data
推荐共享存储方案:
- NFS:网络文件系统,适合内网环境
- 云盘:阿里云 NAS、AWS EFS、Azure Files 等
- 分布式文件系统:GlusterFS、CephFS 等
性能特点
| 特性 | 说明 |
|---|---|
| 零网络开销 | 配置同步基于文件系统,无网络通信延迟 |
| 纯内存执行 | 规则执行完全在内存中进行,毫秒级响应 |
| 增量更新 | 只加载变更的配置,减少资源消耗 |
| 无锁设计 | 节点执行互不干扰,天然支持高并发 |