1.3 一致性是这个考验的核心
前面提到的各种分布式系统有什么区别呢?一个重要的区别就体现在它们对SQL的支持上。NoSQL数据库不支持SQL,虽然有些NoSQL数据库支持类SQL,但是类SQL不是SQL。基于单机数据库分表的方式,虽然支持标准的SQL,但是仍然禁用和限制了SQL的很多功能。而NewSQL数据库在不断改进这种情况,不断扩展对SQL的全面支持。
虽然对SQL的支持是一个重要的区别,但是并不是核心的区别,它们之间核心的区别体现在一致性上,这是本书内容的重点,也是设计一个分布式系统必须解决的核心问题。这些分布式系统具有的一致性不尽相同,第13章将介绍关系型数据库的事务,以及事务所具有的一致性和隔离级别;第14章和第15章将分别介绍分布式系统中非常重要的两种一致性模型。
为什么说一致性是分布式系统的核心问题呢?因为一致性是分布式系统的一个非常重要的特性。分布式系统的特性还包括扩展性(scalability)、可用性(availability)、性能(performance)、可靠性(reliability)、故障容忍性(fault-tolerance),在这些分布式系统的特性中,一致性特性处于核心地位,它对这些特性都有影响,一个分布式系统具有什么样的一致性,在某种程度上决定了它的其他特性。分布式系统领域的CAP定理告诉我们,没有免费的午餐,想得到一致性,其他特性如可用性、性能、故障容忍性、可靠性等都会受到影响,因此在系统架构设计中,必须在分布式系统的各种特性之间进行权衡,第16章将介绍相关内容。
前面讲解了应用层的分布式技术和数据层的分布式技术,数据层的分布式技术是互联网大规模应用技术中的最后一道难关。目前,应用层的分布式技术已经相对成熟,虚拟化技术(virtualization)、容器技术(Docker)、服务网格(service mesh)已经成熟并且大面积落地,这些技术大大帮助了应用层的分布式技术在实际应用场景中大范围落地。相对而言,数据层的分布式技术的成熟度和落地程度还远不如应用层,目前大部分公司的大部分应用仍然以数据库分表的方式为主。虽然NoSQL数据库已经过多年的发展,但它仍然处于辅助地位,而NewSQL数据库尚处于初始的尝试阶段。无论哪一种数据层的分布式技术,最难的一道关卡都莫过于分布式系统的一致性。一致性复杂、难懂,并且牵扯着分布式技术领域的方方面面。