高可用架构理论方式

系统可用性判断,可以通过可用性指标SLA判断
理论分析:
在这里插入图片描述
实际建议公式分析:
在这里插入图片描述

  • 2个9表示系统基本可用,年度不可用时间小于88小时
  • 3个9是较高可用,年度不可用时间小于9个小时
  • 4个9是具有自动恢复能力的高可用,年度不可用时间小于53分钟

隔离

解耦是逻辑上分割,隔离是物理上分割,将低耦合的组件进行独立部署,互不干扰
分布式技术在业务上应用就是隔离,微服务将一个单体架构系统进行拆分,拆分成若干更细粒度的微服务,这些微服务之间互相依赖,实现原来大应用的功能逻辑。然后将这些微服务独立开发和部署,微服务之间通过RPC进行依赖调用

异步(比如消息队列)

异步在隔离的基础上进一步解耦,将物理上已经分割的组件之间依赖关系进一步切断,使故障无法扩散,提高系统可用性

例子说明:
注册消息发送给消息队列就返回,后续操作通过消费消息完成,即使某个操作发生故障也不会影响用户注册成功
在这里插入图片描述

备份

备份用于解决硬件故障下系统的可用性:一个服务部署在多个服务器上,当某个服务器故障的时候,请求可以切换到其他服务器上继续处理(负载均衡服务器通过心跳检测发现集群中某台应用服务器失效就不将请求分发给这台服务器)

比较常见的备份就是负载均衡
负载均衡主要解决高性能问题,但是多台服务器构成一个集群,这些服务器天然就是相互备份的关系,任何一台服务器失效,只需要将分发到这台服务器的请求发给其他服务器即可
在这里插入图片描述
应用服务器只运行程序,不存储数据,所以请求切换到任何一台服务器,处理结果都是相同的。对于存储数据的服务器,比如数据库,互相备份的服务器必须要互相同步数据(会占用空间)
例如:MySQL主从同步
在这里插入图片描述

重试

远程服务可以会由于线程阻塞、垃圾回收或者网络抖动,而无法及时返回响应,调用者可以通过重试的方式修复单次调用的故障
注意:
可重试的服务必须是幂等的
幂等:服务重复调用和调用一次产生的结果是相同的

熔断

重试主要是解决偶发因素导致的单次调用失败,但是如果某个服务器一直不稳定,甚至已经宕机,再请求这个服务器或者进行重试都没有意义,也是为了下游服务器产生的级联故障导致整个系统不可用
在这里插入图片描述

(用于防止微服务之间的故障扩散,提高系统的容错能力)

熔断的主要方式是使用断路器阻断对故障服务器的调用
在这里插入图片描述
断路器有三种状态,关闭、打开、半开。
断路器原理:断路器正常情况下是关闭状态,每次服务调用后都通知断路器。如果失败了,失败计数器就+1,如果超过开关阈值,断路器就打开,这个时候就不再请求这个服务了。过一段时间,达到断路器预设的时间窗口后,断路器进入半开状态,发送一个请求到该服务,如果服务调用成功,那么说明服务恢复,断路器进入关闭状态,即正常状态;如果服务调用失败,那么说明服务故障还没修复,断路器继续进入到打开状态,服务不可用

常见的断路器: Hystrix和sentinel

补偿

前面都是故障发生时如何处理,而补偿是故障发生后进行弥补错误或者避免损失扩大
比如将处理失败的请求放入一个专门的补偿队列,等待失败原因消除后进行补偿,重新处理

补偿最典型的使用场景就是事务补偿。在分布式应用中,多个相关的事务操作可能分布在不同的服务器上,如果某个服务器处理失败,那么整个事务就是不完整的
(详情看分布式事务文章)
按照传统的事务处理思路,需要进行事务回滚,即将已经成功的操作也恢复到事务以前的状态,保证事务的一致性

  • 传统的事务回滚主要依赖数据库的特性,当事务失败的时候,数据库执行自己的undo日志,就可以将同一个事务的多条数据记录恢复到事务之初的状态。
  • 分布式服务没有undo日志,需要开发专门的事务补偿代码,当分布式事务失效的时候,调用事务补偿服务,将事务状态恢复如初。

限流和降级

限流:
高并发场景下,如果系统的访问量超过系统的承受能力,可以通过限流对系统进行保护。
限流是指对进入系统的用户请求进行流量限制,如果访问量超过了系统的最大处理能力,就会丢弃一部分用户请求,保证整个系统可用
这样虽然有一部分用户的请求被丢弃,但大部分用户还是可以访问系统

降级:
部分系统功能是非核心的,但是也给系统产生了非常大的压力
比如电商系统中确认收货的功能:即使用户不确认收货,系统也会超时自动确认。确认收货会对数据库产生很大压力:它要进行更改订单状态,完成支付确认,并进行评价等一系列操作

系统高并发时可以将确认收货、评价这些非核心的功能关闭,也就是对系统进行降级,节省系统资源

多活

多活:异地多活
在多个地区建立数据中心,并都可以对用户提供服务,任何地区级的灾难都不会影响系统的可用
异地多活的架构需要考虑的重点是:

  • 用户请求如何分发到不同的机房去。这个可以在域名解析的时候完成,也就是用户进行域名解析的时候,会根据就近原则或者其他一些策略,完成用户请求的分发
  • 多个机房都可以独立对外提供服务,也就意味着每个机房都要有完整的数据记录。用户在任何机房完成的数据操作,都必须同步传输给其他的机房进行数据实时同步(数据一致性问题解决:多个机房在某个时刻是有一个主机房的,某些请求只能到达主机房才能被处理,其他的机房不处理这一类请求,以此来避免关键数据的冲突)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值