高可用性架构

article/2025/10/13 7:01:29

1. 高可用性架构

  高可用性是指一个系统经过专门的设计后具备的减少停工时间并能持续保持提供服务的高可用性质。该特性是衡量系统提供服务能力的一个特征,也是对系统进行设计时需要考虑在内的一个重要因素。
  对于数据库系统而言,高可用、高可靠和高性能是人们重点关注点。随着现代互联网技术的快速发展,高可用性被提升到一个新的高度。在CAP理论[1]认为在分布式数据库中可用性(A)值得倍加重视,并以CAP为背景,阐述了分布式系统的强一致性的线性一致性和事务一致性结合时,与可用性间的联系。
  基于上述背景,我们接下来就高可用性在数据库架构方面提出的要求一起学习讨论。

1.1 高可用衡量指标

  对于分布式数据库而言,高可用是系统的一个重要特性,保证其能够在足够长的时间内提供连续的服务。衡量数据库系统的高可用性有一下两个指标:
1)从故障恢复角度来看,包括RTO和RPO

  • RTO(Recovery Time Objective,恢复时间目标):故障恢复过程所需的时间开销。故障恢复后,从IT系统停止服务开始到IT系统恢复至能够提供服务点的时间间隔称为RTO。对于像数据库这种重要性服务,其RTO通畅控制在分甚至是秒级别。
  • RPO(恢复时间点目标):数据库恢复后的时间点,即数据库中的数据可恢复至哪个时间点上,该时间点之后的数据会完全丢失,与数据库停止服务时间点相比,该值越小恢复的越完整,丢失的数据越小。如果数据库采用的是主备强服务或者基于大数派共识协议的副本技术,后者数据库依赖的是分布式文件系统,理想情况下其RPO接近0,即数据不丢失。该项指标更多的是描述系统的可靠性,唯有可靠才可用。

2)衡量计算机的高可用指标,包括MTBF、MTTF、MTTR

  • MTBF(Mean Time Between Failure,平均无故障时间):对于可修复系统而言,系统的平均寿命是指平均情况下两次相邻失效(故障)之间的工作时间。该值越大表明可用性越好。
  • MTTF(Mean Time To Faliure,平均失效时间):对于不可修复的系统而言,系统的平均寿命指系统发生失效前的最大平均有效工作时间。
  • MTTR(Mean Time To Repair,平均修复时间):对于可修复的系统而言,该值表示故障的平均修复时间,即从故障开始到修复的时间。该值越小表明易恢复性越好。

1.2 高可用性分类

  文献[2]将高可用性划分为节点级高可用性、服务级高可用性、人工介入后高可用性。

  • 节点级高可用性是指网络出现分区后,所有节点都能持续对外提供服务。
  • 服务级高可用性是指网络出现分区后,只要分区的严重程度有限(比如某个分区存在多数派),那么整个系统仍然可以继续对外提供服务。服务级高可用性不要求故障发生后所有的节点都可用,只要该分区的大多数节点可用即可(n > N/2)。
  • 人工介入后高可用性是指出现网络分区后,系统暂时进入不可提供服务状态,只有在人工介入确认系统状态或采取某种措施后,系统才能继续提供服务。
      如果从用户的角度来看,CAP中的A不是百分百可用的意思,而是‘‘高可用’’的含义。对系统进行故障分析:用户链路故障会导致不可用;数据库引擎出现不可用,中心化的集中式架构构建的数据库服务更容易出现整个服务不可用的情况,一些去中心化的分布式事务构建的数据库服务能较好的应对服务级不可用;节点故障导致数据不可用,包括主副本不可用和从副本不可用;另外还有因网络分区发生导致的各种不可用、服务/节点响应缓慢导致的不可用、网络延时长用户期待响应快而产生的不可用等。这些因素使得可用性、分布式一致性、事务一致性成为分布式数据库需要在架构层面优先考虑的问题。
      著名研究Dean J在论文[3]中重点介绍了缓解大规模响应式Web服务器中延迟波动问题的技术,虽有别于数据库中的高可用,但是对于数据库有着一定的借鉴意义。提供Web服务,一是应做到的延迟尽可能窄,让服务的响应具有预测性;二是能够容忍错误且具有大规模容忍延迟的能力。
      该论文主要从如下几个方面分析延迟波动产生的原因
  • 共享资源:多个应用竞争硬件资源或者多个请求竞争软件资源;
  • 守护进程:调度执行守护进程的时候会产生时延;
  • 全局资源共享:运行在不同机器上的应用会竞争一些全局资源(网管、共享文件系统),而在分布式系统中如全局时钟、集中式协调器等都属于全局资源;
  • 维护性活动:系统中的后台维护活动(例如带有垃圾回收的编程语言Java进行垃圾回收)也会造成延迟;
  • 排队:在多个层级上的排队会加重延迟活动。用户请求量达到一定程度时,数据库也有可能对用户连接或者用户请求进行排队后处理。
      作者认为,缓解大规模的在线服务中延迟的通用方法是将多个子操作分配给多个相同功能的组件进行并行处理。延迟波动可以通过严格控制资源、软件实时性设计和提高稳定性来缓解甚至消除。这个思路对于目前流行的分布式数据库(基于postgres 的开源数据库Greenplum、腾讯自研并商业化的分布式数据库TBase、阿里自研的 云原生数据仓库 AnalyticDB等)具有参考意义。
      参考文献[1] 讨论了在事务级别下查询语句的瞬时失效问题,作者指出解决瞬时失效问题也是数据库可用性的一种表现。我们都知道,在数据库内部,客户端的服务请求 分为3各阶段:
    1)服务器接受用户的发送请求SQL,根据任务的负载确定是否进入SQL队列进行等待;
    2)对SQL进行解析和查询优化,生成最佳执行计划,这意味着SQL即将被执行;
    3)事务开始,SQL进入执行器的执行阶段。
      后两阶段对于多个SQL会合并为一个阶段,即在一个事务内进行多条SQL的解析、查询优化和执行。

1.3 高可用事务

  Peter Bailis等人[4]总结了分布式体系下各种一致性(包括分布式一致性、事务一致性、事务的隔离界别)和高可用之间的关系,并分析了单调读、单调写、因果一致性等分布式一致性,见表1。在事务可用性(Transactional availiability)、和黏性事务可用性基础之上提出高可用事务(Highly Available Transactions) HAT概念,证明强一致性和100% 的可用性是不可兼得的,进一步表明CAP理论是正确的。
在这里插入图片描述
  作者对提出的事务与可用性相结合的概念如下:

  • 黏性可用性:从用户的角度看整个系统的可用性和事务之间的关系,在可容忍的时间内(设置超时机制检测),即使发生了分区或较长时延,用户依旧能够得到一个反馈,这样的可用性成为黏性可用性。
  • 事务可用性:从事务的角度出发,含有多副本的事务型数据库系统和可用性的关系,在可容忍的时间内(设置超时机制检测),即使发生了分区或较长时延,事务依然能够提交或者是回滚,我们成这为事务可用性;
  • 高可用事务:只要系统满足HAT的要求,就能够保证系统是高可用,也可以确保是事务型的。因此HAT是衡量一个分布式系统是否满足高可用、分布式一致性事务特性的指标。
      同时作者从隔离界别、原子性、持久性这三个角度分别探讨了其与HAT之间的关系。
      对于隔离界别,能够保证HAT语义的情况包括读未提交和读已提交这两种隔离界别,原因是这两者在分区或较长时延情况下,多副本的分布式事务能够保证读操作能够能正确满足。而可重复读、快照隔离隔离级别在分区或较长时延情况下,多副本的分布式事务不能保证写操作,即不能使丢失更新、写偏序操作正确实现
      对于原子性:在分布式系统中,原子性影响写操作结果对其他事务的可见性,这也被认为是一种特殊的隔离,称为MAV隔离。在MAV隔离级别中,如果事务T1能够影响的部分数据被到事务T2所见,则T1能够影响的所有数据都能被事务T2所见。即事务T2读取到事务T1所写的数据,则事务T2再次读取事务T1所写的数据不会有更新的值(能够读取到的数据便是最新值)。
      对于持久性:从用户角度出发,事务提交前要保证持久性,则必须保证有F副本失效前至少还有F+1个副本可用(满足多数派规则)。

1.4 高可用架构

  对于数据库系统,在单机数据库领域,通常采用主从架构实现数据库服务的高可用,如PostgreSQL、Oracle、Informix和SQL server等采用的都是基于物理文件级别的日志复制技术主备架构。PostgreSQL的基于流复制技术的主从架构,AWS的Aurora基于‘‘日志即数据库’(Log is database)’思路的存放分离、共享存储的一主多备架构和MySQL的基于逻辑复制复制技术的主从架构,都是早起数据库在高可用方面的经典案例。主从架构技术的数据冗余粒度在服务器一级,某个备机服务器挂掉会导致可用性降低,这是因为挂在新的备机需要从其他节点传输大量的数据到备机,导致备机的不可用时间变长;但如果采用逻辑复制的手段会因为效率低致使备机可用性降低。
  在分布式数据库中,节点级的高可用,也会采用主从复制的架构,例如腾讯自研的数据仓库TBase分布式数据库中全局事务管理器(GTM)配有一个备节点Standby,GTM掌管系统的全局事务,为每个事务分配全局事务号GXID,提供全局事务快照最为可见性判断的依据; 目前最流行的开源分布式数据库Greenplum的master节点配备有一个备节点Standby节点,master作为集群的入口,用于存储系统的元数据,同时接收来自客户端的SQL语句,进行语法解析,生成执行计划并向下数据节点Segment发送执行计划,Segment节点存放并管理实际数据,Segment节点间、master节点与Segment节点间通过高速网络进行通信交互,见图1(摘自greenplum官网)。
在这里插入图片描述
  在分布式数据库中,数据层与计算层的高可用,采用的是存算分离架构,使得数据层和计算层可独立进行缩扩容。存储层采用经典的共识协议多副本技术,在此基础之上还提供主副本写从副本可读的方式,进一步提高系统的可用性。计算层无状态性信息,使得计算层的可用性提高;也就是说启动新的计算层,加入集群后即可提供服务,这使得系统整体的可用性得以提高。
  相较于传统的主备方式,基于共识协议的数据冗余技术,其数据分成一个一个分区(Partition、Range等),以适配I/O块大小的方式传输。数据复制的粒度被细化这使得数据的复制可以通过并行的方式可以从不同的副本同时复制,这减少了备机上线的时间,进一步提高系统的可用性。

参考文献:
[1]:Baillis P, Davidson A, Fekete A, et al. Highly available transactions:Virtues and linmitation[R]. Hangzhou: VLDB, 2013:181-192.
[2]: 朱涛,郭进伟,周欢,等. 分布式数据库中一致性与可用性的关系[J]. 软件学报,2017(1) : 131-149.
[3]: Dean J, Barroso L A. The tail at scale[J]. Commun ACM, 2013,56(2): 74-80.
[4]: David F Bacon, Nathan Bales, Nico Bruno, et al. Spanner:Becoming a SQL System: In Proceedings of the 2017 ACM International Conference on Management of Data[R]. New York: SIGMODA, 2017.


http://chatgpt.dhexx.cn/article/4FJ7svJ0.shtml

相关文章

系统可用性

一个网站、系统的战术包括可用性战术、可修改性战术、性能战术、安全性战术、可测试性战术、易用性战术。可用性是在某个考察时间,系统能够正常运行的概率或时间占有率期望值。它是衡量设备在投入使用后实际使用的效能,是设备或系统的可靠性、可维护性和…

系统可用性量表评估问卷

1,中文:可用性问卷 2,英文原版: sus Measuring Usability With The System Usability Scale (SUS) The System Usability Scale (SUS) was originally created as a “quick and dirty” scale for administering after usabili…

软件可靠性

知识点 主要难点和考点可靠性计算 串联系统 串联系统可靠性计算 并联系统 并联系统可靠性计算 并联系统有一个系统是可靠系统,整个并联系统就是可靠系统 1-R 表示系统的失效率 N模混合系统 可靠性计算 计算软件可靠性指标公式 可靠性:MTTF/(1MT…

软件测试中的可用性、可维护性、可靠性有什么区别?

我们生活在一个用户依赖于对服务的一致访问的可靠性时代。在相互竞争的服务之间进行选择时,对用户来说,没有比可靠性更重要的特性了。但是可靠性是什么意思呢? 为了回答这个问题,我们将根据可靠性工程中的其他度量来分解可靠性:可用性和可维护性。区分这些术语并不是语义…

可靠/可用性介绍

可靠/可用性主要目的是保护业务零中断和高用户体验。 可靠可用性基本概念 广义的可靠性(Reliability)由三个部分组成:可靠性(Reliability)、可维修性(Maintainability)和可用性(Avaliability)。其中狭义的可靠性是指产品在规定的条件和时间内完成规定功能的能力&a…

软件测试可用性常用指标

网站可用性 所谓网站可用性(availability)也即网站正常运行时间的百分比,业界用 N 个9 来量化可用性, 最常说的就是类似 “4个9(也就是99.99%)” 的可用性。 描述通俗叫法可用性级别年度停机时间基本可用性2个999%87.6小时较高可用性3个999.9%8.8小时具…

服务器系统可用性99.9,可用性99.9

可用性99.9 内容精选 换一换 云数据库 RDS服务支持切换主备实例的可用性策略,以满足不同业务需求。可选择 “可靠性优先”或者“可用性优先”两种策略。调用接口前,您需要了解API 认证鉴权。该接口仅支持MySQL引擎。仅支持主备实例,即:HA实例。实例在创建、数据库升级、创建…

软件设计中的可用性和可用性测试

什么是可用性 在创建软件的环境中,术语“可用性”表示一种方法,它将用户而不是系统摆在过程的中心。这一方法称作以用户为中心的设计,它从设计过程的一开始就将用户关心的问题和意见考虑在内,并提出在任何设计决策中用户的需要都应…

谈一谈软件系统的可用性

什么是可用性 系统的可用性用如下公式表示: 其中: MTBF:即平均无故障工作时间,英文全称是“Mean Time Between Failure”。是衡量一个产品(尤其是电器产品)的可靠性指标。单位为毫秒、秒钟、分钟、小时等…

功能测试 性能测试 可用性_6种可改善软件的可用性测试方法

功能测试 性能测试 可用性 Collette Stumpf是Surge的软件设计师。 成功的软件项目请客户,简化流程或以其他方式为您的业务增值。 但是,如何确保您的软件项目能够带来预期的改进? 用户会体验到更好的性能吗? 所有任务的生产率都会…

漫谈软件架构设计系列(一):可用性设计

作者:中国移动云能力中心 —— 胡建华 概要:高可用设计师应用软件架构设计的最基本要求,无论一个产品处于初创阶段还是快速增长期,作为一款商业软件面向用户提供服务,那么可用性的设计是必须予以考虑的。 一、基本概…

什么是服务器?服务器是干什么用的?

服务器 摘要: 服务器相信很多电脑爱好者都听过或者了解一些,一般我们很难看到真正的服务器,因为服务器一般均放置在机房重点,闲人一般均是免进的。比如我们每天浏览的网站、玩的游戏等,所有的数据均存在服务器&#x…

网络服务器是干什么用的

关于网络服务器介绍 定义 有时,这两种定义会引起混淆,如web服务器。 它可能是指用于网站的计算机,也可能是指像apache这样的软件,运行在这样的计算机上以管理网页组件和回应网页浏览器的请求。 服务器 服务器作为硬件来说&…

客户端与服务器

1.客户端与服务器 1.1 客户端 在前端开发中,客户端特指“Web 浏览器”。实际开发中,只要可以访问服务器的一端都属于客户端(手机、平板、电脑中的各种软件都可以是客户端)。 1.2 服务器 概念:服务器是提供服务的设备…

服务器是什么?它是用来干什么的?

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 一、服务器是什么? 二、服务器的作用 1、提高访问速度 2、提高安全性 三、云服务器与物理服务器 1、云服务器 云服务…

什么是伺服器

服务器/伺服器(server)是一种计算机,用于处理请求并通过 Internet 或本地网络将数据传送到另一台计算机。 大多数人将“服务器”一词理解为网络服务器,其中可以通过诸如网络浏览器之类的客户端在因特网上访问网页。但是&#xff0…

服务器的概念

第一次听到服务器的时候,脑子里的第一个想法就是,这个就是给计算机服务的东西吧,然而自己也是没有真的了解服务器的含义,总有点模棱两可的感觉,今天就找了一些关于服务器的资料,进一步的连接服务器。 服务…

服务器基本概念

服务器基本概念 服务器的前世今生 计算机分为64位和32位,64位为主流的计算方式,64位指令集就是运行64位数据的指令,也就是说处理器一次可以运行64bit数据。 服务器发展史: 大型机小型机X86服务器(工业标准服务器&a…

服务器是什么?

一.服务器是什么? 服务器是计算机的一种,它比普通计算机运行快、负或事高,价格。服务器网络中为其客户机(如PC机、智能手机、ATM等经端甚至是火车系统等大型设备)提供计算或者应用服务。服务器具有高速的CPU运算能力长时间的可靠运行、强大的1/O外部数…

何谓服务器(Server) ?

何谓服务器(Server) ? 定义 1.一个管理资源并为使用者提供服务的电脑软件,通常分为档案服务器(能使使用者在其它电脑存取档案),资料库服务器和应用程式服务器。 2.执行以上软件的电脑。 有时,这两种定义会引起混淆&am…