系统过载保护

什么是系统过载?

  系统过载是指当前的外部请求量超过了系统的最大处理能力。比如,某系统每秒最多处理100条请求,但是它每秒收到的请求有200条,此时则认为该系统已经过载;

系统过载的影响

  系统过载会导致系统负载变高,其影响按照严重程度从低到高依次为:请求RT变长、服务不可用、上下游系统级联故障;

过载保护的最终的目的:在系统过载时,服务还能提供一个稳定的较高的处理能力;

系统过载方案

  按照事件的发生阶段,系统过载方案可以分为三大类:

  • 发生前:过载预防;
  • 发生时:过载处置;
  • 发生后:过载恢复;

过载预防

  过载预防是系统设计时就需要考虑的,可采取的措施有很多:

  • 前端防御:在产品设计层面控制请求速率,缓解后端压力;
  • 负载均衡:流量均摊,降低单机压力;
  • 性能优化:从架构、代码实现、参数调优等方面提升单机的处理能力;
  • 性能压测:明确单机的处理能力,及集群处理能力;
  • 监控告警:配置多维度监控,及时告警;

过载处置

  过载处置是系统运行过程中可采取的一些措施:

  • 弹性扩容(架构上支持水平扩容时优先考虑的措施);
  • 限流、熔断和降级;

过载恢复

  过载恢复是系统已经假死、甚至宕机时采取的措施:

  • 无状态应用,快速重启即可;
  • 有状态应用,需要快速重启和状态恢复,基本思路都是按一定策略将状态持久化,重启之后加载持久化的状态数据,难点在于数据一致性的保证,这点可以参考Zookeeper和Flink;

相关框架

Tengine

  Tengine的sysguard模块提供了系统过载保护功能:当系统的内存、CPU、负载或RT等指标达到设定的阈值时,请求会被跳转到指定URL,具体配置参考官网;

Sentinel

  Sentinel提供了限流、熔断、降级和系统过载保护等功能,而且在阿里内部经历了多处大促活动,稳定性和性能是有保障的,是应用稳定性保障的利器之一;

参考:

  1. 服务器过载保护(上篇)——过载介绍
  2. 服务器过载保护(下篇)——过载处理新方案
  3. Tengine的sysguard模块
  4. Sentinel官网

你可能感兴趣的:(方案设计)