知识卡片
SMC定理与"系统层重复换业务层不丢不重"
内容
SMC定理(Single-Message Communication,发表于IEEE Transactions on Communications)给出了一个消息传递领域的理论上界:任何端到端的消息传递协议,都不可能同时做到”消息既不丢失也不重复”——这是一个类似CAP定理的根本性约束,不是工程实现不够好导致的,而是协议本身的数学性质决定的。既然”零丢失+零重复”在理论上不可兼得,[[IM系统区别于普通Web系统的四大特性]]中的消息可达性问题,实践中普遍采用的策略是主动放弃”零重复”、保住”零丢失”:在系统传输层允许消息偶尔重复送达(比如客户端没有及时确认,服务端做超时重传),但通过给每条消息分配唯一ID,在业务层做去重处理,让最终呈现给用户的效果依然是”消息不丢、也不会重复显示”。这个思路的普遍价值在于,当一个约束在理论上被证明不可能同时满足时,正确的做法不是徒劳地想办法同时满足它,而是想清楚哪个方向的失败对业务的伤害更小(丢消息比重复消息更难被用户接受和修复),主动选择在可控的地方妥协(系统层允许重复),再用另一层机制(业务层去重)把可控的妥协转化成用户无感知的结果。
参考来源
- 位置:《高可用架构(第1卷)》第2章《高可用架构原理与分布式实践》"2.4 从零开始搭建高可用IM系统"节,"2.4.1 什么是IM"(源文件:_epub-src/OEBPS/Text/Chapter2_4_2.xhtml)
- 结论依据:原文引用SMC定理"任何端到端的消息传递协议,消息不可能既不丢失也不重复",并说明"系统层面的重复可以换取业务层面的不丢失和不重复",直接支撑本卡片结论。
- 原始内容:有一个著名的定理:SMC定理……文章的结论是,任何端到端的消息传递协议,消息不可能既不丢失也不重复。后续会分享,系统层面的重复可以换取业务层面的不丢失和不重复。