規則引擎

場景

業務風控,主要是下單、支付、優惠券、紅包、簽到等行為的風險控制,對抗的風險行為包括黃牛刷單、惡意占用庫存、機器領券、擼羊毛等。

轉賬例子

  • 賬戶的信用等級,不同等級的賬戶每筆轉賬的最大金額不同
  • 記錄轉賬明細

比如一個“人”,除了有id、姓名、性別這些屬性外,還應該有“走路”、“吃飯”等這些行為,這些行為是天然屬于“人”這個實體的,而我們定義的bean都是一種“失血模型”,只有get/set等簡單方法,所有的行為邏輯全部上升到了service層,這就導致了service層過于臃腫,并且很難復用已有的邏輯,最后形成了各個service之間錯綜復雜的關聯關系,在做服務拆分的時候,很難劃清業務邊界,導致服務化進程陷入泥潭。

對應上面的問題,我們可以在Account這個實體中加入本應該就屬于這個實體的行為,比如借記、貸記、轉賬等。每一筆轉賬都對應著一筆交易明細,我們根據交易明細可以計算出賬戶的余額,這個是一個潛在的業務規則,這種業務規則都需要交由實體本身來維護。
另外新增賬戶信用實體,提供賬戶單筆轉賬的最大金額計算邏輯。這樣我們就把原本全部在service里面的邏輯劃入到不同的負責相關職責的“領域對象”當中了,service的邏輯變得非常清楚明了,想實現A給B轉賬,直接獲取A實體,然后調用A實體中的轉賬方法即可。service將不再關注轉賬的細節,只負責將相關的實體組織起來,完成復雜的業務邏輯處理。

規則引擎

規則引擎支持Drools和groovy腳本兩種方式。規則包括決策表(Decision table),通用規則,規則集和規則流。

使用插件的方式加載各種組件到上下文中,極大的方便了功能開發的靈活性。

使用預加載的方式加載已有的規則,并將加載后的對象緩存起來,每次規則變更時重新load整條規則,極大的提升了引擎的執行效率

計數器引入AtomicLongFieldUpdater工具類,來減少計數器的內存消耗

靈活的上下文使用方式,方便定制規則執行的流程(規則執行順序、同步異步執行、跳過某些規則、規則集短路等),靈活定義返回結果(可以返回整個上下文,可以返回每條規則的結果,也可以返回最后一條規則的結果),這些都可以通過設置上下文來實現。

指標存儲:redis/hbase
使用hbase的列族來實現滑動窗口的計算。

dubbo這塊可以采用泛化調用

Reference

網易考拉規則引擎平臺架構設計與實踐
為什么要用規則引擎?
規則引擎簡介

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容