`

表格存储如何实现高可靠和高可用

阅读更多

系列文章

表格存储如何实现高可靠和高可用
表格存储如何实现跨区域的容灾

前言

本文会介绍一款分布式NoSQL如何实现数据高可靠和服务高可用,这是一款云上的NoSQL服务,叫做表格存储。对于分布式NoSQL,大家可能会想到很多名字,比如HBase、Cassandra,AWS的DynamoDB等,这类NoSQL在设计之初就作为一个分布式系统支持超大规模的数据量与并发。此外大家可能还会想到MongoDB和Redis,这两个也提供集群功能,但是一般需要人为的配置sharding和复制集/主从等。

表格存储是阿里自主研发的一款NoSQL服务,在架构设计上参考了google的bigtable论文,与上述的HBase、Cassandra、DynamoDB有一些相似之处。表格存储的一些功能优势可以见下图。

image.png | center | 704x378

本文会重点介绍表格存储在高可靠和高可用方面的技术。表格存储按照11个9的数据可靠性和4个9的服务可用性进行标准设计,作为一款云服务,提供10个9的可靠性和3个9的可用性SLA。

容错、高可靠、高可用

容错、高可靠、高可用是相互关联的几个概念。容错是指系统能够快速检测到软件或硬件的故障并快速从故障中恢复的能力,容错的一般实现方式是冗余,冗余可以保障一份坏掉系统不受影响。高可靠是衡量数据安全性,高可用是衡量系统的可用时间,一般高可靠和高可用的指标都用几个9来表示。

冗余可以实现容错,在数据层面一般表现为数据有多个副本,任意一份损坏不会影响数据完整性,在服务层面可以表现为有多个服务节点,任意一个节点宕机可以将服务迁移到另外的节点。服务高可用会依赖于数据高可靠,因为假如数据的完整性都没有保障,那么谈不上服务的可用性。

容错系统并非一定是高可用的,高可用衡量的是系统的可用时间,假如系统不支持热升级,或者不支持动态扩缩容等,就需要停机进行运维操作,这也是不满足高可用的。

为了获得更高的可用性,可以将两套系统或者多套系统组成主备,搭建容灾,常见的比如同城双机房场景。同城双机房配合自动切换或者快速的人工切换,可以使系统达到更高的可用性。此外,业务可以对应用进行一些弹性的架构设计,在某些服务出现异常时可以自动降级,提高业务的可用性。

表格存储如何实现高可靠和高可用

传统的MySQL主备同步方案,当主库出现故障时,HA模块会将服务迁移到备库,实现高可用。这种方式存在的问题就是,如果要保障数据的强一致,那么一定要主库和备库都写入成功才能返回,即最大保护模式。如果备库出现不可用,主库写入也会失败,所以实际上可用性和一致性无法兼得。

分布式系统中,单机故障率相同情况下,集群中存在单机故障的概率随着集群规模增加而增加,高可靠和高可用成为分布式系统最基本的设计目标。分布式系统中,实现数据高可靠往往通过多副本加Paxos等分布式一致性算法,实现高可用一般是实现快速的故障迁移机制,实现热升级和动态的扩缩容。

那么表格存储如何来实现高可靠和高可用呢,我们首先看下面的架构图:

image.png | center | 704x497

图中的Table Worker代表表格存储的后端服务节点,在它下层有一个系统叫做盘古。盘古是阿里自研的一款先进的分布式存储系统,分布式存储是一种共享存储,Table Worker的任意一个节点都可以访问盘古中的任意一个文件。同时,这也是一种存储与计算分离的架构。

 

我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,马上就要抢光了。

数据高可靠

盘古会专注于解决好分布式存储领域的问题,最基本的就是保证数据高可靠,并且提供强一致性保证。我们使用盘古时配置了三份数据副本,任意一份副本丢失不会影响读写和数据完整性。在写入时,盘古保证至少两份写成功后返回,并在后台修复可能存在的一份副本写入失败的情况。读取时,大部分情况只需要读取一份副本即可。

服务高可用

1. 表格存储的数据模型

首先我们来看一下表格存储的数据模型,如下图所示:

image.png | center | 704x363
表格存储中的一张表由一系列行组成,每行分为主键和属性列,主键可以包含多个主键列,比如用如下方式表示的一个主键就包含三个主键列,三列的类型都为string:
PrimaryKey(pk1:string, pk2: string, pk3: string)
第一列主键列作为分片键(Partition Key),上面的例子中分片键就是pk1。表中的所有数据会按照主键(包含三个主键列)进行排序,按照分片键的范围进行分片。当一个表的数据或者访问量越来越多时,分片就会进行分裂,做动态的弹性扩展,一张较大数据量的表会有几百到几千个分片。

为什么要这样设计?简单来说,一方面所有数据按照主键排序,整个表就可以看作一个巨大的SortedMap,可以在任意主键区间进行范围查询,另一方面第一列主键列是分片键,所有第一列主键列相同的数据都在一个分片中,便于做分片内的功能,比如自增列、分片内的事务、LocalIndex等。

为什么分片键可以做成sorted key,而不是hash key?这是因为我们使用了共享存储的能力,对一个分片进行不断的切分时,不需要搬运数据,而且数据本身就已经被盘古打散了。假如没有共享存储,就需要考虑如何处理数据分布,比如使用一致性hash算法等,分片键一般都是hash key,就失去了全表任意主键区间范围查询的能力。

2. 高可用实现

那么回到正题,如何来实现服务高可用呢?假如一张表有100个分片,这些分片会被不同的worker加载,当一台worker挂掉时,上面的分片会自动迁移到其他可用的worker上。一方面,单台worker故障只会影响一部分分片,不会影响全部分片。另一方面,由于我们使用的是共享存储盘古,任意一台worker都可以加载任意一个分片,计算资源是与存储资源分离的,这就可以把failover过程做的非常快,架构也更加简单。

上面讲的是故障迁移(failover),其实这种架构下也可以做非常灵活的负载均衡(load balance)。当一个分片上的读写压力过大时,可以迅速的将一个分片切分成两个或者更多个分片,加载到不同的Worker上。分片切分时不需要将父分片的数据迁移到子分片中,而是在子分片中建立父分片的文件的link,后续再通过后台的compaction来将数据真正切分出来,消除link。一个分片切分后可以继续向下切分,所有分片会均摊到集群的不同Worker上,充分利用集群的CPU和网络资源。

3. 运维、升级、硬件更新

作为一款云服务,服务端的日常运维、升级、硬件更新换代对于用户而言是完全透明的,这些运维操作也都必须按照高可用标准进行设计。分布式系统的运维是一项非常复杂的工作,假如不使用云服务,运维将是一项繁重而且风险极高的事情,可能经常会有停机升级,还需要处理各种故障。另外,机器硬件也在不断更新换代,云服务为了提供给用户更好的性能,会不断更新新的硬件,建设更好的网络。我们相信,作为一款云上的数据库,可以提供给用户更好的性能,更高的可用性和更好的使用体验。

 

阅读原文请点击

分享到:
评论

相关推荐

    MySQL是一款开源的关系型数据库管理系统,能够解决许多数据存储和管理方面的问题

    高可用性:MySQL支持主从复制和集群配置等多种高可用性方案,以确保数据库始终处于可用状态。性能优化:MySQL能够通过索引和其他优化技术来提高数据库查询和操作的性能。跨平台支持:MySQL可以运行在各种操作系统上...

    MySQL高级面试题整理及答案.rar

    MySQL是一种开源的关系型数据库管理系统(RDBMS),被广泛用于Web开发和应用程序中。MySQL提供了高效、可靠、稳定和易用的数据库解决方案。 以下是MySQL的一些特点和功能: ...6. 扩展性和高可用性:

    MySQL高级面试题及答案,企业真面试题.rar

    MySQL是一种开源的关系型数据库管理系统(RDBMS),被广泛用于Web开发和应用程序中。MySQL提供了高效、可靠、稳定和易用的数据库解决方案。 以下是MySQL的一些特点和功能: ...6. 扩展性和高可用性:

    MySQL最新2021年面试题,高级面试题及附答案解析.rar

    MySQL是一种开源的关系型数据库管理系统(RDBMS),被广泛用于Web开发和应用程序中。MySQL提供了高效、可靠、稳定和易用的数据库解决方案。 以下是MySQL的一些特点和功能: ...6. 扩展性和高可用性:

    MySQL大厂2021最新面试题大集合.rar

    MySQL是一种开源的关系型数据库管理系统(RDBMS),被广泛用于Web开发和应用程序中。MySQL提供了高效、可靠、稳定和易用的数据库解决方案。 以下是MySQL的一些特点和功能: ...6. 扩展性和高可用性:

    MySQL最新2021年面试题附答案解析,大汇总.rar

    MySQL是一种开源的关系型数据库管理系统(RDBMS),被广泛用于Web开发和应用程序中。MySQL提供了高效、可靠、稳定和易用的数据库解决方案。 以下是MySQL的一些特点和功能: ...6. 扩展性和高可用性:

    MySQL最新2021年面试题大汇总,附答案.rar

    MySQL是一种开源的关系型数据库管理系统(RDBMS),被广泛用于Web开发和应用程序中。MySQL提供了高效、可靠、稳定和易用的数据库解决方案。 以下是MySQL的一些特点和功能: ...6. 扩展性和高可用性:

    Android高级编程--源代码

     ◆存储和共享应用程序数据的技术  ◆如何创建基于地图的应用程序,如何使用gps和地理编码位置等基于位置的服务  ◆如何创建和使用后台服务及notification  ◆使用加速计、指南针和摄像头硬件  ◆与电话和网络...

    【最新版】PDFpen-1202.4.zip【亲测可用】最好的在Mac上进行强大的PDF编辑

    添加签名,文本和图像。进行更改并纠正错别字。OCR扫描的文档。填写表格。校对的OCR文字! 校对的OCR结果 PDFpen可以进行光学字符识别(OCR):将扫描文本的那些图片转换为您可以使用的单词,然后对其进行校对以确保...

    nosql 入门教程

    4.1.1 使用关系型数据库中的表格和列 63 4.1.2 列数据库对比RDBMS 65 4.1.3 列数据库当做键/值对的嵌套映射表 67 4.1.4 Webtable布局 70 4.2 HBase分布式存储架构 71 4.3 文档存储内部机制 73 4.3.1 用内存...

    【最新版】navicat150_mariadb_en.dmg navicat-for-mariadb: 15.0.14【亲测可用】最好的MariaDB数据库管理

    通过SSH隧道和SSL建立安全连接,可确保每个连接都是安全,稳定和可靠的。支持数据库服务器的不同身份验证方法,例如PAM身份验证。Navicat提供了更多的身份验证机制和高性能环境,因此您不必担心通过不安全的网络进行...

    PHP和MySQL Web开发第4版pdf以及源码

    16.1.2 安全性和可用性之间的平衡 16.1.3 安全监视 16.1.4 基本方法 16.2 识别所面临的威胁 16.2.1 访问或修改敏感数据 16.2.2 数据丢失或破坏 16.2.3 拒绝服务 16.2.4 恶意代码注入 16.2.5 服务器被攻破 16.3了解与...

    PHP和MySQL WEB开发(第4版)

    16.1.2 安全性和可用性之间的平衡 16.1.3 安全监视 16.1.4 基本方法 16.2 识别所面临的威胁 16.2.1 访问或修改敏感数据 16.2.2 数据丢失或破坏 16.2.3 拒绝服务 16.2.4 恶意代码注入 16.2.5 服务器被攻破 16.3了解与...

    java开源包3

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    PHP和MySQL Web开发第4版

    16.1.2 安全性和可用性之间的平衡 16.1.3 安全监视 16.1.4 基本方法 16.2 识别所面临的威胁 16.2.1 访问或修改敏感数据 16.2.2 数据丢失或破坏 16.2.3 拒绝服务 16.2.4 恶意代码注入 16.2.5 服务器被攻破 16.3了解与...

    java开源包4

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    ASP3《高级编程》(第一部分)

    第28章和附录提供了一个XML驱动的在线报纸示例和大量以表格形式给出的相关资料。本书不仅为Internet开发人员提供了详实的开发编程指导,也是致力于Internet网络应用与开发的广大科技人员和大专院校相关专业师生的一...

    ASP3《高级编程》(第二部分)

    第28章和附录提供了一个XML驱动的在线报纸示例和大量以表格形式给出的相关资料。本书不仅为Internet开发人员提供了详实的开发编程指导,也是致力于Internet网络应用与开发的广大科技人员和大专院校相关专业师生的一...

    《计算机操作系统》期末复习指导

    操作系统使整个计算机系统实现了高效率和高度自动化。 2、操作系统的生成和五大类型 生成:产生最适合自己工作环境的OS内核(kernel)。既方便用户,又使系统开销尽量小;生成的配置过程如UNIX中newconfig...

    计算机应用基础(计算机一级)课件.pptx

    关机:退出应用程序及操作系统并切断电源(开始菜单中关闭计算机/关闭) 主要性能指标 字长、主频、内存容量、运算速度及其可用性和可靠性 计算机病毒防治 定义:计算机病毒是能够引起计算机故障、破坏计算机数据的...

Global site tag (gtag.js) - Google Analytics