亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

不同規(guī)則引擎在核心編排上的優(yōu)缺點

電子工程師 ? 來源:OSC開源社區(qū) ? 作者:OSC開源社區(qū) ? 2022-08-08 15:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文主要介紹 ice 的核心編排思想,并與常見編排思想 (如 Drools/Activity 等) 做了比較。

背景介紹

業(yè)務(wù)中是否寫了大量的 if-else?是否受夠了這些 if-else 還要經(jīng)常變動?業(yè)務(wù)中是否做了大量抽象,發(fā)現(xiàn)新的業(yè)務(wù)場景還是用不上?是否各種調(diào)研規(guī)則引擎,發(fā)現(xiàn)不是太重就是接入或維護(hù)太麻煩,最后發(fā)現(xiàn)還是不如硬編碼?接下來給大家介紹一款全新的開源規(guī)則引擎 ——ice,以一個簡單的例子,從最底層的編排思想,闡述 ice 與其他規(guī)則引擎的不同;講述 ice 是如何使用全新的設(shè)計思想,契合解耦和復(fù)用的屬性,還你最大的編排自由度。規(guī)則引擎的應(yīng)用場景規(guī)則引擎在很多業(yè)務(wù)場景中都有應(yīng)用,例如:會員營銷:由多種條件、流程、獎勵組合而成,時間線復(fù)雜,代碼復(fù)用率不高,調(diào)整頻繁風(fēng)控規(guī)則:由多種條件組合并返回決策,條件量大且復(fù)雜,變動頻繁數(shù)據(jù)分析:將數(shù)據(jù)通過分析師自己編排的規(guī)則產(chǎn)出想要的數(shù)據(jù),千人千面以上場景往往都存在一些共同痛點:靈活業(yè)務(wù)(變動頻繁,時效性明顯,測試邏輯復(fù)雜)追求靈活花里胡哨:產(chǎn)品和運(yùn)營一直在探索新鮮玩法,導(dǎo)致很多抽象出來的模塊往往扛不過兩個迭代。今天上線又要調(diào)整:因為一些偶發(fā)情況,如線上用戶參與度不高,及時調(diào)整用戶參與門檻等(當(dāng)然也可以在開發(fā)前把所有情況考慮到位,但是為了小概率事件做大量的工作,成本過高)。研發(fā)測試心力交瘁:研發(fā)硬編碼,測試驗證復(fù)雜重復(fù)邏輯,久而久之變的愈發(fā)疲憊。時間線(多條時間線交織混亂)研發(fā)編排錯了再來:一般營銷類型的會涉及很多時間線,而在當(dāng)前,測試一個未來要上線的具有不同時間節(jié)點屬性的活動,硬編碼時往往由研發(fā)編排時間,測試進(jìn)行測試,但是當(dāng) bug 發(fā)生并打亂時間線時,就需要重新編排時間(沒有經(jīng)歷過的不用太了解,后面會說)。測試并行孔融讓梨:當(dāng)時間線發(fā)生沖突并有多個測試在沖突位置上并發(fā)測試,往往由測試自行協(xié)調(diào)測試順序,當(dāng)一方出現(xiàn)問題往往導(dǎo)致后續(xù)測試進(jìn)度不可控。其他問題依賴掛了難以為繼:測試環(huán)境為非穩(wěn)定環(huán)境,一旦依賴出了問題難免影響進(jìn)度,如何能做到簡單高效 mock?修復(fù)數(shù)據(jù)苦不堪言:當(dāng)線上問題產(chǎn)生時,受影響的客戶如何快速高效的補(bǔ)償?

ice 的設(shè)計思想

為了方便理解,設(shè)計思路將伴隨著一個簡單的充值例子展開。

舉例

X 公司將在國慶放假期間,開展一個為期七天的充值小活動,活動內(nèi)容如下:活動時間:(10.1-10.7)活動內(nèi)容:充值 100 元 送 5 元余額 (10.1-10.7)充值 50 元 送 10 積分 (10.5-10.7)活動備注: 不疊加送 (充值 100 元只能獲得 5 元余額,不會疊加贈送 10 積分)簡單拆解一下,想要完成這個活動,我們需要開發(fā)如下模塊:

9084c582-16c5-11ed-ba43-dac502259ad0.png

如上圖,當(dāng)用戶充值成功后,會產(chǎn)生對應(yīng)充值場景的參數(shù)包裹 Pack (類 Activiti/Drools 的 Fact),包裹里會有充值用戶的 uid,充值金額 cost,充值的時間 requestTime 等信息。我們可以通過定義的 key,拿到包裹中的值 (類似 map.get (key))。模塊怎么設(shè)計無可厚非,重點要講的是后面的怎么編排實現(xiàn)配置自由,接下來將通過已有的上述節(jié)點,講解不同的規(guī)則引擎在核心的編排上的優(yōu)缺點,并比較 ice 是怎么做的。

流程圖式實現(xiàn)

類 Activiti、 Flowable 實現(xiàn):

909baf9a-16c5-11ed-ba43-dac502259ad0.png

流程圖式實現(xiàn),應(yīng)該是我們最常想到的編排方式了~看起來非常的簡潔易懂,通過特殊的設(shè)計,如去掉一些不必要的線,可以把 UI 做的更簡潔一些。但由于有時間屬性,其實時間也是一個規(guī)則條件,加上之后就變成了:

90b2cab8-16c5-11ed-ba43-dac502259ad0.png

看起來也還好

執(zhí)行樹式實現(xiàn)

類 Drools 實現(xiàn) (When X Then Y):

90c6ae70-16c5-11ed-ba43-dac502259ad0.png

這個看起來也還好,再加上時間線試試:

90df289c-16c5-11ed-ba43-dac502259ad0.png

依舊比較簡潔,至少比較流程圖式,我會比較愿意修改這個。

計劃永遠(yuǎn)趕不上變化

上面兩種方案的優(yōu)點在于,可以把一些零散的配置結(jié)合業(yè)務(wù)很好的管理了起來,對配置的小修小改,都是信手拈來,但是真實的業(yè)務(wù)場景,可能還是要錘爆你,有了靈活的變動,一切都不一樣了。

理想

不會變的,放心吧,就這樣,上

現(xiàn)實

①充值 100 元改成 80 吧,10 積分變 20 積分吧,時間改成 10.8 號結(jié)束吧(微微一笑,畢竟我費了這么大勁搞規(guī)則引擎,終于體現(xiàn)到價值了?。谟脩魠⑴c積極性不高啊,去掉不疊加送吧,都送(稍加思索,費幾個腦細(xì)胞挪一挪還是可以的,怎么也比改代碼再上線強(qiáng)吧?。? 元余額不能送太多,設(shè)置個庫存 100 個吧,對了,庫存不足了充 100 元還是得送 10 積分的哈(卒… 早知道還不如硬編碼了)以上變動其實并非看起來不切實際,畢竟真實線上變動比這離譜的多的是,流程圖式和執(zhí)行樹式實現(xiàn)的主要缺點在于,牽一發(fā)而動全身,改動一個節(jié)點需要瞻前顧后,如果考慮不到位,很容易弄錯,而且這還只是一個簡單的例子,現(xiàn)實的活動內(nèi)容要比這復(fù)雜的多的多,時間線也是很多條,考慮到這,再加上使用學(xué)習(xí)框架的成本,往往得不償失,到頭來發(fā)現(xiàn)還不如硬編碼。怎么辦?

讓我們看看 ice 是怎么做的?

引入關(guān)系節(jié)點

關(guān)系節(jié)點為了控制業(yè)務(wù)流轉(zhuǎn)AND所有子節(jié)點中,有一個返回 false 該節(jié)點也將是 false,全部是 true 才是 true,在執(zhí)行到 false 的地方終止執(zhí)行,類似于 Java 的 &&ANY所有子節(jié)點中,有一個返回 true 該節(jié)點也將是 true,全部 false 則 false,在執(zhí)行到 true 的地方終止執(zhí)行,類似于 Java 的 ||ALL所有子節(jié)點都會執(zhí)行,有任意一個返回 true 該節(jié)點也是 true,沒有 true 有一個節(jié)點是 false 則 false,沒有 true 也沒有 false 則返回 none,所有子節(jié)點執(zhí)行完畢終止NONE所有子節(jié)點都會執(zhí)行,無論子節(jié)點返回什么,都返回 noneTRUE所有子節(jié)點都會執(zhí)行,無論子節(jié)點返回什么,都返回 true,沒有子節(jié)點也返回 true (其他沒有子節(jié)點返回 none)

引入葉子節(jié)點

葉子節(jié)點為真正處理的節(jié)點Flow一些條件與規(guī)則節(jié)點,如例子中的 ScoreFlowResult一些結(jié)果性質(zhì)的節(jié)點,如例子中的 AmountResult,PointResultNone一些不干預(yù)流程的動作,如裝配工作等,如下文會介紹到的 TimeChangeNone有了以上節(jié)點,我們要怎么組裝呢?

90ed85a4-16c5-11ed-ba43-dac502259ad0.png

如上圖,使用樹形結(jié)構(gòu) (對傳統(tǒng)樹做了鏡像和旋轉(zhuǎn)),執(zhí)行順序還是類似于中序遍歷,從 root 執(zhí)行,root 是個關(guān)系節(jié)點,從上到下執(zhí)行子節(jié)點,若用戶充值金額是 70 元,執(zhí)行流程:[ScoreFlow-100:false]→[AND:false]→[ScoreFlow-50:true]→[PointResult:true]→[AND:true]→[ANY:true]這個時候可以看到,之前需要剝離出的時間,已經(jīng)可以融合到各個節(jié)點上了,把時間配置還給節(jié)點,如果沒到執(zhí)行時間,如發(fā)放積分的節(jié)點 10.5 日之后才生效,那么在 10.5 之前,可以理解為這個節(jié)點不存在。

變化的靈活快速應(yīng)對

對于①直接修改節(jié)點配置就可以對于②直接把 root 節(jié)點的 ANY 改成 ALL 就可以 (疊加送與不疊加送的邏輯在這個節(jié)點上,屬于這個節(jié)點的邏輯就該由這個節(jié)點去解決)對于③由于庫存的不足,相當(dāng)于沒有給用戶發(fā)放,則 AmountResult 返回 false,流程還會繼續(xù)向下執(zhí)行,不用做任何更改再加一個棘手的問題,當(dāng)時間線復(fù)雜時,測試工作以及測試并發(fā)要怎么做?一個 10.1 開始的活動,一定是在 10.1 之前開發(fā)上線完畢,比如我在 9.15 要怎么去測試一個 10.1 開始的活動?在 ice 中,只需要稍微修改一下:

9106a1e2-16c5-11ed-ba43-dac502259ad0.png

如圖,引入一個負(fù)責(zé)更改時間的節(jié)點 TimeChangeNone (更改包裹中的 requestTime),后面的節(jié)點執(zhí)行都是依賴于包裹中的時間即可,TimeChangeNone 類似于一個改時間的插件一樣,如果測試并行,那就給多個測試每人在自己負(fù)責(zé)的業(yè)務(wù)上加上改時間插件即可。

ice 的特性

為什么這么拆解呢?為什么這樣就能解決這些變動與問題呢?其實,就是使用樹形結(jié)構(gòu)解耦,流程圖式和執(zhí)行樹式實現(xiàn)在改動邏輯的時候,不免需要瞻前顧后,但是 ice 不需要,ice 的業(yè)務(wù)邏輯都在本節(jié)點上,每一個節(jié)點都可以代表單一邏輯,比如我改不疊加送變成疊加送這一邏輯就只限制在那個 ANY 節(jié)點邏輯上,只要把它改成我想要的邏輯即可,至于子節(jié)點有哪些,不用特別在意,節(jié)點之間依賴包裹流轉(zhuǎn),每個節(jié)點執(zhí)行完的后續(xù)流程不需要自己指定。因為自己執(zhí)行完后的執(zhí)行流程不再由自己掌控,就可以做到復(fù)用:

91148d2a-16c5-11ed-ba43-dac502259ad0.png

如圖,參與活動這里用到的 TimeChangeNone,如果現(xiàn)在還有個 H5 頁面需要做呈現(xiàn),不同的呈現(xiàn)也與時間相關(guān),怎么辦?只需要在呈現(xiàn)活動這里使用同一個實例,更改其中一個,另一個也會被更新,避免了到處改時間的問題。同理,如果線上出了問題,比如 sendAmount 接口掛了,由于是 error 不會反回 false 繼續(xù)執(zhí)行,而是提供了可選策略,比如將 Pack 以及執(zhí)行到了哪個節(jié)點落盤起來,等到接口修復(fù),再繼續(xù)丟進(jìn) ice 重新跑即可 (由于落盤時間是發(fā)生問題時間,完全不用擔(dān)心活動結(jié)束了的修復(fù)不生效問題),同樣的,如果是不關(guān)鍵的業(yè)務(wù)如頭像服務(wù)掛了,但是依然希望跑起來,只是沒有頭像而已,這樣可以選擇跳過錯誤繼續(xù)執(zhí)行。這里的落盤等規(guī)則不細(xì)展開描述。同樣的原理也可以用在 mock 上,只需要在 Pack 中增加需要 mock 的數(shù)據(jù),就可以跑起來。

引入前置節(jié)點

9120a48e-16c5-11ed-ba43-dac502259ad0.png

上面的邏輯中可以看到有一些 AND 節(jié)點緊密綁定的關(guān)系,為了視圖與配置簡化,增加了前置 (forward) 節(jié)點概念,當(dāng)且僅當(dāng)前置節(jié)點執(zhí)行結(jié)果為非 false 時才會執(zhí)行本節(jié)點,語義與 AND 相連的兩個節(jié)點一致。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2819

    瀏覽量

    52623
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    1000

    瀏覽量

    56567
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3930

    瀏覽量

    45434
  • 數(shù)據(jù)分析
    +關(guān)注

    關(guān)注

    2

    文章

    1496

    瀏覽量

    35851

原文標(biāo)題:開源規(guī)則引擎-ice(致力于解決靈活繁復(fù)的硬編碼問題)

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    不同類型的自動化工具評估數(shù)據(jù)緩存效果時有哪些優(yōu)缺點

    評估數(shù)據(jù)緩存效果時,不同類型的自動化工具(實時監(jiān)控類、性能測試類、深度分析類、云原生專屬類)因設(shè)計目標(biāo)和技術(shù)特性不同,存在顯著的優(yōu)缺點差異。以下結(jié)合工具類型與具體場景,系統(tǒng)對比其核心優(yōu)劣勢,并給出
    的頭像 發(fā)表于 09-25 17:48 ?432次閱讀
    不同類型的自動化工具<b class='flag-5'>在</b>評估數(shù)據(jù)緩存效果時有哪些<b class='flag-5'>優(yōu)缺點</b>?

    商業(yè)云手機(jī)核心優(yōu)缺點分析

    商業(yè)云手機(jī)核心優(yōu)缺點分析,綜合技術(shù)性能、成本效率及場景適配性等多維度對比: 核心優(yōu)勢? 成本革命? 硬件零投入?:免除實體手機(jī)采購(旗艦機(jī)均價6000元),企業(yè)百臺規(guī)??墒?0萬+ CAPEX
    的頭像 發(fā)表于 06-16 08:11 ?598次閱讀
    商業(yè)云手機(jī)<b class='flag-5'>核心</b><b class='flag-5'>優(yōu)缺點</b>分析

    PCBA 表面處理:優(yōu)缺點大揭秘,應(yīng)用場景全解析

    一站式PCBA加工廠家今天為大家講講PCBA加工如何選擇合適的表面處理工藝?PCBA表面處理優(yōu)缺點與應(yīng)用場景。電子制造中,PCBA板的表面處理工藝對電路板的性能、可靠性和成本都有重要影響。選擇合適
    的頭像 發(fā)表于 05-05 09:39 ?1051次閱讀
    PCBA 表面處理:<b class='flag-5'>優(yōu)缺點</b>大揭秘,應(yīng)用場景全解析

    CMOS,Bipolar,F(xiàn)ET這三種工藝的優(yōu)缺點是什么?

    我用photodiode工具選型I/V放大電路的時候,系統(tǒng)給我推薦了AD8655用于I/V,此芯片為CMOS工藝 但是查閱資料很多都是用FET工藝的芯片,所以請教下用于光電信號放大轉(zhuǎn)換(主要考慮信噪比和帶寬)一般我們用哪種工藝的芯片, CMOS,Bipolar,F(xiàn)ET這三種工藝的
    發(fā)表于 03-25 06:23

    淺談汽車系統(tǒng)電壓優(yōu)缺點分析

    以下是12V、24V、48V系統(tǒng)的簡單介紹,包括技術(shù)特點、優(yōu)缺點及典型應(yīng)用場景。汽車電氣系統(tǒng)的發(fā)展隨著車輛電子設(shè)備的增多和對能效要求的提高,電壓等級也逐步提升,從傳統(tǒng)的12V電
    的頭像 發(fā)表于 03-06 08:04 ?1273次閱讀
    淺談汽車系統(tǒng)電壓<b class='flag-5'>優(yōu)缺點</b>分析

    惠斯通電橋的優(yōu)缺點分析

    惠斯通電橋作為一種經(jīng)典的電阻測量工具,具有其獨特的優(yōu)缺點。以下是對惠斯通電橋優(yōu)缺點的詳細(xì)分析: 優(yōu)點 高精度 : 惠斯通電橋通過比較電壓差來精確測量電阻值,對于微小的電阻變化也能迅速作出反應(yīng),因此
    的頭像 發(fā)表于 02-13 15:26 ?1787次閱讀

    硅谷物理服務(wù)器的優(yōu)缺點分析

    硅谷物理服務(wù)器因其高性能、高質(zhì)量和先進(jìn)的技術(shù)支持而在全球范圍內(nèi)享有很高的聲譽(yù)。硅谷物理服務(wù)器的優(yōu)缺點分析如下,主機(jī)推薦小編為您整理發(fā)布硅谷物理服務(wù)器的優(yōu)缺點分析。
    的頭像 發(fā)表于 02-12 09:30 ?509次閱讀

    香港主機(jī)托管和國內(nèi)主機(jī)的優(yōu)缺點比較

    香港主機(jī)托管和國內(nèi)主機(jī)(以大陸主機(jī)為例)的優(yōu)缺點比較,主機(jī)推薦小編為您整理發(fā)布香港主機(jī)托管和國內(nèi)主機(jī)的優(yōu)缺點比較,希望對您有幫助。
    的頭像 發(fā)表于 02-05 17:42 ?638次閱讀

    東京站群服務(wù)器有哪些優(yōu)缺點

    東京站群服務(wù)器,作為部署東京地區(qū)的服務(wù)器集群,專為站群優(yōu)化而建,其優(yōu)缺點如下,主機(jī)推薦小編為您整理發(fā)布東京站群服務(wù)器有哪些優(yōu)缺點。
    的頭像 發(fā)表于 02-05 17:39 ?555次閱讀

    光譜傳感器的優(yōu)缺點

    光譜傳感器是一種能夠檢測并響應(yīng)光譜范圍內(nèi)不同波長光線的傳感器。以下是對其優(yōu)缺點的詳細(xì)分析:
    的頭像 發(fā)表于 01-27 15:28 ?1147次閱讀

    zeta機(jī)器學(xué)習(xí)中的應(yīng)用 zeta的優(yōu)缺點分析

    探討ZETA機(jī)器學(xué)習(xí)中的應(yīng)用以及ZETA的優(yōu)缺點時,需要明確的是,ZETA一詞不同領(lǐng)域可能有不同的含義和應(yīng)用。以下是根據(jù)不同領(lǐng)域的ZETA進(jìn)行的分析: 一、ZETA
    的頭像 發(fā)表于 12-20 09:11 ?1525次閱讀

    SSM框架的優(yōu)缺點分析 SSM移動端開發(fā)中的應(yīng)用

    SSM框架的優(yōu)缺點分析 SSM框架,即Spring、Spring MVC和MyBatis的整合,是當(dāng)前比較流行的Java開源框架之一。以下是對SSM框架優(yōu)缺點的詳細(xì)分析: 優(yōu)點 成本低
    的頭像 發(fā)表于 12-16 18:18 ?2897次閱讀

    SMD與DIP元件的優(yōu)缺點比較 SMD元件LED燈具中的應(yīng)用

    SMD與DIP元件的優(yōu)缺點比較 SMD元件的優(yōu)缺點 優(yōu)點 : 體積小巧 :SMD(Surface Mount Device)元件的體積通常很小,這使得它們能夠在有限的空間內(nèi)安裝更多的元件,從而
    的頭像 發(fā)表于 12-13 09:38 ?1778次閱讀

    請問地震勘探上ADS1282與ADS1255相比有什么優(yōu)缺點?

    請問地震勘探上ADS1282與ADS1255相比有什么優(yōu)缺點
    發(fā)表于 11-22 07:06

    不同類型adc的優(yōu)缺點分析

    ADC(模數(shù)轉(zhuǎn)換器)是將模擬信號轉(zhuǎn)換為數(shù)字信號的電路,根據(jù)轉(zhuǎn)換原理和應(yīng)用需求的不同,ADC可以分為多種類型,每種類型都有其獨特的優(yōu)缺點,以下是對不同類型ADC的優(yōu)缺點分析: 逐次逼近型ADC(SAR
    的頭像 發(fā)表于 11-19 16:58 ?3526次閱讀