高可用架构(上)

编号94530 编号94530     2022-12-19     683

关键词:

1. 背景

在学习完各种高性能发实现方案后,就需要对三大复杂度一直的高可用进行开刀了,在高可用方面主要有哪些东西是我们需要考虑的呢?接下来将从三个方面逐一分析。

2. 理论

在设计高可用架构理论方面,我们主要有2个方向选择,分别是CAP理论和BASE理论,那什么是CAP,什么是BASE呢? 这个还是要好好分析一下。

2.1 CAP

  • C(Consistence):一致性
  • A(Availability):可用性
  • P(Partition Tolerance):分区容错性

一致性:指的是从所有节点获取的数据都是最新的(最新,那就是每个节点数据都是最新的数据,相同的)。

可用性:非故障节点在合理时间内返回合理响应。这个主要是为了排除一些非正常响应,如:超时,或者错误的结果

分区容错性:在发生网络异常时,系统能够继续保持任务运行

CAP理论有三个,但是在分布式系统中来说,只能选择其中两个。多系统网络中,我们无法保证网络100%正常,所以必须要选择P,保持系统继续运行,然后才是在C、A之间做取舍。如果选择CP, 那就是需要保证数据的一致,当无法保证数据一致时,就要对异常节点剔除,就无法保证系统可用性。当选择AP,当网络波动时,数据无法同步,无法保持最新数据,但系统可以访问。

通过上面的描述,有没有发现一个问题?这些理论都是针对数据来说的,当CP时,数据保证了一致,当AP时,数据不一致。我们有一个误区,认为系统设计一定要选AP,或者CP。其实这样是不正确的。因为在同一个系统中,可能部分数据需要保证AP,有一部分数据需要保证CP,例如:关于金额的数据则需要保证AP,但是用户相关昵称、简介可以使用AP。

所以,在系统正常运行的时候,是不存在选AP,还是CP的,我们应该同时关注CA。CAP的理论的前提是发生了网络分区,但是,当网络正常时,我们没有必要放弃A或C,我们应该同时满足。

2.2 BASE

  • B(Basically Available):基本可用
  • S( Soft State):软状态
  • E(Eventual Consistency):最终一致性

基本可用:分布式系统发生故障的时候,保证系统能够基本运行,允许损失部分可用性

软状态:过渡期,数据处于某中非最终状态。可以理解为:数据不一致

最终一致性:系统中的数据经过一段时间后,最终达到一致的状态(非实时一致)

BASE理论是对CAP理论的一种补充,在CAP中,C大多数指的情况是强一致性,在同一时刻,从所有节点获取的数据是相同的。而在BASE中,则通过软状态,和最终一致性来保证系统可用,而非在同一刻数据相同,而是通过一段时间后,所有节点数据相同。或者说,当系统发生分区故障时,数据不一致也可以使用,而最后通过通过,达到所有节点数据一致。

3. 接口层面

当在理论方面选择完可用性后,我们就需要在接口层面来考虑系统的可用性了。不然,一个接口调用,就搞挂系统,这样可就丢人啦。

通常,我们从接口层面考虑可用性主要分为4个方面,相信大家也是耳熟能详。分别是:熔断,限流,降级,排队。接下来就从这4个方面介绍。

3.1 熔断

熔断,这就和我们生活中的保险丝很像,当功率过大的时候,保险丝就会断掉,防止功率过大,引起火灾。我们在进行接口设计时,也需要考虑熔断,当系统接口调用失败,达到一定失败率或压力时,应该熔断系统。这里的熔断,不是指挂掉接口,而是快速响应。我们通过自定义响应内容,快速返回结果,响应客户端。熔断的核心理念也就是快速响应,保证系统可用。

3.2 限流

限流。这个就像我们周五进地铁,由于人多,防止地铁里的人员发生踩踏,拥挤事件,就在地铁口弄几个架子,让人慢慢排队,减小入口流量,保证地铁里的人流能够正常运行。限流和地铁这个没有大的区别,防止系统应对过大的流量,压垮系统,则通过闸口,控制进入系统的流量,这样可以使得系统在一个合理的流量内运行,保证了系统的正常运行。我们通过这样可以看得出来:限流是通过外部方式,来解决系统可用性。

3.3 降级

降级,那就是在流量高峰期间,关闭或减少系统其他功能,保证系统的核心功能可用。举个栗子:那就是淘宝双11的时候了,只能下单,而不能就行查单/或者只能查询最近几天的单。为什么呢?因为用户下单后可能进行大量的查单操作,占用大量系统资源,那就会影响下单,影响业务收入,这样就得不偿失。通过关闭查单,保证下单可用,这样就保证了核心系统的可用。

3.4 排队

排队,顾名思义,就是排队。就像网红奶茶店,大家都挤着去买奶茶,人员忙不过来,那咋办? 那大家就排队呗,在这等着,然后等到你的时候,在给你响应。在系统中,我们可以通过暂缓用户请求,排在队列中,让用户等待,限制处理量,等处理后在给用户响应。大家应该也有所发现,排队和限流还是蛮像的,限流是直接拒绝,而排队,是让用户等待。

4. 存储

从理论,到接口,那么接下来就是存储方面的高可用。在互联网中,大量的用户,大量的数据,带来的极多挑战,那么,我们到底有什么方案可以保证存储高可用呢?

存储高可用的本质都是通过将数据复制到多个存储设备,通过数据冗余的方式来实现高可用。其主要的复杂性体现在:数据同步延时和数据复制中断带来的数据不一致问题。所以我们也主要从四个方面考虑问题。1、数据如何复制,2、各个节点的职责,3、如果应对复制延迟,4、如果应对数据复制中断。

4.1 切换方式

常见的分布式方案有;主从,主备,主主

4.1.1 主备

主备,从字面意思理解,就是一个主节点,一个备机。 主节点用来处理所有的操作。备机从主节点备份数据,但是不对外提供服务。这种方式就是简单,切换主,备客户端无感知。缺点就是:备机仅仅用来备份,有些浪费。

4.1.2 主从

主从,从字面理解就是一个主人,一个随从。随从和备机还是有区别的,随从需要干活,备份不需要。主从和主备相似,只是从机需要提供查询服务。这中方式弥补了主备方式备机浪费的缺点,但也带来了新的问题,主从复制延迟问题,客户端需要根据情况切换到主机或备机。

4.1.3 主主

主主,顾名思义,就是两个节点都是主节点。双主带来的好处就是任何一个节点都可以进行读写操作,但缺点也显而易见。双主节点需要对对方的数据进行同步,这样就带来了同步延时的问题,同时,在同步的时候还会带来数据重复的问题。如:在A服务注册了手机号为F的用户,在B服务业注册了手机号为的用户,在合并时如何处理的。所以,在未考虑复杂性的时候,主主更适用于数据具有可重复性,可丢失的场景。

4.2 双机切换

我们从主备和主从的方案中发现,当主节点挂掉后,就无法在对外提供服务。这样就会导致服务宕机,那么我们就要采取一个合适的方案,来进行新的主节点的选取,那么就涉及到了双击切换

要设计切换方案,我们就要从这几个方面考虑:

4.2.1 主备间状态判断

主要包括:1、状态传递的渠道,也就是通过什么样的方式来传递内容。 2、 状态检测的内容:主要是通过什么东西来判断主节点是否挂掉,如:断电,进程死亡?

4.2.2 切换的决策

切换决策主要包含几个方面:1、什么时候切换,2、如何切换,3、切换的方式如何?

4.2.3 数据冲突问题

我们在切换过程中,可能主备/主从之间数据还未完全同步,如何保证切换后数据一致,这个就有点类似上面的主主方案了。

5. 总结

以上分享的是高可用架构理论,接口,存储方面的理论知识,在设计高可用的时候还是有许多要考虑的。如果有什么问题,欢迎指正,讨论

azure技术12-高可用--在azure上创建典型高可用架构应用

...aS与云端PaaS,本次我将在Azure上部署一个最简单最常规的高可用架构,云端产品主要包含,PaaS层采用AzureDatabaseforMYSQL作为数据库后端服务器,部署两台Windows虚拟机做前端应用服务器,部署一套PHP论坛,并采用Azure负载平衡器来分... 查看详情

azure技术12-高可用--在azure上创建典型高可用架构应用

等待安装完成将PHPBB的文件夹中的数据复制到相应的目录中,我这里为了方便直接放到了wwwroot文件夹中,就不需要另外建网站,直接用默认网站然后我们展开至Install文件夹,找到index.html浏览来安装PHPBB论坛根据提示一步一步配... 查看详情

azure技术12-高可用--在azure上创建典型高可用架构应用

...这里要注意,有负载平衡需求一定要在创建虚拟机时创建可用性集,不然后面做负载平衡时是没法 查看详情

mysql高可用集群架构-mha架构(代码片段)

简介MHA(MasterHighAvailability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过... 查看详情

架构设计复杂度-高可用问题

高可用指的是系统无中断的执行功能的能力一个系统不可能一直无中断的执行下去,干扰因素有三个方面硬件因素,机器宕机软件故障,软件BUG不可抗因素,地震、火灾、断电等 解决高可用问题的方案 本质上通过数据冗余... 查看详情

唯品会滴滴沪江架构师,关于微服务粒度高可用持续交互的实践分享交流(上)

...滴架构师赵伟、七牛云技术总监肖勤,对微服务粒度、高可用、持续交互展开了交流。第一轮:自由交流沪江黄凯:大家好,我是来自沪江的Java架构师黄凯。第一次接触微服务这个概念是在三年前IBM的一次Devops培训上,其开发... 查看详情

唯品会滴滴沪江架构师,关于微服务粒度高可用持续交互的实践分享交流(上)

...滴架构师赵伟、七牛云技术总监肖勤,对微服务粒度、高可用、持续交互展开了交流。第一轮:自由交流沪江黄凯:大家好,我是来自沪江的Java架构师黄凯。第一次接触微服务这个概念是在三年前IBM的一次Devops培训上,其开发... 查看详情

mariadb高可用架构之mha(代码片段)

MHA(MasterHighAvailability)该软件由两部分组成:MHAManager(管理节点)和MHANode(数据节点)。MHAManager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHANode运行在每台MySQL服务器上,MHAManage... 查看详情

美团点评数据库高可用架构的演进与设想

美团点评数据库高可用架构的演进与设想金龙 ·2017-06-2920:11本文介绍最近几年美团点评MySQL数据库高可用架构的演进过程,以及我们在开源技术基础上做的一些创新。同时,也和业界其它方案进行综合对比,了解业界在高可... 查看详情

java高可用集群架构与微服务架构简单分析

...为代表的微服务时代,我要还要整理这种已经“过时”高可用集群架构?本人工作上大部分团队都是7-15人编制的开发团队,对应的公司项目也大都是中小型项目,最大的项目PV/UV也就只有10w/2w。在这样的场景下,中小型公司一般... 查看详情

面向业务的立体化高可用架构设计

面向业务的立体化高可用架构设计摘要:为了实现阿里九游游戏接入系统的业务高可用,技术人员跳出传统的面向系统的高可用的思路,转而从业务的角度来整体考虑高可用,最终实现了一套立体化的高可用架构,本文逐一展示... 查看详情

mysql实现高可用架构之mha(代码片段)

二、MHA服务2.1服务角色  MHA服务有两种角色,MHAManager(管理节点)和MHANode(数据节点):MHAManager:  通常单独部署在一台独立机器上管理多个master/slave集群(组),每个master/slave集群称作一个application,用来管理统筹整个集群。MHAn... 查看详情

高可用高扩展低延迟交易处理系统架构设计

为实现一个高TPS、高可靠性、高扩展性、低响应延迟的交易处理系统,在系统架构设计上,需要有诸多考虑。 1.交易处理系统的功能 交易系统是用于连接多个不同的交易请求系统(上游系统)与交易受理系统(下游系统... 查看详情

数据库高可用实战案例-------架构优化之清爽一夏

  说到高可用,看官们会想到很多方案,也许是自亲身经历过系统从单机变成高可用的痛苦过程,也许有的看官只是在自己的虚机上搭建过测试的玩具。今天本篇用我自己的真实经历给大家讲述,不管怎么样实战和测试玩耍还是很... 查看详情

高可用架构案例一

高可用架构Keywords分层解耦交易系统缓存分区一致性资源隔离重点保障某移动高可用架构分渠道资源隔离部署短信渠道业务处理机制-------------------------------------------------------------------------------------------------------------------------------... 查看详情

9种高性能可用高并发的技术架构

1、分层  分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对简单并比较单一的职责,然后通过上层对下层的依赖和调度组成一个完整的系统。  在网站的分层架... 查看详情

高可用高并发常用到的9种技术

1、分层分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对简单并比较单一的职责,然后通过上层对下层的依赖和调度组成一个完整的系统。在网站的分层架构中,常... 查看详情

高并发高可用架构设计之目录

简介架构图 查看详情