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

CloudSpannerFullyManagedRelationalDatabaseService

时间:2023-03-12 16:16:34 科技观察

Frontier2012~2013谷歌在Spanner和F1两个系统上发表论文,让业界第一次看到关系模型和NoSQL在大规模生产系统中的可扩展性的可能性一体化。Spanner巧妙地利用硬件设备(GPS时钟+原子钟)解决了时钟同步的问题,而在分布式系统中,时钟是最头疼的问题。Spanner的强大之处在于,即使两个数据中心相距很远,它也可以保证通过TrueTimeAPI获取的时间误差在很小的范围内(10ms),并且不需要通信。Spanner底层还是基于分布式文件系统,不过论文也说了以后可以优化。Google的内部数据库存储业务多为3~5个副本,重要数据需要7个副本,而这些副本分布在全球各大洲的数据中心。由于Paxos的广泛使用,延迟可以缩短到可以接受的范围内(写入延迟100ms以上),而且Paxos带来的Auto-Failover能力使得整个集群即使数据中心瘫痪,业务层是透明的,不知情的。F1建立在Spanner之上,对外提供SQL接口。F1是分布式MPPSQL层,本身不存储数据,而是将客户端的SQL翻译成KV操作,调用Spanner完成请求。严格来说,Spanner和F1共同开创了NewSQL风格。简介CloudSpanner是一种完全托管的任务关键型关系数据库服务,可提供全局事务一致性、自动同步复制以实现高可用性。它是第一个在全球范围内分发数据并支持外部一致的分布式事务的系统。Spanner的可扩展性已经达到了惊人的全球水平,可以扩展到数百万台机器、数百个数据中心和数万亿行。除了夸张的可扩展性,还可以通过同步复制和同时多个版本来满足外部一致性,可用性也非常好。突破CAP的束缚,实现三者的完美平衡。它是BigTable的继承者。谷歌表示Spanner不是一个纯粹的关系系统,因为每个表都必须有一个主键,以及对两种SQL方言的支持:谷歌标准SQL(ANSI2011和扩展)和PostgreSQL。好处享受无限规模的关系语义和SQL的所有好处。从任何规模开始,随着您需求的增长无限扩展。享受零计划停机和在线模式更改的高可用性。跨地区和大洲具有高度一致性的高性能交易。专注于创新并通过自动分片等功能消除手动工作。特性可灵活扩展的关系型数据库:从schema、SQL查询到ACID事务,关系型数据库应有的功能一应俱全,久经考验,随时可以全局扩展。99.999%可用性:CloudSpanner为多区域实例提供业界领先的99.999%可用性;与99.99%的可用性相比,停机时间减少了10倍。它还提供跨单区域和多区域配置的透明同步复制。自动分片:CloudSpanner根据请求负载和数据大小自动分片,从而提高性能。因此,您不必太担心如何扩展数据库,您可以专注于扩展您的业务。完全托管:无论数据库大小如何,都可以在每个阶段轻松部署。内置自动同步复制和维护。事务性强一致性:专为实现行业领先的外部一致性而不影响可扩展性或可用性而构建。单区域和多区域配置:由Spanner提供支持的应用程序可以在全球范围内读写最新的强一致性数据,无论用户身在何处。此外,在运行多区域实例时,您的数据库可免受单区域故障的影响,并提供业界领先的99.999%可用性。使用BigQuery进行联合查询:在BigQuery中实时查询Spanner数据,无需移动或复制数据,弥合运营数据和分析之间的差距,实现统一的数据生命周期。建立在谷歌云网络上:CloudSpanner建立在谷歌的私有网络上,提供低延迟、安全性和可靠性,为世界各地的用户提供服务。ScenarioSpanner是一种分布式、全球可扩展的SQL数据库服务,它将计算与存储分开,使其能够独立于存储扩展处理资源。Spanner的这种分布式扩展功能使其成为在线游戏等不可预测工作负载的理想解决方案。事务Spanner系统中的分布式事务是通过两阶段提交协议2PC来实现的。2PC是一种特殊的一致性协议。假设一个分布式事务涉及多个数据节点,2PC可以保证这些节点上的操作要么全部提交要么全部失败,从而保证整个分布式事务A的原子ACID在协议中有两个角色:协调者和参与者/队列。协调者是分布式事务的发起者,参与者是参与事务的数据节点。在最基本的协议形式中,系统中有一个协调者和多个参与者。CloudSpanner中的事务是一组读取和写入操作,这些操作在单个逻辑时间点以原子方式执行,跨数据库中的列、行和表。CloudSpanner支持以下事务模式:LockingRead-Write:这种事务类型是唯一支持向CloudSpanner写入数据的事务类型。这些事务依赖于悲观锁定和(如果需要)两阶段提交。锁定读写事务可能会中止,需要应用程序重试。只读:此事务类型保证多次读取的一致性,但禁止写入。只读事务可以配置为在过去的时间戳处读取。只读事务不需要提交,也不需要加锁。分区DML:此事务类型将数据操作语言(DML)语句作为分区DML执行。分区DML专为批量更新和删除(尤其是定期清理和回填)而设计。模型CloudSpanner数据库可以包含一个或多个表。这些表类似于关系数据库表,因为它们也由行、列和值组成,并包含主键。CloudSpanner中的数据是强类型的:必须为每个数据库定义一个模式,并且该模式必须指定每个表中每个列的数据类型。允许的数据类型包括标量和数组类型,也可以在表上定义一个或多个二级索引。父子表CloudSpanner中定义父子关系的方式有两种,表交错和外键。CloudSpanner的表交错非常适合许多父子关系,其中子表的主键包含父表的主键列。在子行与其父行之间共享一个位置可以显着提高性能,外键是一种更通用的父子解决方案,可以解决其他用例。外键不限于主键列,一个表可以有多个外键关系,既可以作为某些关系中的父键,也可以作为其他关系中的子键。但是,外键关系并不意味着表在存储层中的位置关系是公共的。主键每个表都必须有一个主键,主键可以由表的零个或多个列组成,如果一个表被声明为另一个表的子表,则父表的主键列必须是主键子表前缀的键,CloudSpanner按主键值排序的顺序存储行,并在共享相同主键前缀的父行之间插入子行,这意味着如果父表的主键由N列组成,则其每个子表表的主键也必须由相同的N列组成,顺序相同,并以相同的列开头。这种沿主键维度在父行之间插入子行的行为称为交错,子表也称为交错表。分表之间定义了最多七级的父子关系层次结构,这意味着可以将七个逻辑上独立的表的行存储在一起。如果您的表中的数据量很小,您的数据库可能可以由单个CloudSpanner服务器处理。但是,当相关表不断增长时,它开始达到单个服务器的资源限制。CloudSpanner将数据分成称为“分片”的块,这些块可以相互独立移动并分配给不同物理位置的多个服务器。切片包含一系列连续的行。此范围的开始和结束键称为“分片边界”。CloudSpanner会根据大小和/或负载自动添加和删除分片边界,这样做会改变数据库中分片的数量。复制CloudSpanner复制的好处包括:数据可用性:拥有更多数据副本可以让希望读取数据的客户端更容易使用数据。此外,即使某些副本不可用,CloudSpanner也可以支持写入,因为只需要大多数投票副本即可提交写入。地理位置:能够使用CloudSpanner来容纳不同地区和大陆的数据意味着数据可以在地理上更接近需要它的用户和服务,因此访问速度更快。单一数据库体验:得益于同步复制和强大的全局一致性,CloudSpanner提供一致的性能和单一数据库体验,无论规模如何。更简单的应用开发:CloudSpanner的ACID事务是全局高度一致的,这意味着开发者不需要在应用中添加额外的逻辑来处理最终一致性,因此应用开发和后续维护变得更加简单和快捷。总结Spanner是第一个可以在全球范围内提供这种保证的系统。符合ACID的数据库可以自动进行复制、分片和事务处理,因此可以快速扩展以满足任何使用模型的需求。CloudSpanner基于Google的专用网络,建立在数十亿用户使用的Google服务的可靠记录之上。它实现了高达99.999%的可用性,并在计划维护和架构更改期间实现了零停机。IT管理员和数据库管理员经常忙于执行数据库操作。现在,借助CloudSpanner,您只需点击几下即可创建或扩展全球复制的数据库,并降低数据库维护成本。