为什么要做限流

微服务某个接口请求量激增,如果不做限制,会引起:
1、处理变慢,tps下降,并引起微服务上其他接口性能下降,开始恶性循环。
2、资源(cpu、内存、连接数、线程数等)耗尽,整个微服务节点拒绝服务。

限流怎么做

限流一般在服务的提供方进行限流。针对不同场景,可以做:
全局限流:保证服务器整体性能。
单调用方限流:保证单调用方出现大量调用时,不影响其他调用方。
单一接口限流:保证某个接口出现大量调用时,不影响服务的其他接口。

接口参数限流:根据请求中的特征进行分组,典型场景如租户级限流。

限流可以是中心化控制,也可以节点自己控制,现在一般微服务框架本身就具备了负载均衡能力,所以在单机做流控也具备可行性。
通过统计一定时间内的调用量,当超过预置的值时,降级或快速失败,避免出现资源消耗。
当进入下一个统计区间时候,恢复限流。

为什么要做熔断

某个节点出现故障,无法再次处理请求,会引起:
调用到该节点的业务无法正常完成。

某个节点因为故障或者收到了异常的请求(比如耗时的炸弹请求),导致响应变慢,会引起:
1、处理变慢,tps下降,并引起微服务上其他接口性能下降,开始恶性循环
2、资源(cpu、内存、连接数、线程数等)耗尽,整个微服务节点拒绝服务

此外,对应调用链下游某个节点响应变慢,会引起:
1、该次请求调用链上游所有节点的响应变慢。
2、调用链上游所有节点资源不释放,上游节点tps下降、甚至拒绝服务。
3、上游节点的上游节点产生级联雪崩。


熔断怎么做

熔断在调用方和被调方都可以做。
被调用方做熔断,是为了防止一个接口出现故障,不影响服务其他接口的可用性,以及对故障使用降级方案。
调用方做熔断,是为了隔离故障节点、防止雪崩,或者走调用方降级逻辑。

一般熔断触发是通过判断请求的成功率和耗时来判断。
熔断之后就触发降级或者快速失败。
当熔断一定时间后,会定时尝试放一部分请求,如果成功率和耗时恢复就取消熔断。