知识卡片
安全系统的"有损一致性"设计哲学
内容
腾讯防刷系统的实时判定部分用C/C++开发,所有数据通过共享内存的方式存储——面对”多台机器共用共享内存,如何保障数据一致性”这个看似必须严肃对待的问题,腾讯给出的答案是:安全策略不需要做到强数据一致性,可以采用”有损”的思路来实现,这样能大大降低开发成本和难度。这个判断背后的逻辑是从安全问题本身的性质出发的:风险判定本质上是一个概率值,天然就是不确定的,所以即便存在一点数据不一致,也不影响全局的风控效果——一次风险判定用的是稍微过时几毫秒的画像数据,和用完全实时同步的数据相比,对最终”这个请求是不是异常”这个概率判断的影响微乎其微,但为了消除这几毫秒的不一致所需要付出的强一致性协议开销(比如分布式锁、两阶段提交)却相当可观。这条设计原理揭示了一般性的架构决策思路:一致性要求应该服务于业务本身对精确度的真实需要,而不是被默认拔到”越强越好”的标准——安全风控这类”结果本身就是概率判断”的场景,天然对轻微的数据不一致有容忍空间,用有损模型换取更简单的实现、更低的开发成本是合理的权衡。当然,”有损”不代表可以对系统的所有方面都放松要求——安全系统还有自己的特殊之处:突发流量往往很大,因此仍然需要设置各种应急开关,并且要支持通过微信、短信等方式快速远程切换,一旦系统本身出现异常,能第一时间把影响控制住、避免扩散到后端系统,这说明”放松一致性”和”保留应急止损手段”是两件不冲突、需要同时做到的事。
参考来源
- 位置:《高可用架构(第1卷)》第1章《高可用架构案例精选》"1.2 腾讯基于用户画像大数据的电商防刷架构"节,"1.2.5 腾讯大数据处理平台——魔方"(源文件:_epub-src/OEBPS/Text/Chapter1_2_6.xhtml)
- 结论依据:原文说明"对于数据一致性,多台机器使用共享内存,应如何保障数据一致性?其实,安全策略不需要做到强数据一致性。从安全本身的角度看,风险本身就是一个概率值,不能确定,所以有一点数据不一致,不影响全局",并补充"安全系统也有自己的特点,安全系统一般突发流量比较大,这里就需要设置各种应急开关",直接支撑本卡片结论。
- 原始内容:其实,安全策略不需要做到强数据一致性。从安全本身的角度看,风险本身就是一个概率值,不能确定,所以有一点数据不一致,不影响全局……这里就需要设置各种应急开关,而且需要微信号、短信等方式方便快速切换。