当前位置: 首页 > 科技观察

什么是分布式SQL_0

时间:2023-03-13 04:02:50 科技观察

【.com快译】近40年来,SQL已经成为关系型数据库(又名RDBMS)的通用语。这就是关系数据库通常简称为SQL数据库的原因。在架构上,以Oracle、PostgreSQL、MySQL为首的传统SQL数据库是单体的。也就是说,它们无法在多个实例之间自动分发数据和查询。NewSQL数据库的出现使得SQL具有可扩展性和高性能。当然,这样的数据库仍然有其固有的局限性。2015年,Docker容器和Kubernetes编排的出现使我们能够通过灵活且可组合的基础架构方法创建各种基于微服务的应用程序。其中,内置的可扩展性、灵活性和地理分布是这类云原生架构的核心特征。这就是人们常说的“分布式SQL”——这种新型的数据库。在应用方面,这种分布式SQL数据库的一个显着特点是无论有多少个节点,整个数据库集群对于应用程序来说都是一个逻辑上的SQL数据库。数据库体系结构分布式SQL数据库通常具有以下三层体系结构。1.SQLAPI顾名思义,分布式SQL数据库仍然必须提供SQLAPI服务,以便应用程序可以对关系数据进行建模,并执行涉及各种关系信息的查询操作。它保留了SQL数据库典型的数据建模结构,包括:索引、外键约束、JOIN查询、多行ACID事务(译者注:原子性、一致性、隔离性、持久性(Durability))。2.分布式查询执行由于分布式SQL查询可以自动分布到目标集群的多个节点上,这有效地避免了单个节点成为查询处理的瓶颈。具体的查询过程是:目标集群中的任意一个节点都可以接受一个传入的查询。通过传输数据并与网络中的每个节点协作,节点可以以最小化处理等待时间的方式仅分担查询请求中的一部分任务。其他节点协助完成剩余部分。最后,接受请求的原始节点将聚合所有查询结果并返回给客户端应用程序。3.分布式数据存储包含索引信息的数据会自动分布(也叫分片,sharded)到集群的多个节点。此举确保没有单个节点成为高性能和可用性的瓶颈。此外,数据库集群可以支持高一致性复制,以及多行(也称为分布式)ACID事务,从而保留了单一逻辑数据库的基本概念。高一致性复制在数据库管理的概念中,所谓支持强大的SQLAPI层,本质上是要求底层存储层能够跨数据库在集群节点上建立强一致性复制。这意味着对数据库的写操作将在多个节点上同步提交,以确保发生故障时数据的可用性。读操作是根据最后一次提交的写数据,或者说出错前的数据。这个属性通常被称为线性化能力(Linearizability,http://www.bailis.org/blog/linearizability-versus-serializability/)。根据著名的CAP原理(https://towardsdatascience.com/cap-theorem-and-distributed-database-management-systems-5c2be977950e,译者注:Consistency,Availability,Partitiontolerance),分布式SQL数据库具有一致性和分区容错。分布式ACID事务为了支持分布式ACID事务,分布式数据库的存储层需要在多个节点的多个数据行中执行事务协调任务。在这里,他们只是使用了两阶段提交(2PhaseCommit,2PC)协议。参考ACID中I(隔离)的要求,分布式SQL数据库为了实现对并发数据访问的严格隔离,会进行序列化(Serializability,http://www.bailis.org/blog/linearizability-versa-serializability/)作为最严格的隔离级别,并通过快照等其他方式支持较弱的隔离级别。业务应用的优势分布式SQL的四大关键优势如下图所示。1.让SQL和事务类的开发更敏捷今天,由于SQL仍然是一种数据建模语言,可以很方便的实现建模关系和多行操作,以满足应用开发者对SQL数据库的持续操作习惯和要求需求,即使是AmazonDynamoDB、MongoDB、FaunaDB等NoSQL数据库也开始具备事务操作能力。例如:SQL允许显式(使用BEGIN和ENDTRANSACTION的语法)和隐式(使用外键和JOIN查询等二级索引)进行多行事务,这比传统的键值(key-value)类型的NoSQL方便多了。此外,开发人员通常喜欢使用SQL轻松且一次性地对数据(和存储)进行建模。当业务需求发生变化时,只需修改JOIN,即可体现在查询中。2.具有本地故障转移和修复的超强弹性在分布式SQL数据库中,我们使用基于每个分片的分布式共识复制(consensusreplication)等技术来确保每个分片(而不是每个实例)在发生故障时保持高可用失败。这样一来,一旦基础设施出现故障,永远只会影响目标数据的某个子集(即被leader划分的那些分片),而不会影响整个集群。并且,由于剩余的分片副本可以在几秒钟内自动选举出新的领导者,因此集群在发生故障时会表现出一定的自我修复能力。此外,这些对后台集群配置的更改对应用程序是完全透明的,并且它们可以继续运行而不会出现任何中断或性能下降。3.Scalability《如何在分布式SQL数据库中进行数据分片》withhorizo??ntalwritingondemand人们通常如何在分布式SQL数据库中实现自动数据分片。无论添加新节点还是删除现有节点,分片都将在所有可用节点之间自动平衡。目前,那些需要处理事务的应用程序具有扩展微服务的能力。它们可以直接依赖内存缓存(不需要从数据库读取请求,而是保留写请求的处理)或者NoSQL数据库(虽然可以扩展写操作,但是不保证ACID)。4.地理分布式数据的低延迟正如文章《构建具有低延迟的云原生、以及地域分布式SQL应用的9种技术》(https://dzone.com/articles/9-techniques-to-build-cloud-native-geo-distributed)中强调的那样:分布式SQL数据库可以提供一个用于构建地理分布式应用程序的各种技术。这些技术不仅有助于实现区域故障的自动容灾,还可以在一定程度上拉近数据离区域终端用户的距离,从而实现更低的数据延迟。原标题:什么是分布式SQL?,作者:SidChoudhury