实现TableStore高数据可靠性和高服务可用性的方法是什么?
本文将介绍如何利用Pangu的共享存储系统,解释Table Store是如何实现高数据可靠性和高服务可用性的。
作者:宜胜
说到分散型NoSQL数据库,脑海里浮现出了很多名字,比如HBase、Cassandra、AWS DynamoDB等等。这些NoSQL数据库最初是作为支持超大规模数据量和同时执行的分布式系统来设计的。此外,MongoDB和Redis也提供了集群功能,所以也许会想到它们。然而,这两个数据库需要手动介入来配置分片、副本集和主从复制。
Table Store的优势
Table Store是由阿里巴巴开发的NoSQL服务。其架构设计参考了Google的Bigtable论文。Table Store与HBase、Cassandra和DynamoDB有一些相似之处。下图展示了Table Store的几个优点。
在本篇文章中,主要介绍了在Table Store中所使用的技术,以及为实现高可靠性和高可用性所采用的技术。Table Store的设计是根据数据可靠性11个九和服务可用性4个九来进行的。作为云服务,Table Store可以提供10个九的可靠性和3个九的可用性作为服务等级协议(SLA)。
在中文中只需要提供一种选项,请将以下内容进行本地化改写:
耐障害性、高信頼性、高可用性
耐障害性、高信頼性和高可用性是相互关联的概念。耐障害性指的是能够快速检测并迅速从软件或硬件故障中恢复的能力。一般来说,通过冗余实现,可以确保一个系统的故障不会影响其他系统。高信頼性表示数据的安全性,而高可用性表示系统的运行时间。通常情况下,高信頼性和高可用性可以用包含多个”9″的百分比来表示。
冗长性对于容错性的实现非常有帮助。在数据层面,通常会存在数据的多个副本。即使一个副本损坏,也不会影响数据的一致性。在服务层面,有多个服务节点,如果一个节点遇到停机时间,可以将服务迁移到另一个节点。因为如果数据的完整性无法保证,就无法实现服务的可用性,所以服务的高可用性依赖于数据的高可靠性。
高耐障系统不一定具有高可用性。高可用性是指系统预期可以连续运行多长时间的指标。如果系统不支持热升级或动态扩展,说明在维护期间会有停机时间,这样的系统并非高可用性系统。
为了实现更高的可用性,可以使用两个或更多的系统来形成主备系统,并实施灾害耐性。一个常见的例子是在一个城市拥有两个数据中心。通过在城市中设置两个数据中心,并结合自动切换和快速手动切换,可以实现更高的系统可用性。此外,为了满足业务需求,可以进行应用程序的弹性架构设计,以便在出现服务异常时能够自动降级,从而提高业务的可用性。
TableStore是如何实现高可靠性和高可用性的?
在以往的MySQL主从同步计划中,当主数据库发生故障时,HA模块会将服务迁移到从数据库上,实现高可用性。但是这种方法存在一个问题:为了确保强大的数据一致性,在返回操作之前,必须将数据成功写入主数据库和从数据库两者(即最大保护模式)。如果从数据库不可用,写入主数据库的操作也会失败。因此,不能同时保证可用性和一致性。
在可能性相同的分散系统中,与独立故障同样可能性的群集故障的可能性会随着群集规模的增大而增加。高可用性和高可靠性是分散系统的基本设计目标。在分散系统中,高数据可靠性通常通过实施诸如副本和Paxos等分布式一致性算法来实现,而高可用性的实施通常包括快速故障转移机制、热升级和动态扩展等实现。
为了了解Table Store如何实现高可靠性和高可用性,首先让我们来看一下以下的架构图。
这个图表中的“表哥”代表着后端服务节点。表哥下方是一个称为Pangu的系统,它是由阿里巴巴开发的先进的分布式系统。分布式存储是共享系统。所有表哥节点都可以访问Pangu系统中的所有文件。此外,这种架构将存储和计算分离开来。
数据的高可靠性 de
Pangu关注分散存储的问题。Pangu的基本角色是确保数据的高可靠性和强大的一致性。在使用Pangu时,数据被设置为三个副本,即使一个副本丢失也不会对读写和数据的一致性造成影响。在写入数据时,必须确认至少两个副本已成功写入,然后返回数据;如果一个副本的写入失败,则在后台进行修复。在读取数据时,通常只需要读取一个副本。
高可用性的服务
Table Store数据模型
先来看一下下面这张表存储数据模型的图。
在TableStore中,表由一系列的行组成,每一行都包含主键和属性列。主键可以有多个主键列,例如,下图中的主键有三个主键列,并且它们都是字符串。
主键(pk1: string、pk2: string、pk3: string)
最初的主键列是分区键。在这个例子中,分区键是pk1。表中的所有数据都按照主键(在这个例子中是3个主键列)排序,并且根据分区键的范围进行分区拆分。当表中的数据量和访问量增加时,分区会动态地进行拆分和扩展。对于包含大量数据的表,可能会有几百甚至几千个分区。
为什么这样设计呢?由于所有数据都按照主键排序,整个表就像一个大的SortedMap一样,可以执行针对主键的范围查询。此外,第一个主键列作为分区键,具有相同第一个主键列的所有数据条目将被分割到一个分区中,从而使得列的自动递增、分区内事务、局部索引等分区内功能开发变得容易。
为什么分区键设计为排序键而不是哈希键?这是因为采用了共享存储。如果采用共享存储,分区将被连续分割,且当数据在Pangu上分散时,无需搬移数据。如果没有采用共享存储,就必须处理数据的分散。例如,可以使用哈希一致性算法。在这种情况下,分区键通常是哈希键,因此无法处理针对表主键中任意部分的范围查询。
实现高可用性
我们来讨论这个问题。TableStore是如何实现高可用性服务的呢?我们考虑一张包含100个分区的表,这些分区被加载到不同的工作节点上。当某个工作节点发生故障时,该节点上的分区会自动迁移到另一个可用的工作节点上。另一方面,某个工作节点的故障只会影响部分分区,而不会影响所有分区。另外,Pangu使用共享存储系统,任何工作节点都可以加载任何分区,计算资源和存储资源是分离的。因此,故障转移非常快速,架构也更加简单。
前一个段落专注于故障转移。在这个架构中,您还可以实现灵活的负载均衡。如果写入和读取分区的流量过大,可以快速将一个分区分割成两个以上的子分区,并将其加载到不同的工作节点上。分区分割后,不需要将父分区的数据迁移到子分区中。相反,首先在子分区中生成指向父分区文件的链接,然后在后台对父分区的数据进行压缩并删除链接以进行迁移。分区被分割后,子分区还可以进一步分割。所有分区均均匀地加载在集群的不同工作节点上,充分利用集群的CPU和网络资源。
维护、升级、硬件更新
作为云服务,Table Store提供了每日的维护、软件升级和硬件升级,对用户来说是完全透明的。这些维护运营必须设计为实现高可用性。维护分散系统是很复杂的。不使用云服务进行维护会很麻烦且风险高,服务器会经常变得无法使用,无法进行更新和处理各种故障。此外,硬件还需要更新。通过使用云服务,可以为用户提供更好的性能,并通过持续更新硬件来建立更好的网络。我认为Table Store作为云数据库可以提高性能,提供更高的可用性,并提供更好的用户体验。
总的来说
Table Store利用Pangu共享存储系统,实现了高数据可靠性,通过快速故障转移和灵活负载均衡实现高可用性。为了实现高可靠性和高可用性,共享存储对于分布式NoSQL数据库来说具有非常大的优势,云服务为用户提供了很大的便利性。以下是对这些优点的总结。
Pangu的共享存储益处:
1、由于存储和计算被分离,架构更加灵活,功能解耦,存储层和应用层各自可以专注于处理各自的问题。除了基本的数据可靠性保证外,Pangu还提供了各种功能,如混合存储、冷数据和热数据的分离、擦除编码、跨可用区的多副本分散等。
2、此外,Pangu可以提升性能并提供多种有用功能。利用新硬件和技术,共享存储已经开始比应用层通过内核接口进行本地磁盘写入和读取的性能更高。
云服务「Table Store」的优点:
1、TableStore提供高可靠的可用性服务等级协议(SLA),能够自动快速地解决分布式系统中的SPOF和热点问题。维护、升级和硬件更新对于用户来说是完全透明的,可以最大限度地减少用户的维护问题。
2、按量计费。通过快速的数据分区和分割,TableStore能灵活应对用户服务量的变化,每秒提供一千万次查询。用户不需要预留资源来在高峰时段的营业时间内使用,从而避免了浪费成本。
3、服务端定期进行功能迭代和升级,发布新功能,优化性能,提高可用性,为云用户提供更好的体验。
此博客为英文版的翻译。原始版请点击此处查看。我们使用部分机器翻译。如果发现有翻译错误,请指正,我们将不胜感激。
阿里巴巴云计算在日本拥有两个数据中心,并拥有超过60个可用区域,是亚太地区头号的云基础设施服务提供商(2019年Gartner评选)。
请点击此处查看阿里巴巴云计算的详细信息。
阿里巴巴云计算日本官方网页