写点什么

安全稳定第十一周作业「架构师训练营第 1 期」

用户头像
天天向善
关注
发布于: 2020 年 12 月 06 日

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

系统不可用的原因,可能有硬件故障,应用本身严重 bug,系统发布时需要停机等操作,并发压力资源耗尽,垃圾回收压力,网络攻击,外部灾害,服务器宕机,网络不稳定闪断情况,光纤挖断等。

提升高可用,可以从解耦,隔离,异步,备份,失效转移,幂等性,事务补偿,重试,熔断,限流,异地多活等方式改善。

解耦,软件设计使用面向对象的设计原则与模式,使用领域驱动设计建模等工具方法。

隔离,业务与子系统隔,生产者与消费者通过消息队列隔离,使用微服务架构进行物理隔离,使用虚拟机与容器将不同业务,应用物理隔离。

异步方式,涉及多线程编程,异步通信的方式网络编程,事件驱动异步架构进行主题订阅模式。

备份的方式,主备分式,备节点不提供服务,当主节点失效,备节点自动切换变成主节点。主从,一个主节点多个从节点,读写分离等设计。集群设计,多个平等节点配合负载均衡对外提供服务。

失效转移,数据库主主失效转移,负载均衡失效转移,通过设计无状态的服务,设置连接响应一定超时与失败次数,是否需要投票等方式减少误判等确认失效进行转移。

服务的写请求保障幂等性,让失效转移重发到其它服务请求,多次处理的结果都是一样。创建交易编号,处理完成设置交易编号的状态,每次处理时先判断交易编号是否存在和状态是否完成。

事务补偿,通过逻辑层进行业务的反向操作,失败的时候,通过逆操作反向操作,让数据还原。这种方式也能实现事务的一致性。

重试,上游的超时时间要下游的超时时间之和,当服务失效或超时,则发起重试,一般写服务需要保证幂等性才可以自动重试,读服务一般可以自动重试。

熔断,减少一个服务故障时,级联让其它服务也故障,最后系统崩溃。服务故障时,当达到一定阀值,则拒绝。过一段时间,偿试放开一些请求,处于半开失败,如果后续请求也正常了,则变成开发状态。

限流,控制流量输入。计数限流,可以使用固定窗口与滑动窗口。使用令牌桶限流,往令牌桶以固定频率放令牌,没有获取令牌则不能访问,使用漏桶限流让收到的请求固定频率。自适应限流,根据系统 CPU 等指标,自动计算当前限流的参数,自动控制限流参数,达到系统最优值。

降级,当系统压力大时,停止一些非核心功能,保障核心功能正常。

异地多活,防止机房自然灾害或是停电,系统自动切换数据中心,让系统可以正常提供服务。


发布于: 2020 年 12 月 06 日阅读数: 18
用户头像

天天向善

关注

还未添加个人签名 2018.04.27 加入

还未添加个人简介

评论

发布
暂无评论
安全稳定第十一周作业「架构师训练营第 1 期」