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 等

性能特点

特性说明
零网络开销配置同步基于文件系统,无网络通信延迟
纯内存执行规则执行完全在内存中进行,毫秒级响应
增量更新只加载变更的配置,减少资源消耗
无锁设计节点执行互不干扰,天然支持高并发

下一步