- 线程隔离
把执行依赖代码的线程与请求线程(如:jetty线程)分离,请求线程可以自由控制离开的时间(异步过程)。 通过线程池大小可以控制并发量,当线程池饱和时可以提前拒绝服务,防止依赖问题扩散。 线上建议线程池不要设置过大,否则大量堵塞线程有可能会拖慢服务器。
- 信号隔离
信号隔离也可以用于限制并发访问,防止阻塞扩散, 与线程隔离最大不同在于执行依赖代码的线程依然是请求线程(该线程需要通过信号申请), 如果客户端是可信的且可以快速返回,可以使用信号隔离替换线程隔离,降低开销. 信号量的大小可以动态调整, 线程池大小不可以
线程池方式下业务请求线程和执行依赖的服务的线程不是同一个线程;信号量方式下业务请求线程和执行依赖服务的线程是同一个线程