動手擼一個規則引擎(二):方案解析

寫在前面

規則引擎能夠搞啥?通常使用場景,是經過可視化節目進行拖拉或者簡單的操做指定流程和規則,將規則輸入獲得目標輸出。性能

交易系統中的規則引擎

規則編排的過程是各類條件的組合,相似於搭積木,指定邏輯規則,細化邏輯因子,好比指定選人規則,一個用戶id進來以後根據指定的不一樣邏輯規則獲得該用戶能夠發的券集合。一樣能夠用來篩選商品,篩選營銷規則等。編碼

在交易系統中主要是和用戶和營銷策略相關,好比根據歷史訂單,是否會員信息,是否門店新老客等規則因子,組合規則因子,也就是指定決策邏輯。動態的去響應不一樣用戶的不一樣策略。3d

規則引擎的難點

規則引擎的難點在於:規則的易變和定製化。blog

規則每每處於熱更新的狀態,在產品決策過程當中由於ABTest等緣由,可能隨時調整規則。同時一套營銷規則可能由於用戶畫像不一樣致使千人前面的策略,有必定的定製特色。產品

在沒有規則引擎以前,系統實現規則引擎通常採用硬編碼,if/else登方式。哪怕是將規則相關邏輯單獨抽離到規則模塊,代碼規則實現存在硬編碼難以熱更新的問題依然存在。可視化

可是硬編碼並不是一無可取,較粗粒度的規則仍是須要固化到系統中,這樣能夠達到更好封裝和抽象的目的,下降必定的迭代成本。配置

規則引擎系統

規則引擎被定義爲系統中的一組規則組件,能夠將業務邏輯和決策邏輯進行拆分,抽離出來。im

規則引擎的關鍵詞:d3

  • 實事:用戶的輸入信息爲實事
  • 規則:定製化的業務規則邏輯
  • 結果:規則加工和執行以後產生的結果

爲更好的固化和沉澱一部分規則到系統中,咱們通常創建一套規則管理系統,以可視化方式提供給使用方,在可視化界面操做規則編排,規則的變動最好加上版本,以區分和熱更新,避免硬切規則形成的數據不一致狀況,能夠平滑過分到下一個規則中。數據

規則引擎的難點在於,對於配置化的規則進行系統性的解析和業務邏輯的執行,當咱們經過存儲系統對規則進行存儲以後,在將規則以原子性的方式拉取出來後,執行規則便成了比較複雜的地方了,通常能夠採用Drools,Aviator等三方引擎,也能夠本身定製。

  • Drools:適用於風控金融,用起來比較複雜
  • Grovvy,JPython:能夠嵌入到系統中進行邏輯執行,可是性能存在考量空間
相關文章
相關標籤/搜索