1、百万流量下的资损防控建设之路祝梦快手商业化营销投放质量测试负责人祝梦快手|商业化营销投放质量测试负责人14年IT从业经历,主要领域:测试开发架构、稳定性架设计、DevOps从业经历:ThoughtWorks-高级咨询师、DevOps专家阿里巴巴-淘宝 高级测试开发专家 快手-商业化营销投放质量测试负责人目录C O N T E N T S1.资损防控难点2.资损防控应对思路3.资金保障体系4.资损防控大模型探索资损防控难在哪里01快手商业化资金业务介绍 用户钱包扣款1分钱快手商业化资金业务介绍挑战挑战资金总额大资金总额大资金出口多资金出口多流量大流量大资损防控应对思路02资损防控应对思路抛个砖:
2、抛个砖:任务系统状态一致任务系统与发放系统一致发放权益明细的金额发放权益明细的币种发放权益明细的精度发放权益是否被核销排他权益是否保证互斥并发领取是否有锁,乐观锁还是悲观锁机制重领取是否保障了幂等发放事务是否是完整的如果服务端错误了,前端兜底页面是怎样的是否有资金回补机制,回补事务是如何的发放策略是否有资金预算,发放时是否超预算如果发错了,有没有降级、挽回手段资损防控关键风险应对数据一致表达一致配置准确其他数据链路上对资金记录一致如:非幂等提交、多扣少扣数据记录、披露表达一致如:数据库存储单位是厘,前端不作处理直接展示涉及资金的配置自身准确性如:资金分账比例配置错误,直接影响资金入账安全漏洞、
3、服务可用性如:非强校验场景被暴露、安全漏洞暴露资损防控关键风险应对自古以来,对于会计来说:自古以来,对于会计来说:我要知道我的钱是咋来的我要知道我的钱是咋来的也要知道我的钱是咋没的也要知道我的钱是咋没的资金记账最基础原则:资金记账最基础原则:有借必有贷有借必有贷,借贷必相等(余额一致原借贷必相等(余额一致原则)则)任何一笔经济业务的发生任何一笔经济业务的发生,都必然同时导致至少两个账户都必然同时导致至少两个账户发生变化发生变化在记入有关账户时在记入有关账户时,有的记入一个或几个账户的借方有的记入一个或几个账户的借方,同时同时有的记入另一个或几个账户的贷方。不能全部记入借方有的记入另一个或几个账
4、户的贷方。不能全部记入借方或全部记入贷方或全部记入贷方,即有借必有贷即有借必有贷记入借方账户的金额与记入贷方账户的金额必须相等记入借方账户的金额与记入贷方账户的金额必须相等资金保障体系03资损防控分阶段建设事前事中事后解决问题:架构设计代码架构设计业务合理性评估链路级风险评估。解决问题:监控发现对账能力建设对账与监控能力演练。解决问题:排查SOP止损SOP数据追回、回溯SOP。资损防控保障思路总纲保障思路:硬实力:事前预防事中发现事后快速止损(MTTR=Mean Time To Repair)软功力:资损防控意识无对账,不上线无对账,不上线资损防控:面向失败的业务与代码设计幂等技术架构业务设计
5、可隔离可熔断可对账可回溯表达一致安全设计变动留档账目友好资损防控第三步:资金表达一致书同文、车同轨、度量衡对1元钱的表存储:1.00 元100 分1000 厘。对1元钱的前端表达:x1 /100/1000.toFixed(2)。易资损点:后端单位和前端不一致运算精度丢失数据写错误、污染、无法回溯精度丢失,总账对不齐,缺失尾差操作1(SQL):UPDATE account SET balance=100 where account_id=101操作2(JAVA):double num1=0.1;double num2=0.2;double sum=num1+num2;幂等键设计验证:唯一性幂等组
6、合范围幂等使用范围。资损防控事前能力建设:专项测试ClientServer扣费申请1扣费申请2扣费成功1扣费失败2幂等key申请分布式存储lockconflictreleaseacquire幂等键使用测试:注入时延验收幂等冲突异常表达验收幂等释放验收。缺少了幂等,会造成双扣等资损现象资损防控事前能力建设:持续集成持续集成静态风险扫描规避代码风险+=常见资损的静态风险扫描:乐观锁累加直写精度丢失数据库写入不校验结果。资损防控事中能力建设:对账设计对账铺设对账有效性验证对账降噪资损防控事中能力建设:实时、离线对账实时对