
线程池隔离 vs 信号量隔离,到底怎么选?

一组压测数据,扯掉遮羞布
不拿数据说话都是耍流氓。我搭了个简单环境:一个spring boot服务,暴露两个接口:/fast 模拟10ms处理,/slow 模拟2秒阻塞(比如慢SQL)。默认用同一个tomcat线程池(200线程)。 用jmeter并发100,其中50个线程打/slow,50个打/fast,持续2分钟。不隔离时,观察/fast的延迟:P50从12ms飙到3700ms,P99直接破5秒,错误率7%。tps从4500跌到800。因为/slow的请求像八爪鱼一样瞬间吸干了所有线程,/fast只能在队列里等,运气不好就超时。 接着我引入Hystrix线程池隔离,/slow一个池子20线程,/fast另一个池子40线程。同样压测,/fast的P50稳稳停在15ms,P99最高38ms,错误率0。tps几乎没有损失。再极端些,把/slow的线程池压到5线程,它自己疯狂拒绝,但/fast纹丝不动。那一刻,我盯着Grafana面板,真心觉得隔离模式就是上帝之手。
落地路上三个大坑,我一个个趟过
