国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

風控系統就該這么設計穩的一批!

jf_ro2CN3Fa ? 來源:芋道源碼 ? 2023-01-30 09:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

12ab472e-a03d-11ed-bfe3-dac502259ad0.jpg

一、背景

1.為什么要做風控?

這不得拜產品大佬所賜

目前我們業務有使用到非常多的AI能力,如ocr識別、語音測評等,這些能力往往都比較費錢或者費資源,所以在產品層面也希望我們對用戶的能力使用次數做一定的限制,因此風控是必須的!

2.為什么要自己寫風控?

那么多開源的風控組件,為什么還要寫呢?是不是想重復發明輪子呀.12d2b32c-a03d-11ed-bfe3-dac502259ad0.jpg

要想回答這個問題,需要先解釋下我們業務需要用到的風控(簡稱業務風控),與開源常見的風控(簡稱普通風控)有何區別:

12dbbc42-a03d-11ed-bfe3-dac502259ad0.png

因此,直接使用開源的普通風控,一般情況下是無法滿足需求的

3.其它要求

支持實時調整限制

很多限制值在首次設置的時候,基本上都是拍定的一個值,后續需要調整的可能性是比較大的,因此可調整并實時生效是必須的

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

二、思路

要實現一個簡單的業務風控組件,要做什么工作呢?

1.風控規則的實現

a.需要實現的規則:

  • 自然日計數
  • 自然小時計數
  • 自然日+自然小時計數

自然日+自然小時計數 這里并不能單純地串聯兩個判斷,因為如果自然日的判定通過,而自然小時的判定不通過的時候,需要回退,自然日跟自然小時都不能計入本次調用!

b.計數方式的選擇:

目前能想到的會有:

  • mysql+db事務 持久化、記錄可溯源、實現起來比較麻煩,稍微“重”了一點
  • redis+lua 實現簡單,redis的可執行lua腳本的特性也能滿足對“事務”的要求
  • mysql/redis+分布式事務 需要上鎖,實現復雜,能做到比較精確的計數,也就是真正等到代碼塊執行成功之后,再去操作計數

目前沒有很精確技術的要求,代價太大,也沒有持久化的需求,因此選用 redis+lua 即可

2.調用方式的實現

a.常見的做法 先定義一個通用的入口

//簡化版代碼

@Component
classDetectManager{
funmatchExceptionally(eventId:String,content:String){
//調用規則匹配
valrt=ruleService.match(eventId,content)
if(!rt){
throwBaseException(ErrorCode.OPERATION_TOO_FREQUENT)
}
}
}

在service中調用該方法

//簡化版代碼

@Service
classOcrServiceImpl:OcrService{

@Autowired
privatelateinitvardetectManager:DetectManager

/**
*提交ocr任務
*需要根據用戶id來做次數限制
*/
overridefunsubmitOcrTask(userId:String,imageUrl:String):String{
detectManager.matchExceptionally("ocr",userId)
//doocr
}

}

有沒有更優雅一點的方法呢? 用注解可能會更好一點(也比較有爭議其實,這邊先支持實現)

由于傳入的 content 是跟業務關聯的,所以需要通過Spel來將參數構成對應的content

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

三、具體實現

1.風控計數規則實現

a.自然日/自然小時

自然日/自然小時可以共用一套lua腳本,因為它們只有key不同,腳本如下:

//lua腳本
localcurrentValue=redis.call('get',KEYS[1]);
ifcurrentValue~=falsethen
iftonumber(currentValue)tonumber(ARGV[1])then
returnredis.call('INCR',KEYS[1]);
else
returntonumber(currentValue)+1;
end;
else
redis.call('set',KEYS[1],1,'px',ARGV[2]);
return1;
end;

其中 KEYS[1] 是日/小時關聯的key,ARGV[1]是上限值,ARGV[2]是過期時間,返回值則是當前計數值+1后的結果,(如果已經達到上限,則實際上不會計數)

b.自然日+自然小時 如前文提到的,兩個的結合實際上并不是單純的拼湊,需要處理回退邏輯

//lua腳本
localdayValue=0;
localhourValue=0;
localdayPass=true;
localhourPass=true;
localdayCurrentValue=redis.call('get',KEYS[1]);
ifdayCurrentValue~=falsethen
iftonumber(dayCurrentValue)tonumber(ARGV[1])then
dayValue=redis.call('INCR',KEYS[1]);
else
dayPass=false;
dayValue=tonumber(dayCurrentValue)+1;
end;
else
redis.call('set',KEYS[1],1,'px',ARGV[3]);
dayValue=1;
end;

localhourCurrentValue=redis.call('get',KEYS[2]);
ifhourCurrentValue~=falsethen
iftonumber(hourCurrentValue)tonumber(ARGV[2])then
hourValue=redis.call('INCR',KEYS[2]);
else
hourPass=false;
hourValue=tonumber(hourCurrentValue)+1;
end;
else
redis.call('set',KEYS[2],1,'px',ARGV[4]);
hourValue=1;
end;

if(notdayPass)andhourPassthen
hourValue=redis.call('DECR',KEYS[2]);
end;

ifdayPassand(nothourPass)then
dayValue=redis.call('DECR',KEYS[1]);
end;

localpair={};
pair[1]=dayValue;
pair[2]=hourValue;
returnpair;

其中 KEYS[1] 是天關聯生成的key, KEYS[2] 是小時關聯生成的key,ARGV[1]是天的上限值,ARGV[2]是小時的上限值,ARGV[3]是天的過期時間,ARGV[4]是小時的過期時間,返回值同上

這里給的是比較粗糙的寫法,主要需要表達的就是,進行兩個條件判斷時,有其中一個不滿足,另一個都需要進行回退.

2.注解的實現

a.定義一個@Detect注解

@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FUNCTION,AnnotationTarget.CLASS)
annotationclassDetect(

/**
*事件id
*/
valeventId:String="",

/**
*content的表達式
*/
valcontentSpel:String=""

)

其中content是需要經過表達式解析出來的,所以接受的是個String

b.定義@Detect注解的處理類

@Aspect
@Component
classDetectHandler{

privatevallogger=LoggerFactory.getLogger(javaClass)

@Autowired
privatelateinitvardetectManager:DetectManager

@Resource(name="detectSpelExpressionParser")
privatelateinitvarspelExpressionParser:SpelExpressionParser

@Bean(name=["detectSpelExpressionParser"])
fundetectSpelExpressionParser():SpelExpressionParser{
returnSpelExpressionParser()
}

@Around(value="@annotation(detect)")
funoperatorAnnotation(joinPoint:ProceedingJoinPoint,detect:Detect):Any?{
if(detect.eventId.isBlank()||detect.contentSpel.isBlank()){
throwillegalArgumentExp("@Detectconfigisnotavailable!")
}
//轉換表達式
valexpression=spelExpressionParser.parseExpression(detect.contentSpel)
valargMap=joinPoint.args.mapIndexed{index,any->
"arg${index+1}"toany
}.toMap()
//構建上下文
valcontext=StandardEvaluationContext().apply{
if(argMap.isNotEmpty())this.setVariables(argMap)
}
//拿到結果
valcontent=expression.getValue(context)

detectManager.matchExceptionally(detect.eventId,content)
returnjoinPoint.proceed()
}
}

需要將參數放入到上下文中,并起名為arg1arg2....

四、測試一下

1.寫法

使用注解之后的寫法:

//簡化版代碼

@Service
classOcrServiceImpl:OcrService{

@Autowired
privatelateinitvardetectManager:DetectManager

/**
*提交ocr任務
*需要根據用戶id來做次數限制
*/
@Detect(eventId="ocr",contentSpel="#arg1")
overridefunsubmitOcrTask(userId:String,imageUrl:String):String{
//doocr
}

}

2.Debug看看

12e43304-a03d-11ed-bfe3-dac502259ad0.jpg
  • 注解值獲取成功
  • 表達式解析成功


審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • AI
    AI
    +關注

    關注

    91

    文章

    39793

    瀏覽量

    301429
  • 開源
    +關注

    關注

    3

    文章

    4207

    瀏覽量

    46144
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    73974

原文標題:風控系統就該這么設計(萬能通用),穩的一批!

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    MEMS硅麥克為何能坐TWS真無線立體聲耳機市場C位?

    麥克,成為中高端藍牙耳機的標配,而在國產替代浪潮中,華芯邦科技正憑借領先的技術實力,成為國內耳機品牌的首選硅麥供應商。 、技術革命:硅麥克如何顛覆傳統拾音方案? 硅麥克全稱微機
    的頭像 發表于 02-27 17:35 ?54次閱讀

    測徑儀界的“抗造擔當”,高溫測,精度為王!

    構成測量儀的智能防護網。 高溫測,精度為王 目前藍鵬測控的各種測徑儀都支持產品定制,自主研發光電測頭采用全數字化高頻測量技術,測量頻率高達2000Hz,采用CCD成像技術和物方遠心光路系統般測徑
    發表于 12-01 15:26

    上能電氣新一批儲能產品啟程東歐市場

    近日,上能電氣新一批儲能產品再次裝車啟程,發往東歐各國。持續的發貨與交付正是上能電氣在東歐儲能市場加速深耕的真實寫照,也進步鞏固了其在全球光儲領域的領先地位。
    的頭像 發表于 11-07 10:52 ?762次閱讀

    一批智能體開發者的生存境況

    中國第一批智能體開發者的生存模式,比起硅谷同行,要更復雜
    的頭像 發表于 09-05 11:29 ?3137次閱讀
    第<b class='flag-5'>一批</b>智能體開發者的生存境況

    舜宇新獲一批車載光學鏡頭專利授權

    近日,舜宇集團自主研發的一批車載光學鏡頭類專利獲得授權。本專利對應的光學鏡頭通過優化設置各透鏡的形狀、光焦度等方面,圍繞高溫穩定性、小型化等核心特性,使車載攝像頭在 800 萬像素及以上分辨率下仍能保持優異的成像質量。
    的頭像 發表于 08-06 16:06 ?960次閱讀

    友道智途獲頒上海市新一批智能網聯汽車示范運營牌照

    2025年7月26日,中國商用車自動駕駛發展迎來個具有分水嶺意義的時刻。在2025世界人工智能大會上,洋山港智能重卡獲頒了新一批智能網聯汽車示范運營牌照(商用領域全國首例),這意味著全國第一批基于法規的主駕無人的智能重卡即將商
    的頭像 發表于 07-31 15:39 ?1264次閱讀

    智己汽車獲得上海市新一批智能網聯汽車示范運營牌照

    近日,在2025世界人工智能大會(WAIC 2025)上,智己汽車與享道出行、強生出租組成聯合體,率先獲得上海市新一批智能網聯汽車示范運營牌照。這不僅是對智己汽車L4級自動駕駛技術實力和安全可靠
    的頭像 發表于 07-31 15:38 ?1116次閱讀

    開放原子開源基金會與新一批開源項目完成捐贈簽約

    近日,在2025開放原子開源生態大會開幕式上,開放原子開源基金會與新一批開源項目完成捐贈簽約,涵蓋人工智能、具身智能、基礎軟件、區塊鏈等多個技術領域,為基金會拓展在關鍵技術領域上的布局。這些項目豐富和完善了開源生態核心技術,構建“工具-技術-場景”閉環。
    的頭像 發表于 07-28 17:04 ?1004次閱讀

    中汽中心獲多個中試驗證平臺

    中試驗證平臺是科技創新和產業創新的重要紐帶,是提高科技成果轉化效能、推動科技創新和產業創新融合發展的重要載體,《中共中央關于進步全面深化改革 推進中國式現代化的決定》中明確提出“加快布局建設一批
    的頭像 發表于 07-23 16:24 ?1200次閱讀

    華興變壓器:絕緣壽命預測為何這么難?

    您在使用華興變壓器時,是不是也在疑惑:三相隔離變壓器的絕緣壽命預測咋就這么難呢?這可困擾著不少企業。先看絕緣材料的個體差異。即便是同一批次生產的絕緣材料,由于原材料微小雜質、生產時的溫度濕度波動
    的頭像 發表于 07-11 11:24 ?501次閱讀
    華興變壓器:絕緣壽命預測為何<b class='flag-5'>這么</b>難?

    喜訊!美能光伏研發總監-楊暢入選 2025 年第一批東吳科技領軍人才計劃擬立項名單

    ,蘇州市吳中區官方發布《關于對2025年第一批東吳科技領軍人才計劃擬立項項目名單的公示》,美能光伏研發總監楊暢榮耀入選擬立項名單,這既是對其個人專業能力與科研貢獻的高度認可,也是對美
    的頭像 發表于 07-10 09:03 ?1560次閱讀
    喜訊!美能光伏研發總監-楊暢入選 2025 年第<b class='flag-5'>一批</b>東吳科技領軍人才計劃擬立項名單

    鐳神智能入選2025年廣東省 “機器人+” 典型應用場景案例名單(第一批

    領導小組辦公室發布了《關于2025年廣東省“機器人+”典型應用場景案例名單(第一批)的公示》。在此次公示中,經過專家團隊的嚴格評審,鐳神智能3DSLAM無人叉車智能搬運、智能倉儲物流應用,
    的頭像 發表于 07-04 11:53 ?888次閱讀
    鐳神智能入選2025年廣東省 “機器人+” 典型應用場景案例名單(第<b class='flag-5'>一批</b>)

    中科采象振動及噪聲信號采集儀入選合肥市2025年度第一批“三新”產品

    近日,合肥市科技局公示了合肥市2025年度第一批新技術新產品新模式(“三新”)名單,中科采象自主研發的振動及噪聲信號采集儀產品成功入選。合肥市新技術新產品新模式(簡稱“三新”產品):是指在合肥市研發
    的頭像 發表于 07-01 09:26 ?1029次閱讀
    中科采象振動及噪聲信號采集儀入選合肥市2025年度第<b class='flag-5'>一批</b>“三新”產品

    同星智能入選 “新質企業”第一批種子企業名單

    近日,中國生產力促進中心協會正式公布“新質企業”第一批種子企業入庫名單。此次評選基于企業創新能力、產業價值、數字化能力、成長性、可持續性五大核心指標,旨在培育現代化產業體系中的標桿企業,推動新質
    的頭像 發表于 04-03 20:03 ?718次閱讀
    同星智能入選 “新質企業”第<b class='flag-5'>一批</b>種子企業名單

    江西薩瑞微電子榮獲2025年第一批次“數智工廠”企業稱號

    熱烈祝賀江西省工業和信息化廳正式公布2025年第一批次“數智工廠”企業名單,江西薩瑞微電子技術有限公司憑借在半導體集成電路領域的數字化創新與智能制造實力,成功入選。上下滑動,查看更多“數智工廠
    的頭像 發表于 03-20 11:46 ?961次閱讀
    江西薩瑞微電子榮獲2025年第<b class='flag-5'>一批</b>次“數智工廠”企業稱號