微服务之间的限流和降级应该如何规约?

当系统实在扛不住压力时,只能通过限流或者功能降级的方式来停掉一部分服务,或是拒绝一部分用户,以确保整个架构不会挂掉。这些技术属于保护措施。那应该要规约这些操作?显示全部

当系统实在扛不住压力时,只能通过限流或者功能降级的方式来停掉一部分服务,或是拒绝一部分用户,以确保整个架构不会挂掉。这些技术属于保护措施。那应该要规约这些操作?

收起
参与7

查看其它 1 个回答lyc19820的回答

lyc19820lyc19820软件开发工程师苏州博纳讯动软件有限公司

微服务架构下缓存、降级和限流是保护微服务系统运行稳定性的三大利器。
缓存的目的是提升系统访问速度和增大系统能处理的容量,而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开,而有些场景并不能用缓存和降级来解决,比如稀缺资源、数据库的写操作、频繁的复杂查询,因此需有一种手段来限制这些场景的请求量,即限流。
比如当我们设计了一个函数,准备上线,这时候这个函数会消耗一些资源,处理上限是1秒服务3000个QPS,但如果实际情况遇到高于3000的QPS该如何解决呢?
所以限流的目的应当是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率就可以拒绝服务、等待、降级。
如何去实现一个分布式限流框架,首先,我们需要去了解最基本的两种限流算法 :
1、 漏桶算法思路很简单,水(也就是请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大会直接溢出,然后就拒绝请求,可以看出漏桶算法能强行限制数据的传输速率。
2、 令牌桶算法和漏桶算法效果一样但方向相反的算法,更加容易理解。随着时间流逝,系统会按恒定1/QPS时间间隔(如果QPS=100,则间隔是10ms)往桶里加入令牌(想象和漏洞漏水相反,有个水龙头在不断的加水),如果桶已经满了就不再加了。新请求来临时,会各自拿走一个令牌,如果没有令牌可拿了就阻塞或者拒绝服务。

软件开发 · 2019-11-07
浏览2064

回答者

lyc19820
软件开发工程师苏州博纳讯动软件有限公司
擅长领域: 云计算微服务云原生

lyc19820 最近回答过的问题

回答状态

  • 发布时间:2019-11-07
  • 关注会员:3 人
  • 回答浏览:2064
  • X社区推广