写点什么

系统高可用原因分析 & 方案

用户头像
Mars
关注
发布于: 2021 年 01 月 02 日

导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述

 

可用性度量

对可用性的定性描述,两个 9 是基本可用;3 个 9 是较高可用;4 个 9 是具有自动恢复能力的高可用;5 个 9 是极高可用,年度停机小于 5 分钟,这个需要运气,因为造成系统不可用的因素实在太多。

 

影响系统高可用的因素

l  硬件故障

l  软件 bug

l  系统发布

l  并发压力

l  网络攻击

l  外部灾害

 

高可用系统架构方案

解耦

l  高内聚、低耦合的组件设计原则

l  面向对象基本设计原则

l  面向对象设计模式

l  领域驱动设计建模

隔离

l  业务与子系统隔离

l  微服务与中台架构

l  生产者与消费者隔离

l  虚拟机与容器隔离

异步

l  多线程编程

l  响应式编程

l  异步通信网络编程

l  事件驱动异步架构

备份

l  集群设计

l  数据库复制

l  CAP 原理

Failover(失效转移)

l  数据库主主失效转移

l  负载均衡失效转移

幂等

服务重复调用时不可避免的,必须 保证服务重复调用和调用一次产生的结果相同,即服务具有幂等性。

事务补偿

l  传统事务 ACID

l  分布式事务 BASE

基本可用(Basic Availabilty),软状态(soft-state)、最终一致性(Eventual-consistency)

通过执行业务逻辑逆操作,使事务回滚到事务前状态。

重试

远程服务由于线程阻塞、垃圾回收或者网络抖动,而无法及时返回响应,调用者可以通过重试的方式修复单次调用的故障。

上游调用者超时时间要大于下游调用者超时时间之和。

熔断

当某个服务出现故障,响应延迟或失败率增加,继续调用这个服务会导致调用者请求阻塞,资源消耗增加,进而出现服务级联失效,这种情况使用断路器阻断对故障服务的调用。

断路器三种状态:关闭、打开、半打开

限流

在高并发场景下,如果系统访问量超过系统承载能力,可通过限流进行保护。如果超过系统最大处理能力,就会丢弃一部分用户请求,保证大部分用户能够访问系统。

限流几种算法:

l  计数器算法(固定窗口、滑动窗口)

l  令牌桶算法

l  漏桶算法

自适应限流

实时自动评估 QPS。

业务流量的不确定性与技术方案的自适应性天生一对。

 

降级

非核心功能关闭,减少系统压力。

异地多活

如果数据中心城市遭遇地震,机房遭遇火灾或停电等不可控的因素,一般采用异地多活多机房架构策略,异地多活难点是数据一致

 

高可用系统运维

自动化测试

目前大部分网站采用 web 自动化测试技术,使用自动测试工具或脚本完成测试。比较流行的 selenium 运行在浏览器中,模拟用户操作进行测试,可以同时完成 web 功能测试和浏览器兼容测试。

自动化部署

开发人员开发完功能后,提交代码到 git 仓库,自动测试部署。

持续部署三步走

l  持续集成:允许工程师随时向公共分支提交代码,并立即进行自定化测试。

l  持续交付:除了跑单元测试及软件包,持续交付机制会将软件部署到各种测试环境中。

l  持续部署:代码在没有人工干预的情况下被