場景
業務風控,主要是下單、支付、優惠券、紅包、簽到等行為的風險控制,對抗的風險行為包括黃牛刷單、惡意占用庫存、機器領券、擼羊毛等。
轉賬例子
- 賬戶的信用等級,不同等級的賬戶每筆轉賬的最大金額不同
- 記錄轉賬明細
比如一個“人”,除了有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這塊可以采用泛化調用