前端请求的接口,接口内部会 http 请求另一个服务,这个使用了 feign,并且增加了熔断配置, 但是用了之后发现的不明白的很多,求助 v 友大佬帮忙解答下:
现在最关心的一个问题就是并发问题,当有大量请求打过来后,熔断的线程池就不够用了,这时候就会报错被拒绝。 这种问题可以解决吗?还是说一旦使用了熔断那么接口并发量就是固定的了?完全受制于熔断的线程池配置了。
感觉这样很尴尬啊,因为这个我又换回了传统的 restTemplate 了,但是他这个接口不太稳定,所以我其实挺想用熔断的,唉。。。
想来想去,这种场景就是不该使用熔断就是了,,熔断更适合服务只见调用时,方便做负载吧?
1
ZSeptember 2019-10-24 14:02:09 +08:00
这就是熔断使用的场景啊。
接口受不了高并发,就快速失败。 怎么解决,就是让接口提供方提高服务可用性罗。 |
2
stanjia 2019-10-24 17:09:58 +08:00
你服务器总的连接数有限,你调用别人不快速失败, 一直在等,多了以后你的机器就挂了。 而且别人还以为是你的服务有问题。
这种时候就该马上断,然后出提示说别人的服务目前不可用。 |
3
passerbytiny 2019-10-24 17:42:19 +08:00 1
熔断的本质是:当我调用别人的时候处理的慢,我立马用备用内容响应调用我的人。熔断只是在服务不可用的时候能给个备用处理,并不能提高并发量——有可能备用处理还会临时封锁 IP 来强制降低并发量。
你这种情况,被拒绝的原因不是熔断,而是 feign。大量请求过来的时候,你的接口在请求另一个服务的时候也会启用大量的 feign 客户端,但 feign 客户端的总量是由限制的,你超过了就要被拒绝。调大线程池可接受的任务数,或者降低熔断的阈值(更加快速的熔断),应该就行了。 |
4
brucep 2019-10-24 19:35:16 +08:00
熔断只是避免服务雪崩,并不能保证高并发下可用。
建议看下 Hystrix 的文档: https://github.com/Netflix/Hystrix/wiki |