1.hystrix 超时时间优化, 解决首次请求失败的问题
Hystrix 默认超时 1 秒, 由于 ribbon 默认懒加载机制, 造成第一次请求容易超时, 将 hystrix 超时改为 5 秒
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000
或禁用 hystrix 超时机制
hystrix.command.default.execution.timeout.enable=false
2.hystrix 隔离策略优化
请求比较耗时, 可用线程隔离, 保证 web 容器有更多线程可用, 不会因为服务慢导致线程一直阻塞
请求比较快, 可用信号量隔离, 响应快不会占用容器线程太长时间, 可以减少线程切换的开销
3.线程池大小,默认 10
每秒请求的峰值 * 99% 延迟百分比的请求响应时间 + 预留缓冲值
30 * 0.2s = 6 + 预留缓冲值 = 10
4.hystrix 线程池隔离时,传递线程上下文变量
比如复制 threadlocal 变量
继承 HystrixConcurrencyStrategy, 实现 wrapCallable(), 返回一个 Callable 代理
在 Callable 代理里,完成了 threadlocal 变量的封装
通过构造函数保存父线程 threadlocal 变量,在 call() 里把父线程的 threadlocal 变量存到子线程