知识卡片
KV天生对分布式友好、事务是分布式数据库最难的部分
内容
回顾MySQL从单机到分库分表、Redis从单机到Codis再到RebornDB这两条演进路线,可以看到一个共同的底层规律:Key-Value这种存储模型天生对分布式友好,因为每个key的读写大多可以独立路由、独立完成,不需要跨节点协调;而真正让分布式数据库变得困难的,从来不是”怎么把数据分散存到多台机器上”,而是”怎么在数据分散之后,还能保证跨key、跨节点操作的事务语义”——MySQL分库分表之后最先牺牲掉的就是跨库事务和跨库JOIN,Redis分布式化之后同样牺牲了MSET/MGET的原子性(见[[分布式场景下MSET失去原子语义与hashtag解决多key路由]])。这不是某个具体产品设计得不够好,而是CAP定理在工程实践中的直接体现:想要保留强一致的跨节点事务,就必须为此支付协调开销和可用性代价,几乎没有分布式存储系统能在保持KV模型简单性的同时,无代价地保留单机时代的完整事务能力。理解这条规律的意义在于,评估任何一个新的分布式存储方案时,第一个该问的问题不是它的吞吐或延迟数字,而是它在”事务能力”这个维度上到底做了什么取舍、放弃了什么——这决定了它能不能承载对一致性要求高的业务场景。
参考来源
- 位置:《高可用架构(第1卷)》第2章《高可用架构原理与分布式实践》"2.1 Codis作者细说分布式Redis架构设计"节,"2.1.4 分布式数据库的现状和未来"(源文件:_epub-src/OEBPS/Text/Chapter2_1_5.xhtml)
- 结论依据:原文说明"无论是MySQL的分库分表,还是Redis的分布式方案,都是先做简单的KV存储的分布式,而事务是分布式数据库里最难解决的问题",直接支撑本卡片结论。
- 原始内容:KV这种模型天生就比较适合做分布式……无论是MySQL的分库分表,还是Redis到Codis、RebornDB的演进,走的都是先把简单的KV存储做分布式化这条路,而事务才是分布式数据库里最难解决的问题。