首页 > 其他 > 详细

高可用之降级、限流、拒绝服务

时间:2019-10-08 11:39:43      阅读:143      评论:0      收藏:0      [点我收藏+]

Reference:https://time.geekbang.org/column/article/40744

 

高可用建设

系统的?可?建设,它其实是?个系统?程,需要考虑到系统建设的各个阶段,也就是说它其实贯穿了系统建设的整个?命周期,如下图所?:

技术分享图片

具体来说,系统的?可?建设涉及架构阶段、编码阶段、测试阶段、发布阶段、运?阶段,以及故障发?时。
1. 架构阶段:架构阶段主要考虑系统的可扩展性和容错性,要避免系统出现单点问题。例如多机房单元化部署,即使某个城市的某个机房出现整体故障,仍然不会影响整体?站的运转。
2. 编码阶段:编码最重要的是保证代码的健壮性,例如涉及远程调?问题时,要设置合理的超时退出机制,防?被其他系统拖垮,也要对调?的返回结果集有预期,防?返回的结果超出程序处理范围,最常见的做法就是对错误异常进?捕获,对?法预料的错误要有默认处理结果。
3. 测试阶段:测试主要是保证测试?例的覆盖度,保证最坏情况发?时,我们也有相应的处理流程。
4. 发布阶段:发布时也有?些地?需要注意,因为发布时最容易出现错误,因此要有紧急的回滚机制。
5. 运?阶段:运?时是系统的常态,系统?部分时间都会处于运?态,运?态最重要的是对系统的监控要准确及时,发现问题能够准确报警并且报警数据要准确详细,以便于排查问题。
6. 故障发?:故障发?时?先最重要的就是及时?损,例如由于程序问题导致商品价格错误,那就要及时下架商品或者关闭购买链接,防?造成重?资产损失。然后就是要能够及时恢复服务,并定位原因解决问题。

 

降级

所谓“降级”,就是当系统的容量达到?定程度时,限制或者关闭系统的某些?核?功能,从?把有限的资源保留给更核?的业务。它是?个有?的、有计划的执?过程,所以对降级?般需要有?套预案来配合执?。如果我们把它系统化,就可以通过预案系统和开关系统来实现降级。

降级的核??标是牺牲次要的功能和?户体验来保证核?业务流程的稳定,是?个不得已?为之的举措。

 

限流

如果说降级是牺牲了?部分次要的功能和?户的体验效果,那么限流就是更极端的?种保护措施了。限流就是当系统容量达到瓶颈时,需要通过限制?部分流量来保护系统,并做到既可以??执?开关,也?持?动化保护的措施。

在限流的实现?段上来讲,基于QPS和线程数的限流应?最多,最?QPS很容易通过压测提前获取,例如我们的系统最??持1w QPS时,可以设置8000来进?限流保护。线程数限流在客户端?较有效,例如在远程调?时我们设置连接池的线程数,超出这个并发线程请求,就将线程进?排队或者直接超时丢弃。

 

拒绝服务

如果限流还不能解决问题,最后?招就是直接拒绝服务了。
当系统负载达到?定阈值时,例如CPU使?率达到90%或者系统load值达到2*CPU核数时,系统直接拒绝所有请求,这种?式是最暴?但也最有效的系统保护?式。例如秒杀系统,我们在如下?个环节设计过载保护:

  • 在最前端的Nginx上设置过载保护,当机器负载达到某个值时直接拒绝HTTP请求并返回503错误码,在Java层同样也可以设计过载保护。

拒绝服务可以说是?种不得已的兜底?案,?以防?最坏情况发?,防?因把服务器压跨?长时间彻底?法提供服务。像这种系统过载保护虽然在过载时?法提供服务,但是系统仍然可以运作,当负载下降时又很容易恢复,所以每个系统和每个环节都应该设置这个兜底?案,对系统做最坏情况下的保护。

 

高可用之降级、限流、拒绝服务

原文:https://www.cnblogs.com/agilestyle/p/11634321.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!