Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何理解高可用架构设计原理

如何理解高可用架构设计原理

作者头像
小坤探游架构笔记
发布于 2025-05-26 03:30:36
发布于 2025-05-26 03:30:36
1140
举报

在分布式系统中最重要的抽象概念之一是共识, 即在网络、进程故障等情况下,让所有非故障节点在某一件事情上达成一致.那么在实现共识的过程中,我们就需要在理论与实践中去发现哪些可行, 哪些不可行.对此我们需要了解什么是分布式一致性, 它和我们构建一个高可用系统架构有什么关联? 同样今天来谈谈自己的思考.

高可用原理本质

一谈到高可用架构设计, 想必我们都会想到采用“冗余”来实现高可用.即服务不可用,增加冗余服务;节点不可用,增加冗余节点;数据不可用,增加冗余数据副本.这个时候我们的系统将由单体服务由于引入冗余机制组成“自己”的集群,即:

从上述集群架构中我们仅看到了多份相同的服务、节点和数据,但是要实现高可用,还需要一个关键能力,即自动故障转移.

什么是自动故障转移,在上述的服务/节点集群架构中, 我们试想下如果此时客户端请求集群服务,那么引入冗余机制之后, 起初我们的架构如下:

从上述我们也很容看到, Client是没有感知到下游故障节点,还是会将请求转发到对应的故障节点中.也就是我们Client如果能够感知到下游节点的变化,那么我们Client就能够进行决策,不将请求转发到故障节点上,因此上述自动故障转移其中一个关键因素就是状态感知并决策的能力.

因此我们实现高可用架构的关键在于增加冗余并实现自动故障转移机制,而实现自动故障转移的核心是状态感知并进行决策的能力,也就是说我们集群中的服务、节点以及数据需要通过协调彼此状态来进行决策.

分布式一致性与高可用状态决策

既然我们知道自动故障转移是依赖我们协调对应的节点来进行决策,在前面我们讲述过共识算法是一种通用有效保障的抽象,因此我们这里的共识算法就是实现一个状态检测与决策,那么基于上述的基础上,我们在冗余的集群引入共识算法来实现高可用,这个时候我们的架构就会出现以下的演变方式,即:

上述状态决策是我们高可用架构状态决策中常用的两种方式, 即独裁式以及民主状态决策, 内部都是依托我们的共识算法来实现.比如我们Redis的Sentinel哨兵机制就是独裁式决策, 而ZK集群则是民主式决策.

因此这个时候我们再来理解分布式一致性的含义可能会更容易理解, 分布式一致性就是协调各个节点的状态以达成状态决策的一致性,而这个状态主要有两种, 其一是我们现在看到实现高可用需要感知到节点状态并进行状态的决策; 其二是对于数据存储高可用服务, 还包含另外一个状态, 即数据的一致性, 从而产生CAP以及BASE理论两大框架来辅助我们如何就数据一致性进行架构设计与决策.接下来我们再来看下数据层面的一致性设计.

强一致性与CAP定理

在存储高可用架构中, 除了节点状态的一致性, 同时还存在数据的一致性问题,那么数据一致性是怎么产生的呢?

这里我引用《设计数据密集系统》一书的一个例子, 假如先Alice以及Bob坐在同一个房间使用不同的手机查看足球世界杯,这个时候世界公布比分不久, Alice刷新了页面看到最新的公布结果看到了公布的获胜方, 然后告诉了Bob; 然而Bob刷新了自己手机的页面却一直没有看到最新的结果,这是为什么呢?

原来Alice的请求转发的数据follow1的副本, 而Bob的请求却给转发到了Follow2的副本,可以看到Follow2的副由于存在网络延迟导致数据复制滞后, 而这段时间Bob看到的结果还是旧的一份数据, 即:

从上述可以看到我们设计数据存储的高可用代价就是存在数据的一致性, 即leader节点将通过指定的复制方式发送复制数据格式到对应的数据副本节点上,而数据一致性的产生正是由于复制过程中存在网络延迟导致数据不一致.

那么怎么解决这个问题呢? 还是一样利用共识算法来实现数据的一致性.我们可以看到上述导致数据读取不一致性根本原因是啥? 就是客户端请求不知道当前数据存储存储到底哪一个数据副本节点是最新的, 这个时候我们同样引入共识算法来协调存储集群内部当前最新数据状态的副本有哪些并达成共识,这个时候请求过来的时候先通过共识算法协调请求应该落到哪个节点能够读取最新的数据.

其实与前面处理节点的方式是类似的,只不过这里的192.168.1.21的节点并非是不可用节点,而是数据不是最新节点,如果采用左边的架构方式,那么当Client请求192.168.1.21节点的时候就会将请求转发到其他最新的节点上; 而如果是引入协调者, 那么就不会将请求转发到192.168.1.21节点上.这个时候就是我们所说的线性一致性,即强一致性模型.

在我们的CAP定理中的C就是强一致性模型,相对于分布式一致性,它的范围更小,它主要是强调在非数据共享架构且存在数据复制的架构下,如何协调数据最新状态的一致性,即读己之所写的一致性模型.CAP是建立在FLP定理无网络延迟的假设条件下, 阐述一致性、可用性以及分区容忍只能满足其中两个属性.

从上述可以看出CAP忽略了实际网络分区的存在,而且如果我们用CAP来描述系统, 其实是不正确的,因为一个系统的数据可以是满足AP, 也可以是满足CP, CAP关注的是单个数据,并且是在非数据共享以及数据复制架构前提下去讨论我们数据的一致性,因此我们CAP的不可能三角以及对应的限定条件如下:

最终一致性与BASE理论

从上述的实现我们看到192.168.1.21这个节点其实并非故障,但其实就是不能进行请求处理,因为我们要保证读己之所写的线性一致性而牺牲这个节点对外服务并存在浪费资源情况. 如果期间经过了时间T,Bob重新刷新页面发现数据更新了,那么这个时候Alice以及Bob看到的页面结果是一致,只是存在时间差的问题, 一旦我们能够容忍这种故障,那么192.168.1.21这个节点也将会加入服务提供列表中支持处理请求, 这个时候我们服务的可用性也将会提升, 即由原来的2台提升至3台并对外提供服务,同样也提升了资源利用率.

像上述的数据表现是允许短时间内出现数据不一致,即混沌状态,但是经过一段时间之后,我们的数据最终表现为一致的,我们称之最终一致性.对于最终一致性在分布式系统中存在一个BASE理论,是由eBay架构师Dan Pritchett于2008年提出,作为对CAP理论中的AP场景实践的补充,强调通过弱化一致性实现系统的高可用,即:

BASE理论含义:BASE是“Basically Available(基本可用)”、“Soft state(软状态)”和“Eventually consistent(最终一致性)”三个短语的缩写,由eBay架构师Dan Pritchett提出。核心思想即使无法做到强一致性, 但应用也能够采用合适的方式达到最终一致性.

  • 基本可用(Basically Available) :读写操作尽可能可用, 但写操作存在冲突的时候可能会丢失结果, 读操作可能读取到旧值, 即上述192.168.1.21节点也纳入服务提供列表中对外提供服务.
  • 软状态(Soft State) :允许系统数据在一段时间内处于中间状态,而不是立即同步到一致状态. 比如Alice看到最新结果,但是Bob还是未看到最新结果,表现就是数据不一致.
  • 最终一致性(Eventually Consistent) :如果系统运行正常且等待足够长的时间,系统最终将达成一致性的状态.比如Bob最终也会和Alice看到相同的比赛结果.

从这里我们可以看出BASE理论是在我们CAP基础上进行属性弱化,由CAP中的强一致性弱化为最终一致性, 而可用性弱化为基本可用, 对此我们可以将CAP以及BASE理论进行对比如下:

总结

至此我们已经对共识与FLP定理、CAP定理以及BASE理论有了一个认知,这里我把之前的知识点串起来如下:

那么当我们要进行高可用架构的时候,如何运用上述来辅助我们进行架构落地呢? 这里我总结并画了张以供参考:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小坤探游架构笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
高可用架构笔记
https://www.cnblogs.com/mushroom/p/13788039.html
早起有点困
2021/01/30
7580
架构学习书摘总结(三)高可用架构模式(上)
最近阅读了一本架构方面的入门图书叫《从零开始学架构:照着做,你也能成为架构师》,部分内容比较不错,先做书摘总结,以便加深印象与未来回顾学习。
ZNing
2020/05/13
7000
万字详解高可用架构设计
系统高可用是一个宏大的命题,从设计思想、架构原则到工程能力、服务管理等等方方面面,每个视角单拆出来都不是一篇文章可以解决的。本文将从大局上全面系统地梳理高可用系统架构,起到一个提纲挈领的作用。
腾讯云开发者
2025/01/07
6.1K1
万字详解高可用架构设计
全面剖析 MongoDB 高可用架构
MongoDB 是一款功能完善的分布式文档数据库,是一款非常出名的 NoSQL 数据库。当前国内使用 Mongodb 的大型实践越来越多,MongoDB 为我司提供了重要的数据库存储服务,支撑着每天近千万级 QPS 峰值读写,数万亿级数据量存储服务。
码哥字节
2021/04/08
9820
全面剖析 MongoDB 高可用架构
怎样实现YashanDB的高可用性架构设计?
在现代应用中,数据库系统的高可用性是保障业务连续性和数据安全性的关键指标。如何设计一个既能保证数据一致性,又能在节点故障时实现快速切换和恢复的高可用数据库架构,是数据库技术领域的重要挑战。本文以YashanDB为例,深入分析其高可用性架构设计的核心技术及实施方案,帮助读者理解并应用于实际项目中。
数据库砖家
2025/08/14
1190
YashanDB高可用架构设计,保障企业业务零中断
在现代企业业务系统中,数据库的高可用性直接决定了业务的连续性和稳定性。业务中断不仅导致数据损失,还影响用户体验及企业信誉。因此,如何设计一套具备高可用性的数据库架构,能够实现故障的快速切换和无缝恢复,是企业数据库建设中的关键问题。
数据库砖家
2025/08/19
1050
架构设计 3-高可用架构之CAP理论
导读:《架构设计》系列为极客时间李运华老师《从0开始学架构》课程笔记。本文为第三部分,主要介绍分布式系统中的 CAP 理论以及相关的 ACID 理论和 BASE理论。对分布式系统架构有一个理论上的感知。
aneutron
2022/08/19
5970
技术角 | 架构学习书摘总结(三)高可用架构模式(下)
最近阅读了一本架构方面的入门图书叫《从零开始学架构:照着做,你也能成为架构师》,部分内容比较不错,先做书摘总结,以便加深印象与未来回顾学习。
ZNing
2020/05/13
9490
分布式系统 概念 高可用 高并发 学习笔记
分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。
大鹅
2020/06/28
9090
分布式系统 概念 高可用 高并发 学习笔记
企业级 IP 电话系统高可用架构设计详解
设计高可用架构需要合理部署以下核心组件,每个组件的高可用性都直接影响系统的整体表现:
杜金房
2025/03/27
5310
企业级 IP 电话系统高可用架构设计详解
分布式架构设计概要
在互联网企业中,经常离不开的术语就是分布式架构和微服务相关的词汇,如果让你来设计一个分布式系统,你会以什么样的维度去构思我们的分布式系统呢?首先,我们需要明白为什么需要分布式系统,它的实现目标是什么;其次当我们对分布式目标清晰之后,那么我们实现可以从目标的维度思考可采取的技术手段有哪些;接着我们对技术栈知识有了一个基本认知之后,这个时候又要要求我们思考架构设计的不仅是全局宏观的技术栈视野,还要具备全局的业务服务视野来思考并落地我们的分布式架构的设计。因此对于分布式架构的学习是一个漫长的过程,先要清楚目标,然后弄明白实现目标的技术方案,最后结合我们的技术栈与业务体系从宏观以及微观上去思考并落地我们的分布式架构设计。
小坤探游架构笔记
2020/05/20
2.8K0
从MySQL高可用架构看高可用架构设计
高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。
用户1516716
2019/08/23
9850
从MySQL高可用架构看高可用架构设计
面向业务的高可用架构设计
· 再好的技术、再完美的规章 , 在实际操作层面也无法取代人自身的素质和责任心 。
架构精进之路
2021/03/15
8900
高可用 - 简述
高可用性 描述了一个周期内的功能连续可用的绝对程度,可表示为正常运行时间和停机时间之间的关系,如下公式:
张云飞Vir
2020/05/08
1.9K0
怎样做YashanDB实现数据库高可用架构
在现代企业和关键业务系统中,数据库的高可用性是保障业务持续运行的重要基础。如何构建一个高可用的数据库架构,不仅关乎业务的稳定性,也直接影响系统的可靠性和服务水平。本文将基于YashanDB的架构与技术特点,系统阐述实现数据库高可用的架构方案及关键技术,为提升数据库服务的稳定性和连续性提供技术指导。
数据库砖家
2025/07/23
810
服务器又崩了?深度解析高可用架构的挑战和实践
导读 本文是腾讯云微服务平台TSF的产品经理刘阎同学的产品分享,这次分享紧紧贴近目前企业面临的问题,对于服务器异常,业务流量激增提出高效的解决方案。然后从微服务架构挑战,微服务设计,高可用最佳实践这三个方面逐渐深入。  刘阎  腾讯云产品经理 5年ToB产品策划以及中间件开发工作经验 熟悉微服务、容器、Devops等产品,对分布式系统容灾架构设计具有丰富的实践经验 “ 大家好,我是腾讯微服务平台TSF 产品经理刘阎,目前主要负责TSF高可用能力建设及演进规划工作,本次分享我会结合自己对微服
腾讯云中间件团队
2021/07/15
9900
分布式存储系统一致性与可用性的较量,服了!
我们要知道,无论技术如何发展,要想保证系统的高可用,其核心最本质的方法就是 “冗余”。冗余,就是为我们的系统多创建几个副本,来增加系统的可靠性和容错性。
架构师修炼
2023/09/03
5700
分布式存储系统一致性与可用性的较量,服了!
架构师必须掌握的架构设计原则
来自 Craig Larman 的软件设计书《UML 和模式应用》,Larman 在书中提出软件设计的关键任务是职责分配,并提炼总结出 9 种 (5 种核心 +4 种扩展) 软件职责分配模式,这些模式是比 GoF 设计模式更抽象的元模式。
架构狂人
2023/08/16
4110
架构师必须掌握的架构设计原则
一定要了解的分布式一致性原理
分布式系统是一个硬件或者软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。
鲁大猿
2020/09/23
1K0
一定要了解的分布式一致性原理
如何理解高可用数据复制原理
一谈到复制技术,相信我们大部分都有一个认知,那就是实现数据存储的高可用,其实进行数据复制也不仅仅是实现高可用,同时也是边缘加速以及提升读性能的一个技术手段,今天我就来讲述下复制技术原理,也是作为学习过程中的一个笔记记录.
小坤探游架构笔记
2025/06/09
910
如何理解高可用数据复制原理
相关推荐
高可用架构笔记
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档