架构师训练营作业 (第十一周)
导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。
导致系统不可用的原因
cpu满负荷,竞争激烈,处理不过来造成假死
内存溢出,系统物理内存不够,造成应用程序内存申请不到,直接退出
io文件描述符创建过多,消耗系统资源,应用程序申请不到系统资源
带宽过载,上下行带宽超过限制或者打满网卡
程序bug引起的系统不可用,如内存泄露,死循环等
服务器宕机
保障系统稳定高可用的方案
垂直扩展:垂直扩展提升系统的处理能力,如增加cpu,内存等,但不能解决单点故障问题。
水平扩展:通过冗余部署解决单点故障,同时提升系统的处理能力,提高高可用性。
隔离:是对系统、业务所占用的资源进行隔离,限制某个业务对资源的占用数量,避免一个业务占用整个系统资源,对其他业务造成影响。常用的隔离有:进程隔离、线程隔离、模块隔离、应用隔离、机房隔离等,读写分离。
解耦:降低系统之间的依赖关系,避免系统之间互相影响造成雪崩。将同步调用转换成异步消息交互,通过消息队列解耦系统之间的依赖关系。
限流:一个系统的处理能力是有上限的,当服务请求量超过处理能力,通常会引起排队,造成响应时间迅速提升。如果对服务占用的资源量没有约束,可能导致资源占用过多而宕机。常用的限流方式有消费者端限流,提供者端限流,网关限流,限流算法有滑动窗口、漏桶算法,令牌桶算法等。
降级:是牺牲非核心的业务功能,保证核心功能的稳定运行。实现优雅的业务降级,需要将功能实现拆分到相对独立的不同代码单元,分优先级进行隔离,在后台通过开关控制。
熔断:在分布式系统中,如果调用的远程服务失败或者不可用,就会导致请求阻塞在服务器上等待从而造成耗尽服务器资源,引起雪崩效应。采用熔断机制,即使控制故障范围扩大,保证系统整体上可用,局部不可用。
版权声明: 本文为 InfoQ 作者【王海】的原创文章。
原文链接:【http://xie.infoq.cn/article/5eaa8d25913e9607f7fe4cc67】。未经作者许可,禁止转载。
评论