微服务怎么限流?算法+框架+实战!

  • 降级:当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉

  • 限流:解决服务雪崩,级联服务发生阻塞时,及时熔断,防止请求堆积消耗占用系统的线程、IO等资源,造成其他级联服务所在服务器的崩溃

这里我们主要说一下限流,限流的目的应当是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率就可以拒绝服务、等待、降级。 首先,我们需要去了解最基本的两种限流算法。

限流算法

====

  • 漏桶算法

  • 令牌桶算法

  • 计算器算法

限流框架

====

下面说一下现有流行的限流工具

guava


Google的Guava工具包中就提供了一个限流工具类——RateLimiter。

RateLimiter是基于“令牌通算法”来实现限流的。

hystrix


hystrix主要是通过资源池以及信号量来限流,暂时能支持简单的限流

sentinel


限流比较主流的三种算法:漏桶,令牌桶,滑动窗口。而Sentinel采用的是最后一种,滑动窗口来实现限流的。当然sentinel不仅仅局限于限流,它是一个面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。

限流实战

====

有很多应用都是可以直接在调用端、代理、网关等中间层进行限流,下面简单介绍下集中中间件限流方式

nginx限流


nginx限流方式有三种

  • limit_conn_zone

  • limit_req_zone

  • ngx_http_upstream_module

但是nginx限流不够灵活,不好动态配置。

zuul限流


除了zuul引入限流相关依赖

com.marcosbarbero.cloud

spring-cloud-zuul-ratelimit

2.0.0.RELEASE

相关配置如下:

zuul:

ratelimit:

key-prefix: your-prefix #对应用来标识请求的key的前缀

enabled: true

repository: REDIS #对应存储类型(用来存储统计信息)默认是IN_MEMORY

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值