实践
个别,接口都有设置超时工夫,不论是 http 接口,还是 dubbo 接口。
为什么要设置超时工夫?因为不设置的时候,一旦高并发,就会把零碎搞挂。
具体就是可能局部交易申请很慢,耗时很久,然而没有设置超时,而后就始终占着 dubbo 线程池的线程资源,这个时候,就会因为局部慢交易,影响和导致了整个零碎,因为其余原本失常的交易,当初因为 dubbo 线程池满了,也解决不了了,这个时候,零碎就解体了,所有的交易都耗时很慢。
dubbo 超时的维度
有 2 个维度,一个是作用域粒度,一个是消费者还是生产者。
粒度
有 3 个
1、所有接口
comsumer/provider
2、接口级别
reference/service
3、办法级别
个别很少用。
优先级
粒度越小,优先级越高,即办法 > 接口 > 所有服务。
消费者 生产者
优先级
消费者比生产者优先级高。
总结
如果 2 个维度都有设置,那么
1、粒度维度优先级更高
2、消费者生产者维度优先级比粒度保护优先级低
举个例子
1、消费者是在所有接口粒度设置 60s
2、提供者是在接口级别粒度设置 15s
那么这个时候,就是以提供者为准,因为提供者的粒度这个维度更小,并且粒度优先级高于消费者生产者维度优先级,所以,这个时候就以提供者的 15s 超时为准。
总结
所以 dubbo 的超时工夫优先级为:消费者 Method> 提供者 method> 消费者 Reference> 提供者 Service> 消费者全局配置 consumer> 提供者全局配置 provider。
最佳实际
最好在提供者设置超时工夫。其实不仅仅是超时工夫设置,其余消费者和生产者都有的配置,都应该在提供者设置,因为提供者是写代码的一方,最理解代码,所以超时工夫等配置,就应该由你来设置。
只有非凡状况下,非凡场景下,消费者才须要配置,但这个也是属于定制超时工夫。
实战
以后现状
网关:comsumer 60s——》对立订单:service 15s;消费者:?——》前置:提供者:无;消费者:30s——》交易:提供者:无;消费者:15s。
优化
前置和交易的提供者目前都没有设置超时工夫,所以必须要设置超时工夫,因为最佳实际就是提供者设置超时工夫,为什么呢?因为提供者最懂服务提供者须要耗时多久,代码是你写的,必定是你设置超时工夫最合适。
最佳实际是设置多久?原本是 15s,其实 15s 都太大了,个别接口耗时几 s 就曾经很大了,当初为了逐步优化,能够先设置为 30s。而后再优化为 15s。
目前公司交易的都是 15s,大一点就是 30s,还有更大的是 60s,比方网关,所以网关也须要优化,最多 15s,然而实际上线的时候能够逐步优化,即先优化为 30s,而后再优化为 15s。不然高并发的时候,把零碎拖死了。
非交易接口
比方营销,报备,风控,都是 1s,最多 3s。不重要的,非核心接口,即失败了也不会影响交易的接口,工夫都设置的很短,个别就 1s,不然的话,如果设置得很大,会让整个交易链路耗时太久。
参考
https://dubbo.apache.org/zh/d…