11 周命题作业
导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
导致系统不可用的原因有:
硬件故障
硬盘故障,内存故障,cpu故障。所有的硬件都是有使用期限的,超过了使用期限很有可能发生故障。
软件bug
软件漏洞,开发bug都有可能造成系统的不可用。
系统发布
系统发布时,由于上线了新功能,或者更改了配置项,造成系统的不可用。
并发压力
并发请求太多,超过了系统的设计极限,导致系统崩溃不可用。
网络攻击
黑客利用系统漏洞或者Ddos攻击造成系统并发压力过大或者直接进入服务器,关闭了服务,造成系统不可用。
外部灾害
地震,电缆被挖断,机房空调坏了导致服务器温度过高关机,外部灾害发生的时候,往往令人防不胜防。
保证系统稳定高可用的方案有:
解耦
减少组件之间的依赖关系,降低系统的耦合度。
设计时使用下面的方法可以降低系统的耦合度:
1)高内聚,低耦合的组件设计原则
2)面向对象基本设计原则
3)面向对象设计模式
4)领域驱动设计建模
隔离
隔离就像防火墙一样,当一个组件发生问题时,保护其他组件不发生问题。
隔离分成很大方面,比如:
业务与子系统隔离
微服务与中台架构
生产消费者隔离
虚拟机与容器隔离
异步
使用异步的方式来提高系统的性能,从而提高系统的可用性。
异步的实现方法包括
多线程编程
反应式编程
异步通信网络编程
事件驱动异步架构
备份
服务采用集群的方式部署,数据库进行主从复制备份数据
Failover(失效转移)
数据库可以设计成主主复制的形式,方便进行失效转移
负载均衡失效转移
设计无状态的服务方便进行失效转移
幂等
服务重复调用和调用一次产生的结果相同,这就是服务的幂等性。
有些服务天然就具有幂等性,比如将用户的性别设置为男性。但是有些操作,比如交易操作,问题就比较复杂,需要通过交易编号进行服务调用有效性校验,只有有效的操作才继续执行。
事务补偿
通过执行业务逻辑逆操作,使事务回滚到事务前的状态。
重试
远程服务可能会由于线程阻塞,垃圾回收或者网络抖动,而无法及时返还响应,调用者可以通过重试的方式修复单次调用的故障。
熔断
当某个服务出现故障,响应延迟或者失败率增加,继续调用这个服务会导致调用者请求阻塞,资源消耗增加,进而出现服务级联失效,这种情况下使用断路器阻断对故障服务的调用。
限流
限流是指对进入系统的用户请求进行流量限制,如果访问量超过系统的最大处理能力,就丢弃一部分用户的请求,保证整个系统可用,保证大部分用户是可用访问系统的。这样虽然有一部分用户的请求被丢弃,产生了部分不可用,但还是好过整个系统崩溃,所有的用户都不可用要好。
限流的几种算法:计数器算法(固定窗口,滑动窗口),令牌桶算法,漏桶算法。
降级
关闭非核心的功能,将宝贵的系统资源留下来,用来支持核心功能。
异地多活
将数据中心分步在多个不同地点的机房里,这些机房都可以对外提供服务,用户可以连接任何一个机房进行访问,这样每个机房都可以提供完整的系统服务,即使某一个机房不可用,系统也不会宕机,仍然保持可用。异地多活的难点是数据一致。
评论