服务限流

服务限流

简介

  • 服务降级的一种
    限流就是限制系统输入输出流量达到保护系统的目的。系统的吞吐量通过测算之后,为保证系统稳定运行,当某服务达到一定阀值,就需要限制流量采取一些措施以达到限制流量的目的。例如延迟处理/拒绝处理/部分拒绝等。
    「服务限流」其实是指当系统资源不够,不足以应对大量请求,即系统资源与访问量出现矛盾的时候,我们为了保证有限的资源能够正常服务,因此对系统按照预设的规则进行流量限制或功能限制的一种方法。

为什么做服务限流设计

  • 容量
    假设系统设计只允许300万的用户正常使用,当服务器某天用户达到500万,由于这500万用户的随机性,在不做限流的情况下很有可能一次压垮整个应用。

怎么做服务限流设计

  • 熔断
    当系统出现问题时,如果短时间内无法修复,系统要自动判断,开启熔断器,拒绝流量访问,降低服务器压力,避免对后台的请求过高不释放导致服务器宕机。
    系统也应该能够动态监测后端程序的修复情况,当程序已恢复稳定时,可以关闭熔断开关,恢复正常服务。熔断器实现方式可采用Spring Cloud Hystrix

  • 服务降级
    将系统所有功能进行分级,当系统出现问题,可对不重要的功能进行降级处理,停止服务,以达到释放资源另主要服务可正常运作。
    例如当视频APP,播放视频会占用太多资源,我们可以在后台直接关闭评论或者点赞功能,让看视频业务可正常运作。
    除了功能降级以外,还可以采用不直接操作数据库,而全部读缓存、写缓存的方式作为临时降级方案。

  • 延迟处理
    此模式需要在前端设置一个缓冲池,将所有请求全部缓存入池,不立即处理。后台业务处理程序从池中取出请求依次处理,可以通过队列模式实现。
    通过队列方式做到延迟处理,但是,当前端缓存池请求较多的时候,会出现后台处理不及时的问题。

  • 特权处理
    用户分类,通过用户分类,系统优先处理需要高保障的用户群体,类似2/8原则

  • 实现方式

    • 熔断技术
      重点参考Netflix的开源组件hystrix,主要三个模块熔断请求判断算法、熔断恢复机制、熔断报警
      GitHub 传送门 blockchain

    • 计数器方法
      系统维护一个计数器,请求时+1,请求结束-1,当计数器超过预设阀值,拒绝处理请求
      阀值的扩展:按不同服务设定不同阀值,可动态修改无需重启服务等

    • 队列方法
      基于FIFO队列,所有请求都进入队列,后端从队列中获取请求(请求池)
      队列的扩展:是否可以设置多个队列服务,做到合理分流和监控

    • 令牌桶算法
      首先基于一个队列,请求放入队列里面。但除了队列以外,还需要设置一个令牌桶,另外有一个脚本以持续恒定的速度往令牌桶里放入令牌,后端处理程序每处理一个请求就必须从桶里拿出一个令牌,如果令牌拿完了,那就不处理请求了
      我们可以控制脚本放令牌的速度来达到控制后端处理的速度,以实现动态流控

注意事项

  • 实时监控
    搭建全链路实时监控,来保证限流及时检测和处理,解决方案有:

  • 手动开关
    系统除自动限流以外,应添加手动开关限流功能,以确保随时允许人工介入

  • 限流的性能
    限流对系统性能存在一定影响,所以要做好系统优化,在业务和服务调度和链路要有一定对优化

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值