背景
前段时间,负责公司的一个服务的优化,发现了不少问题, 本文说一下Feign 和 Hystrix。
在微服务的背景下,服务间的交互少不了HTTP。
故性能优化中,比较重要一环就是HTTP交互,
但若使用不当,就会导致
- HTTP耗时长,获取http连接出现大量等待超时
- 多次创建Httpclient导致OOM
- 长连接情况没有清除闲置连接导致NoHttpResponseException 等问题。
而与其他服务交互中,也少不了熔断机制,来降级处理高并发的问题,
但若使用不当,不仅没有使服务的性能更好,反而会限制服务的性能。
这里说一下Hystrix、feign 高并发配置中容易出错以及正确的配置。
Hystrix
修改前
# Hystrix config
feign.hystrix.enabled = true
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds = 60000
修改后
# Hystrix config
feign.hystrix.enabled = true
#QPS * 窗口秒数 * 60% 1000 * 10 * 0.6 = 6000
hystrix.command.default.circuitBreaker.requestVolumeThreshold = 6000
#QPS * 99% cost + redundancy count Qps 1000*(0.5)= 500
hystrix.threadpool.default.coreSize = 500
hystrix.threadpool.default.maxQueueSize = 10000
hystrix.threadpool.default.maximumSize = 600
hystrix.threadpool.default.allowMaximumSizeToDivergeFromCoreSize = true
hystrix.threadpool.default.queueSizeRejectionThreshold = 10000
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds = 10000
这里需要注意的
1.hystrix.threadpool.default.coreSize
核心线程池的大小,要是没有设置这个参数会导致不管多大的请求量,你请求下游服务只有10个并发
,因为它的默认值是10,这里就会导致下游服务永远最多只有10请求,大大限制系统的并发量。
那么这个参数应该怎么设置:
线程数 = 每秒请求数 * 响应时长(单位s) + (缓冲线程数)
2.hystrix.command.default.circuitBreaker.requestVolumeThreshold
熔断器功能窗口时间内触发熔断的最小请求失败数量
那么这个参数应该怎么设置:
QPS * 窗口秒数 * 60%
本文探讨了在微服务架构中,HTTP交互的性能优化以及Hystrix和Feign的正确配置。指出HTTP耗时、连接管理不当等问题可能导致服务性能下降,并详细解析了Hystrix的配置优化,如调整核心线程池大小、熔断器请求阈值等,以提升系统并发能力。同时,提供了设置这些参数的计算公式和注意事项,以避免限制服务性能。
435

被折叠的 条评论
为什么被折叠?



