0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是流程/规则编排

lhl545545 来源:OSC开源社区 作者:OSC开源社区 2022-09-21 10:04 次阅读

什么是流程/规则编排?

所谓编排,就是让已有的节点通过不同的组织方式完成不同的需求 首先,我们需要对既有业务做一定程度的抽象,以一个例子开始:一个简单的国庆节充值活动: 活动时间 10.1-10.7 充值≥100 元,送 5 元余额 充值≥50 元,送 10 积分,10.5 之后开始

不叠加送, 即充 100 元只送 5 元余额不会叠加再送 10 积分

当充值发生时,我们拥有:充值用户-uid,充值金额-cost,充值时间-time再有一些制作好的抽象节点,如:

判断充值≥100 的条件节点 ScoreFlow-100,cost≥100 返回 true,否则返回 false

判断充值≥50 的条件节点 ScoreFlow-50,cost≥50 返回 true,否则返回 false

发放 5 元余额的结果节点 AmountResult,结果也可以有返回,比如正常发放了返回 true,库存不足了等原因导致的没有发放(不是error),可以返回 false

发放 10 元积分的结果节点 PointResult

那么,为什么要编排,如何编排才是最优的?

为什么要编排?

屏蔽代码影响: 比如编排者只需要知道 AmountResult 是发放余额的节点,然后在适当的位置运行这个节点即可,不需要关心真实的代码逻辑 提升效率: 结合可视化给非研发人员编排实现业务逻辑,支持动态修改与生效配置,比如充值条件 100 元改成 200,结合可视化工具直接修改,解放研发,提升生产效率

如何编排?

流程图式编排

acc0697c-3727-11ed-ba43-dac502259ad0.png

脑海里最先出现的编排方式,也是最常见的编排方式

执行树式编排

When X Then Y

accf851a-3727-11ed-ba43-dac502259ad0.png

以上两种基本代表了传统的编排思想,在简单的例子下,看起来也是非常直观,但,当变动发生时,尤其是需要灵活调整的场景,他们的表现又如何呢?

变动

①简单配置修改

充值 100 元改成 80 吧,10 积分变 20 积分吧,时间改成 10.9 号结束吧(微微一笑,毕竟我费了这么大劲,终于体现到价值了!)

②简单逻辑变动

用户参与积极性不高啊,去掉不叠加送吧,都送(稍加思索,费几个脑细胞挪一挪还是可以的,怎么也比改代码再上线强吧!)

③进阶逻辑变动

5元余额不能送太多,设置个库存100个吧,对了,库存不足了充100元还是得送10积分的哈(卒… 早知道还不如硬编码了)

真实线上变动只会更离谱,流程图式和执行树式实现的主要缺点在于,牵一发而动全身,改动一个节点需要瞻前顾后,如果考虑不到位,很容易弄错,现实的活动内容要比例子复杂的多,时间线也是多条,考虑到这,再加上使用学习框架的成本,往往得不偿失,到头来发现还不如硬编码

那么,有没有更好的编排逻辑?

ice是如何编排的

ace0adae-3727-11ed-ba43-dac502259ad0.png

如图,ice使用关系节点作为逻辑传递的桥梁,用树图方式呈现逻辑

关系节点(逻辑节点)

控制业务流转,如: AND: 从上到下执行子节点,遇到第一个false中断并返回false,全部为true则返回true,类似于 Java 的 && ANY: 从上到下执行子节点,遇到第一个True中断并返回true,全部为false则返回false,类似于 Java 的 || ALL: 从上到下执行所有子节点

叶子节点(业务节点)

真正做事情的节点,如: Flow: 一些条件与规则节点,如ScoreFlow Result: 一些结果性质的节点,如AmountResult,PointResult None: 一些不会干预流程的节点,如下文会介绍到的TimeChangeNone

执行流程

图中,如果10月4日,充值100元,则执行流程为:

从根节点开始,先执行ANY

充值时间在ANY生效时间内,继续执行

ANY有两个子节点,先执行第一个子节点AND

AND有两个子节点,先执行第一个子节点ScoreFlow-100

ScoreFlow-100判断并返回true

AND接收到true,继续向下执行AmountResult

AmountResult发放余额并返回true

AND子节点执行完毕,接收到两个true,自己也返回true

ANY接收到true,不再继续执行子节点并返回true

可以看到,之前需要剥离出的时间,已经融合到各个节点上了,把时间配置还给节点,如果没到执行时间,如发放积分的节点 10月5日之后才生效,那么在 10月5日之前,可以理解为这个节点不存在

变动的解决

对于直接修改节点配置就可以 对于直接把ANY 改成 ALL 即可(叠加送与不叠加送的逻辑在这个节点上,属于这个节点的逻辑就该由这个节点去解决) 对于由于库存的不足,相当于没有给用户发放,则 AmountResult 返回 false,流程还会继续向下执行,不用做任何更改 再加一个棘手的问题,当时间线复杂时,测试工作以及测试并发要怎么做?

一个 10月1日开始的活动,一定是在 10月1日之前开发上线完毕,如我在 9月15日要怎么去测试一个10月1日开始的活动?在 ice 中,只需要稍微修改一下:

acf1523a-3727-11ed-ba43-dac502259ad0.png

增加了个子节点TimeChangeNone(用于更改测试环境请求里的充值时间,可以改成任意想要的测试时间)

特性

为什么这么编排呢?为什么这样就能解决这些变动与问题呢?

其实,就是使用树形结构解耦,流程图式和执行树式实现在改动逻辑的时候,需要瞻前顾后,但是 ice 不需要,ice 的业务逻辑都在本节点上,每一个节点都可以代表单一逻辑,比如我改不叠加送变成叠加送这一逻辑就只限制在那个 ANY 节点逻辑上,只要把它改成我想要的逻辑即可,至于子节点有哪些,不用特别在意,节点之间通过上下文传递信息,每个节点执行完的后续流程不需要自己指定

因为自己执行完后的执行流程不再由自己掌控,还可以做到对象级别的复用:

ad0691a4-3727-11ed-ba43-dac502259ad0.png

如图,参与活动这里用到的 TimeChangeNone,如果现在还有个 H5 页面需要做呈现,不同的呈现也与时间相关,怎么办?只需要在呈现活动这里使用同一个节点对象(在ice后台配置中为同id节点),更改其中一个,另一个也会被更新(因为他们是同一个对象,不存在多个复用节点同步问题),避免了到处修改时间

Code

Talk is cheap. Show me the code…

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码
    +关注

    关注

    6

    文章

    942

    浏览量

    54826
  • 代码
    +关注

    关注

    30

    文章

    4788

    浏览量

    68603
  • 抽象
    +关注

    关注

    0

    文章

    5

    浏览量

    5572

原文标题:编排流程/规则,编排本身也需要很深的逻辑思考!

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【mBot试用体验】音乐编排

    最近一个月的考试月,要到大概下周才能解脱。所以论坛工作人员都来催我更帖子了,实在是羞愧。我拿到小车感觉还是很惘然,看了看当初自己申请这个mbot的申请贴才找到方向。当初自己是为了做一个编排舞蹈才申请
    发表于 01-15 01:20

    K8S容器编排的互通测试

    K8S容器编排之NetWorkPolicy官方实例
    发表于 06-06 11:28

    PCB设计流程规则

    PCB设计流程PCB规则设置设计规则的单位跟随画布属性里设置的单位,此处单位是mil。导线线宽最小为10mil;不同网络元素之间最小间距为8mil;孔外径为24mil,孔内径为12mil;线长不做
    发表于 01-11 06:14

    IAR环境如何将数学函式库编排到sLib保护区

    IAR环境如何将数学函式库编排到sLib保护区在IAR 环境下,如何将数学函式库编排到SLIB 保护区?
    发表于 10-20 07:03

    基于规则的RADIUS Server设计与实现

             本文在分析RADIUS 协议原理基础上,给出了一种基于规则的RADIUS Server 的设计方案和实现策略,规则的引入可以很方便在规则
    发表于 09-14 08:20 23次下载

    LCD汉字编排软件

    LCD汉字编排软件LCD汉字编排软件LCD汉字编排软件LCD汉字编排软件
    发表于 12-28 14:31 7次下载

    PCB设计的规则流程及注意事项介绍

    PCB设计规则、层定义、过孔设置、CAM输出设置已经作成缺省启动文件,名称为Default.stp,网表输入进来以后,按照设计的实际情况,把电源网络和地分配给电源层和地层,并设置其它高级规则。在所
    发表于 04-30 12:00 5782次阅读

    基于网络切片的无线虚拟化带宽资源编排算法

    为在无线虚拟化环境下进行高效的带宽资源分配,研究基于增强型移动宽带(eMBB)与高可靠低时延通宽资源编排问题型网络,将带宽资源编排冋题简化为带宽资源分配冋题并给出全局对大型网络,结宽资源编排问题转化
    发表于 05-25 15:09 2次下载

    基于多云网络架构的应用编排混合部署研究

    基于多云网络架构的应用编排混合部署研究
    发表于 06-30 15:50 4次下载

    AD16_PCB全流程#04——规则设计

    #04——规则设计规则设计#04——规则设计1.间距设置2.线宽设置3.电源线宽设置4.过孔设置5.铺铜设置6.丝印设置1.间距设置2.线宽设置3.电源线宽设置4.过孔设置5.铺铜设置6.丝印设置
    发表于 11-06 17:21 52次下载
    AD16_PCB全<b class='flag-5'>流程</b>#04——<b class='flag-5'>规则</b>设计

    详解Xpedition规则驱动设计

    本期Xpedition入门指南进行规则的设置,规则设置贯穿在全流程当中,比如原理图设计阶段就可以进行规则的设计,布局布线阶段可详细设计高速规则
    的头像 发表于 04-29 13:35 1.2w次阅读

    算力网络——编排管理关键威廉希尔官方网站

      面对高复杂度的算网环境,以及按需定制、灵活高效的需求特性,在编排管理层需构建一体编排 、融数注智的 “算网大脑”。通过引入一体编排、算力解构、泛在调度等威廉希尔官方网站 ,协同调度算网各域资源。同时与AI
    发表于 05-24 16:35 1次下载
    算力网络——<b class='flag-5'>编排</b>管理关键威廉希尔官方网站

    面向UltraScale+的隔离设计流程(IDF)规则/指南

    电子发烧友网站提供《面向UltraScale+的隔离设计流程(IDF)规则/指南.pdf》资料免费下载
    发表于 09-13 11:36 0次下载
    面向UltraScale+的隔离设计<b class='flag-5'>流程</b>(IDF)<b class='flag-5'>规则</b>/指南

    Bamboo-pipeline:Python高效流程编排引擎

    Bamboo-pipeline 是蓝鲸智云旗下SaaS标准运维的流程编排引擎。其具备以下特点: 多种流程模式 :支持串行、并行,支持子流程,可以根据全局参数自动选择分支执行,节点失败处
    的头像 发表于 10-31 16:39 1003次阅读
    Bamboo-pipeline:Python高效<b class='flag-5'>流程</b><b class='flag-5'>编排</b>引擎

    行云流水线 满足你对工作流编排的一切幻想~skr

    的核心组成部分,旨在加速软件交付、提高质量和实现持续改进。流水线的核心是流水线模型,是实现工作流编排,执行的重要基石,一个优秀的流水线模型可以覆盖用户更多的实践场景,按照用户的所思所想支持编排相应的工作流程,通过模型的分层设计,
    的头像 发表于 08-05 13:42 279次阅读