本质都是牺牲服务可用性换取服务稳定性,进而保障服务高可用。

限流:限流用来控制请求并发量,当访问超过一定数量后拒绝访问。比如tomcat,线程池,netty等等均有限流机制,当请求过来后进入服务队列,超过一定数值进入等待队列,超过等待队列执行拒绝访问。基本上成熟的服务框架限流都是必须实现的机制。
分流:分流是分布式服务,负载均衡领域的,指当请求超过一定并发量后,将请求分配到其他服务器上,rocketmq,dubbox,mysql ddb这些分布式服务在负载均衡机制上都必须实现分流机制。其实这也是负载均衡的本质。
降级:降级是指提供一个不完善的服务,目的是降低核心服务的压力,当请求超载时,服务本身不在提供完整版本的服务,而是提供一种精简版服务,甚至直接提供一个拒绝服务的信息提示。所以说我们常作的异常信息处理机制,其实就是一种服务降级处理,不同的是异常信息处理机制范围更大,它除了包含降级服务处理,还需要涵盖常规的服务异常处理,而且最终要的是异常处理机制,关注点不在精简版服务,而是在异常处理。
熔断:熔断也是提供一个完善的服务,区别是熔断不是外部请求调用时发生,而是服务在调用外部服务失败时提供一种精简服务来快速结束流程。完善的异常处理机制也是这个机制,我所指的完善是指不暴露异常信息本身,而是将异常信息转化为下游系统可以理解的形式。

备注:异常处理,降级,熔断本质上都是快速结束流程,释放资源。但不同的是异常处理着眼于异常,降级和熔断主要体现在精简流程,流程虽然精简了但是服务依然可用。降级和熔断本质也差不多,都是简化服务复杂度,降低请求频率,但是不同的是降级降的降的是自己接受服务请求的频率,而熔断降的是请求上游服务的频率。