weibocom / motan

A cross-language remote procedure call(RPC) framework for rapid development of high performance distributed services.
Other
5.88k stars 1.78k forks source link

motan-transport4-netty的连接无效情况的问题 #830

Open haoverygood opened 5 years ago

haoverygood commented 5 years ago

motan-transport4-netty中未使用对象池,只有minClientConnection有效,maxClientConnection是无用的。如果nettyChannel全部断开了,request调用处理时,获取com.weibo.api.motan.transport.AbstractSharedPoolClient.getChannel()时会重建channel,即时在重试的情况下,request也会可能无法获取到有效连接。这取决于重试次数和连接个数,以及连接的时长。 建议将motan-transport4-netty使用对象池。另外可在重试过程中,进行sleep(时间与heartbeat间隔一致),这样可以有效保证可重建成功。进而提高client的调用成功的概率。

rayzhang0603 commented 5 years ago

netty4使用的是共享对象池,目的是提高并发,减少建立的链接数。

motan的重试机制不是针对同一server进行重试,而是会选择另外的server重试,所以单机网络问题基本不会影响整体服务

haoverygood commented 5 years ago

motan中总连接数(refer*minClientConnection),客户端要想提高并发,只能设大minClientConnection,这样反而提高了连接数。 那么对nginx+2motan server这种情况呢?

rayzhang0603 commented 5 years ago

对象池的互斥模型对高并发影响非常大,高并发场景下链接会维持在maxconnection。共享对象池对高并发不敏感,2-3个链接已经可以提供很高的并发了(1k大小,2-3Wqps)