实践
个别,接口都有设置超时工夫,不论是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...