
Ice 分布式部署实战Docker Compose NFS 搭建高可用规则集群【免费下载链接】iceRule engine/process engine, committed to solving flexible and complex hard-coded problems, for complex/flexibly changing business, provide a new abstract orchestration solution that is lightweight, high-performance and provides visual operation pages. Java规则引擎-ice针对复杂/灵活变动业务提供一个新的抽象编排解决方案轻量级高性能并提供可视化操作页面项目地址: https://gitcode.com/gh_mirrors/ice6/iceIce 是一款轻量级、零依赖的可视化规则引擎采用树形结构编排业务规则支持 Java、Go、Python 多语言 SDK配置变更秒级热更新。当业务规模增长、单机部署无法满足可用性要求时你可以用Docker Compose NFS快速搭建 Ice 分布式部署的高可用规则集群——多个 Server 共享同一份规则配置任何一个节点宕机都不影响规则发布与执行。本文将带你从零开始完成这套架构的落地。一、Ice 分布式架构解析纯文件存储如何实现高可用很多同学会好奇Ice 规则引擎不依赖数据库、消息队列和服务注册中心靠一个ice-data/文件目录存储规则它凭什么做分布式高可用答案在于它的核心设计Server 与 Client 完全解耦。Server 负责 Web UI 可视化编排与规则发布Client业务应用内嵌 SDK通过轮询共享目录检测版本变化并加载规则到内存执行。两者之间没有网络协议只通过共享存储目录交互┌──────────────────────────────────────────────────┐ │ NFS 共享存储 (ice-data/) │ │ apps/ bases/ confs/ versions/ clients/ │ └──────────────────────────────────────────────────┘ ▲ 写入发布规则 ▲ 读取轮询版本 ┌───────┴────────┐ ┌────────┴─────────┐ │ Ice Server 1 │ │ Ice Client │ │ Ice Server 2 │ │ (业务应用 SDK) │ │ Web UI / 发布 │ │ 内存执行 / 热更新 │ └────────────────┘ └──────────────────┘这套设计的妙处在于Server 宕机不影响 ClientClient 已把规则加载到内存即使所有 Server 都挂掉业务规则照常执行增量更新机制Client 轮询versions/目录只应用增量文件缺文件时自动回退全量加载文件级原子写所有配置写入都采用「临时文件 重命名」方式见server/storage/storage.go天然适配 NFS 共享盘。所以只要把ice-data/放到所有节点都能访问的 NFS 上多台 Server 就构成了一致的高可用规则集群。二、部署前准备NFS 共享存储的搭建方法高可用规则集群的第一步是先准备一个所有节点共享的 NFS 存储。以下以两台 CentOS/Ubuntu 主机为例一台作 NFS 服务端其余作挂载端。Step 1在存储节点上搭建 NFS 服务端# 安装 NFS 服务端Ubuntu 为例 sudo apt install -y nfs-kernel-server # 创建共享目录并赋予权限 sudo mkdir -p /data/ice-data sudo chmod 777 /data/ice-data # 导出共享目录 echo /data/ice-data *(rw,sync,no_root_squash,no_subtree_check) | sudo tee -a /etc/exports sudo exportfs -raStep 2在应用节点上挂载 NFS 客户端sudo apt install -y nfs-common sudo mkdir -p /mnt/ice-data sudo mount -t nfs NFS服务端IP:/data/ice-data /mnt/ice-data # 写入 fstab 实现开机自动挂载 echo NFS服务端IP:/data/ice-data /mnt/ice-data nfs defaults,nolock 0 0 | sudo tee -a /etc/fstab 小提示挂载时建议加上nolock选项。Ice 的 ID 生成器与版本写入均采用文件原子操作nolock能避免部分 NFS 环境的锁文件兼容问题。三、Docker Compose 一键编排高可用规则集群共享存储就绪后用 Docker Compose 编排两个 Ice Server 实例端口分别映射到宿主机的 8121 与 8122二者挂载同一份 NFS 目录。version: 3.8 services: ice-server-1: image: waitmoon/ice-server:latest container_name: ice-server-1 ports: - 8121:8121 volumes: - /mnt/ice-data:/app/ice-data environment: - ICE_PUBLISH_TARGETSnode2http://ice-server-2:8121 restart: always ice-server-2: image: waitmoon/ice-server:latest container_name: ice-server-2 ports: - 8122:8121 volumes: - /mnt/ice-data:/app/ice-data environment: - ICE_PUBLISH_TARGETSnode1http://ice-server-1:8121 restart: always执行启动命令docker compose up -d容器内ice-server的默认数据目录为/app/ice-data见server/Dockerfile通过-storage-path参数指定我们已用卷挂载覆盖。启动后访问http://节点IP:8121和http://节点IP:8122两个 Web UI 看到的规则完全一致——因为它们读的是同一份 NFS 数据。如果想用 Docker 原生的 NFS 卷驱动也可以把volumes段替换为volumes: nfs-data: driver: local driver_opts: type: nfs o: addrNFS服务端IP,rw,nolock,soft device: :/data/ice-data四、多实例发布配置规则一键同步到所有节点集群里两台 Server 都连了同一份存储那在 Web UI 上发布规则时会发生什么这里要引入 Ice 的publish-targets发布目标机制。发布接口会携带完整的规则 JSON请求会转发到配置的远端 Server 的/ice-server/base/import接口见server/handler/publish.go实现跨节点同步。上面的 Compose 配置中我们已经给每个节点设置了对端地址ice-server-1配置ICE_PUBLISH_TARGETSnode2http://ice-server-2:8121ice-server-2配置ICE_PUBLISH_TARGETSnode1http://ice-server-1:8121。在任意一台 Server 的 Web UI 上点击「应用/发布」时选择发布目标即可把规则推送到对端配合共享存储所有 Client 都能在数秒内热更新生效。除了环境变量server/config/config.go也支持命令行参数-publish-targets格式同为name1url1,name2url2。此外server/ice.sh脚本展示了完整的启动参数示例包括-port、-client-timeout、-version-retention和定时清理配置-recycle-cron均可按需调整。五、客户端接入与热更新验证规则集群搭好后业务应用通过 SDK 接入即可。Ice 提供了功能完全对等的三套 SDKJavasdks/java/ice-core使用IceFileClient(app, storagePath, scanPackage)初始化Gosdks/go使用ice.NewClient(app, storagePath)初始化Pythonsdks/python使用ice.FileClient(app, storage_path)初始化。以 Go 为例接入集群的客户端只需要指向 NFS 挂载路径client, _ : ice.NewClient(1, /mnt/ice-data) client.Start() defer client.Destroy()验证热更新的最快方法在 Web UI 上修改规则树某个节点的阈值并发布观察业务应用日志——默认 2 秒轮询间隔内即可看到新版本生效全程无需重启应用。六、高可用效果验证与常见问题排查集群部署完成后强烈建议做一次故障演练在 Web UI 发布一条规则确认两台 Server 都同步成功docker stop ice-server-1再访问:8122的 Web UI——规则依旧可编辑、可发布重启业务应用Client 从 NFS 重新加载规则正常运行。 常见问题速查现象排查方向两个 Server 看到的数据不一致检查 NFS 挂载是否成功、fstab是否配置开机挂载发布规则时提示 unknown publish target检查ICE_PUBLISH_TARGETS格式与容器间网络互通用服务名而非 localhost客户端迟迟不生效确认 Client 的storagePath指向共享目录调整pollInterval默认 2s集群节点显示离线检查ICE_CLIENT_TIMEOUT默认 30s与客户端心跳间隔是否匹配七、总结从单机到高可用规则集群只需三步Ice 规则引擎的分布式部署并不复杂准备 NFS 共享盘 → Docker Compose 编排多实例 → 配置发布目标。借助「Server/Client 解耦 纯文件存储」的架构优势你无需引入任何中间件就能获得秒级热更新、节点故障自愈的高可用规则集群非常适合营销活动、风控、动态定价等对规则变更频率和稳定性要求高的业务场景。【免费下载链接】iceRule engine/process engine, committed to solving flexible and complex hard-coded problems, for complex/flexibly changing business, provide a new abstract orchestration solution that is lightweight, high-performance and provides visual operation pages. Java规则引擎-ice针对复杂/灵活变动业务提供一个新的抽象编排解决方案轻量级高性能并提供可视化操作页面项目地址: https://gitcode.com/gh_mirrors/ice6/ice创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考