尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Ice 核心概念一文打通:规则树、关系节点、叶子节点与 Roam 全景解析

Ice 核心概念一文打通:规则树、关系节点、叶子节点与 Roam 全景解析 Ice 核心概念一文打通规则树、关系节点、叶子节点与 Roam 全景解析【免费下载链接】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它通过树形编排的方式专门解决复杂且灵活多变的业务规则硬编码问题无需数据库与中间件纯内存执行、毫秒级响应。与传统规则引擎用规则链或规则表组织逻辑不同Ice 将业务规则组织成一颗颗规则树节点之间互不引用、完全隔离只通过共享数据上下文Roam通信。无论你是第一次接触 Ice 的新手还是想深入理解其设计原理的开发者本文都能帮你用一篇文章的时间打通规则树、关系节点、叶子节点与 Roam 这四大核心概念。为什么 Ice 选择规则树而非规则链传统规则引擎往往把规则组织成一条长长的规则链前一条规则的输出是后一条规则的输入牵一发而动全身改一处就可能引起连锁反应排查与维护成本极高。Ice 的答案是规则树每个节点只负责自己的独立逻辑节点之间没有直接引用修改任意一个节点都不会波及其它节点。这带来了三个立竿见影的好处改动隔离增删改一个节点不影响整棵树的其它分支可复用同一个节点可以被多棵规则树共享可视化规则以树形结构呈现配合 Web 界面直接拖拽编排无需学习任何 DSL规则树的两大构件关系节点与叶子节点在 Ice 的规则树中所有节点只有两大类理解了它们规则树就理解了 80%。关系节点控制执行流程的指挥家关系节点相当于逻辑运算符它不写业务只决定子节点怎么跑。Ice 内置五种基础关系节点节点类型行为逻辑是否短路AND所有子节点必须返回 true是ANY至少一个子节点返回 true是ALL所有子节点执行完有 true 即 true否NONE所有子节点都不返回 true否TRUE无条件返回 true执行所有子节点副作用否每种关系节点还提供并行变体P_AND、P_ANY、P_ALL、P_NONE、P_TRUE并发执行所有子节点适合多路检查互不干扰的高性能场景。在 Go SDK 中关系节点通过sdks/go/relation/目录下的all.go、and.go、any.go、none.go、true.go及parallel/子目录实现节点类型枚举定义在sdks/go/enum/enums.go中。叶子节点承载业务逻辑的执行者叶子节点是规则树的末端真正写业务逻辑的地方。Ice 将叶子节点细分为三种语义叶子类型返回值典型用途Flowboolean条件判断用户是否符合资格Resultboolean业务操作发放优惠券是否成功Nonevoid副作用查询、日志、埋点、通知推送以 Go 为例一个判断分数是否达标的ScoreFlow只需实现DoFlow方法再通过ice.RegisterLeaf注册即可Java 侧对应BaseLeafFlow、BaseLeafResult、BaseLeafNone三个抽象基类见sdks/java/ice-core/.../leaf/base/目录。三种叶子分别实现LeafFlow、LeafResult、LeafNone接口框架会自动识别类型并适配执行见sdks/go/leaf/registry.go。一次完整的规则树执行认识 RunStateIce 节点执行结果只有四种状态定义于sdks/go/enum/enums.go的RunStateTRUE节点返回 true条件成立FALSE节点返回 false条件不成立NONE无结果中性常见于超时节点、None 型叶子SHUT_DOWN出现异常且无法处理终止整棵树执行规则从根节点出发关系节点按自身逻辑调度子节点子节点又把结果回传给父节点层层聚合后得到整棵树的最终结论。值得注意的是Ice 还支持全局异常处理与节点级异常处理节点实现ErrorHandler接口即可自定义出错时的返回状态配置层面也可显式指定errorState优先级最高。Roam贯穿整棵树的共享黑板如果节点之间不直接通信数据怎么流转答案就是Roam——一个线程安全的共享数据容器贯穿整棵规则树。任何节点都能从 Roam 读数据、写数据却不知道数据是谁写的这正是节点隔离的关键设计。基础读写put / getRoam ├── put(uid, 12345) // 扁平键值对 ├── get(uid) // → 12345 └── del(uid) // 删除深层键读写putDeep / getDeep用点号分隔的键可以自动创建嵌套结构非常适合存储用户画像等结构化数据putDeep(user.level, gold) // 自动创建 user 嵌套 map getDeep(user.level) // → gold动态引用 前缀节点配置的值如果以开头执行时会自动从 Roam 中解析对应键的真实值实现配置与数据的解耦例如uid等价于roam.getDeep(uid)见sdks/go/context/roam.go的Resolve方法。Roam 的元数据 Meta除了业务数据Roam 还携带执行元数据sdks/go/context/meta.goid业务处理标识、scene场景、nid当前节点 ID、ts时间戳、trace链路追踪 ID以及debug标志。其中trace会在每次请求时自动生成结合process记录器可以完整还原每个节点的执行顺序、结果与耗时是排查问题、做性能分析的利器。节点的通用能力inverse 取反、forward 前置与时间窗除了上述核心概念Ice 每个节点还内置三类通用配置让规则表达力大幅提升inverse 取反一键反转节点结果TRUE ↔ FALSE相当于给任意节点加非逻辑无需新建节点forward 前置节点类似 AND 组合前置节点返回 FALSE 时当前节点直接拒绝执行常用于权限校验、灰度开关时间窗控制可为节点设置生效的开始/结束时间过期自动返回 NONE 跳过非常适合活动限时规则这些通用能力统一实现在BaseNodeJava 侧sdks/java/ice-core/.../base/BaseNode.java与 Go 侧的sdks/go/node/node.go中采用模板方法模式先做时间检查、前置校验、异常兜底再委托给具体的processNode保证了所有节点行为的一致性与可观测性。总结一张图看懂 Ice 核心概念概念一句话理解关键文件规则树树形组织的规则集合节点互相隔离sdks/go/node/node.go关系节点控制子节点执行流程的运算符sdks/go/relation/叶子节点承载具体业务逻辑的执行单元sdks/go/leaf/registry.goRoam节点间共享的线程安全数据上下文sdks/go/context/roam.goRunStateTRUE / FALSE / NONE / SHUT_DOWN 四种执行状态sdks/go/enum/enums.go掌握了这五个概念你就已经打通了 Ice 的核心设计。接下来只需在 Web 界面里拖拽节点、连成树形结构点击应用即可秒级热更新生效。如果你想让规则修改不再牵一发动全身、让业务逻辑告别硬编码Ice 这套树 隔离 共享上下文的抽象编排方案值得一试。【免费下载链接】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),仅供参考
返回列表