一、事前保护
事前保护一般就是指限流:关于限流,我的上一篇也简单介绍过,可以参考上一篇
二、事中保护
事中保护:就是流量已经触达到我们需要保护的资源,我们要用什么方式去处理这些流量
1.超时机制
调用资源的时候设置超时时间,超过可以设计重试,或者直接失败,返回失败结果。
2.壁仓模式(线程池隔离)
壁仓模式
:是线程池隔离技术,发起服务请求的时候,会去对应的线程池新拿一个线程调用;跟请求线程不是同一个线程。
优点
- 支持超时,利用的是线程池的超时
- 支持异步请求
缺点
- 排队、调度、线程切换上下文开销
- 不支持http header传递(这里当然可以通过feign的拦截器进行传递)
feignInterceptor基于用户请求的threadLocal来传递的
应用场景
- 高并发、处理时间长的,释放线程比较慢;这样用线程池隔离不会影响到其他应用
3.信号量隔离
信号量隔离
:基于信号量的,对每个请求设置最大请求线程数,跟其他服务还是公用一个线程池。跟请求线程是同一个线程。
优点
:
- 无线程切换开销
- 因为不另起线程,所以可以基于同一线程的threadLocal传递httpHeader
缺点
- 不支持异步
- 不支持超时(可以基于feign做超时)
应用场景
- 高并发、处理时间短,可以快速释放线程资源
三、事后保护
熔断降级
:一般基于错误比例或者慢调用比例来做