##限流概念
先聊一下生态系统,一个生态系统的能力是有限的,比如说只能容纳多少生物,多少物质消耗,生态系统才能维持平衡。
微服务集群相当于生态系统,限流阈值是当前系统所能处理的最大能力,所以限流是为了系统稳定性。
个性化一点就是,某些接口,动态修改,实现从入口限制住流量。
常见限流:线程池,接口调用限制,网络连接限制,Semaphore。
##限流方法
1.计数器(对段时间内请求进行累加,超过阈值责拒绝。实现简单,缺点是可能造成瞬时的流量峰值,不匀速。)
2.时间滑动窗口(将段时间分为多个小窗口进行累加,超过阈值则拒绝,大概率解决了瞬时峰值问题,但解决不彻底。)
3.漏桶(限制请求速率,始终匀速,不允许任何突发流量,绝对匀速。)
4.令牌桶(始终匀速往令牌桶放入令牌,控制了最大阈值,消费从桶内取值,这时就允许突发流量了,但却不会超过阈值。)
##限流选型
Nginx+lua
Redis+lua
Gateway
Hystrix
Sentinel
Tomcat
更具体的情况点看自己的架构了。
Hystrix and Sentinel技术选型分析
Hystrix 的关注点在于以隔离和熔断为主的容错机制,超时或被熔断的调用将会快速失败,并可以提供 fallback 机制。
而Sentinel的侧重点在于:
多样化的流量控制
熔断降级
系统负载保护
实时监控和控制台
##熔断 概念
熔断,当服务在一段时间内失败此次数达到一定比例时,熔断该服务,返回默认消息(降级)。
防止服务雪崩,保证系统整体的健康,提高可靠性,可用性。
三种状态:半开,开启,关闭
开启之后会直接走降级方法,一段时间就会变为半开,放一些请求如果成功就为关闭状态,失败则继续变为开启状态。一直断时间重试。
##熔断 降级 区别
熔断是被动的,降级是主动的。