分布式是谁提出的
2023年8月DTCC上的分享,主题为“第三代分布式数据库”的内容,涵盖了三个关键方面,如图1所示。
图1:第三代分布式数据库内容大纲
一、数据库的历史告诉我们什么
数据库发展至今已有70年,期间涌现出各种技术和事件,丰富多彩。如图2所示,一些重要的标志件引领了数据库技术的产生、发展和繁荣。
在这70年中,分布式数据库随着数据库技术一同发展。回顾历史,我们可以看到分布式数据库经历了两个阶段。
第一阶段是“研究时代”,这个时代是数据库、分布式数据库概念提出和原型实现阶段(20世纪60年代到90年代末)。研究者们几乎并行地对单机数据库系统和分布式数据库系统进行了系统化的研究和探索(分布式数据库基于大量的单机数据库系统的研究成果)。这个阶段的分布式数据库以松耦合的方式,在同构或异构的单机数据库的基础上,诞生了分布式查询优化、分布式事务的2PC(跨机分布式事务,确保提交操作的原子性)等技术。这一阶段的研究主要侧重于理论,并未完全进入大规模实用阶段,尚未解决数据的正确性、扩展性、可用性、事务一致性等重要问题。
第二阶段是“海量数据时代”,这个阶段是实用化阶段(20世纪90年代到21世纪20年代初)。分布式数据库真正进入一个实用阶段,数据量式增长的应用需求推动下,分布式数据库从理论进入实践阶段。典型的标志性技术/事件有三个,标志着分布式数据库系统成熟。
这个阶段的产品虽然开始进入大规模实用阶段,但仍然存在一些不足之处。未能100%解决数据的正确性,事务层面未能实现极致的水平扩展弹性,更未能在极高性能背景下同时实现100%的数据的正确性。
图2:数据库发展历史与分布式数据库前两个阶段的标志事件
二、我们的问题与思考
目前,第二代分布式数据库已经日渐成熟,且有了较多的应用。那么,下一代数据库产品会长成什么样子?
为了探讨下一代数据库的核心特征,我们深入思考了:数据库的根本是什么?是什么从数据库最深处最强烈地推动了数据库技术向前发展?
长期使用第一代和第二代数据库产品,被现有知识体系熏陶而迷醉,被现实环境包围而纵使有太多无奈。我们或许曾困惑于这些问题。
在迷雾中,我们需要不忘初心方得始终——回顾事务型数据库的初衷与本质。我们会发现,纵使70年的长发展史,数据库居然未完美解决其最核心的几个问题!
“三高一易”(高可靠、高可用、高性能、易用性)是数据库的核心特征概括。当我们回顾其发展历史时,会蓦然发现——数据库的基本问题:正确性、易用性——尚未完美解决。解决其基本动力正是数据库发展的核心。
第一个问题,数据的正确性:事务处理技术之所以重要,其核心就在于保障两点,即在并发操作作用下,数据能正确性能被保证的获得高的并发性能。数据正确性和数据库高性能在数据库层面完美解决了吗?答案是:没有!
在事务处理技术方面,分布式数据库的前两个时代可以称之为“踢球给用户”时代。所有的数据库产品都是一个半成品,没有真正做到“把复杂留给自己,把简单交付用户”。
为什么这样说?因为:(1)数据异常有多少个不清楚;(2)数据库一致性的定义有多种,每种之间定义不同;(3)在分布式环境下,CAP的C和ACID的C遇到一起会发生什么事情,不能说明白;(4)事务级高可用的解决方案尚未明确。
第二个问题,数据库的性能(和数据正确性):在数据库圈有一些“习惯成自然”的怪圈,使得我们的认知停留在一个错误的圈子里不自知。例如,常有人说“数据库的隔离级别设置为RC足够了”!可是为什么足够了呢?因为他们觉得RC级别下数据库性能好。如图4所示,用户在应用中主动加锁会导致数据库系统性能严重下降。
第三个问题,数据库的易用性:用户的期望和现实完全背离。数据库的易用性是一个巨大的现实问题。用户使用任何一个软件都期望软件极其易用甚至是傻瓜式。数据库能满足这样的基本需求吗?不能!数据库的易用性差表现在很多方面,如图3右部分所示。
图3:用户在应用中主动加锁导致数据库性能下降严重
小结:我们认为第二代分布式数据库系统已经成型。前两代的发展虽然历尽艰辛,但发展初期一直处于懵懂状态。现在,是时候请用户把球回传给数据库研发人员了(既要又要、有预期有目标的时代来临)。