知识卡片
NoSQL的真正起源:分布式强一致事务因网络延迟导致性能不升反降,倒逼一批场景主动放弃事务和SQL
内容
NoSQL运动的真正驱动力,不是”关系数据库过时了”这种情绪化的判断,而是一个具体的技术困境:为了支撑云计算和互联网时代急剧增长的用户规模和数据量,业界必然要转向分布式数据库,但分布式系统天然要面对强一致性带来的延迟问题——因为跨节点的网络通信代价远高于单机内部通信,这份通信代价会直接拉长系统单次提交的延迟;而延迟一旦提高,数据库锁的持有时间也会跟着变长,导致在高冲突场景下,分布式事务的性能不仅没有随着分布式带来的水平扩展能力而提升,反而出现不升反降的局面,甚至明显落后于单机数据库。这不是因为分布式事务技术上做不出来(技术上是可以实现的),而是即使做出来了,因为性能太差,实际上也没什么实用价值——这个问题即使是数据库领域的顶尖专家们努力了40年,至今也没有很好地解决(比如Google Spanner的开发负责人也经常在博客里谈论这个延迟困扰)。正是在这个背景下,一批人转变思路:既然强一致性这条路走不通,那能不能干脆彻底绕开这个问题?他们发现确实存在一些场景(比如日志流水的记录和分析)本身并不需要强一致事务,甚至连SQL本身都可以不要——一旦去掉事务和SQL这两个负担最重的部分,接口变得简单,性能和扩展性反而都更容易实现,这正是NoSQL系统真正的起源。这个案例给出了一条理解技术运动兴起背后真实驱动力的方法:一场看似激进的技术转向(”抛弃SQL”),背后往往不是单纯的理念之争或者跟风炒作,而是源自对一个具体、真实存在的技术困境(强一致分布式事务的性能天花板)的务实回应——理解一项技术运动,应当去追问它到底在回避或解决什么真实的、具体的工程困境,而不是停留在口号和表面立场上做判断。
参考来源
- 位置:《高可用架构(第1卷)》第6章《大数据与数据库》"6.7 从NoSQL历史看未来"节,"6.7.4 2000年:No SQL"(源文件:_epub-src/OEBPS/Text/Chapter6_7_5.xhtml)
- 结论依据:原文说明"分布式系统又必然会面对强一致性所带来的延迟提高的问题……使得高冲突条件下分布式事务的性能不升反降……说了这么多我们可以发现问题的关键并不是分布式事务做不出来,而是做出来了却因为性能太差而没有用……去掉了事务和SQL,接口简单了,性能就更容易提升,扩展性也更容易实现,这就是NoSQL系统的起源",直接支撑本卡片结论。
- 原始内容:分布式系统又必然会面对强一致性所带来的延迟提高的问题……使得高冲突条件下分布式事务的性能不升反降……问题的关键并不是分布式事务做不出来,而是做出来了却因为性能太差而没有用……去掉了事务和SQL,接口简单了,性能就更容易提升,扩展性也更容易实现,这就是NoSQL系统的起源。