稳定性 耗时 监控原因分析-- dubbo rpc 框架 的线程池,io 连接模型. 客户端,服务端

Posted fei33423

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了稳定性 耗时 监控原因分析-- dubbo rpc 框架 的线程池,io 连接模型. 客户端,服务端相关的知识,希望对你有一定的参考价值。

1. consumer 多连接

Dubbo protocol options:

<dubbo:protocolname=“dubbo” port=“9090” server=“netty” client=“netty” codec=“dubbo” serialization=“hessian2” charset=“UTF-8” threadpool=“fixed” threads=“100” queues=“0” iothreads=“9” buffer=“8192” accepts=“1000” payload=“8388608” />

Dubbo协议缺省每服务每提供者每消费者使用单一长连接,如果数据量较大,可以使用多个连接。

<dubbo:protocolname="dubbo"connections="2"/>

    phil注: 服务端配置大于客户端配置,服务端如果配置2,那么所有的消费者和服务提供者在使用这个 service 都会独立一个连接? 面试题.考察是否真的用过,还是只知道理念

  • <dubbo:service connections=”0”>或<dubbo:reference connections=”0”>表示该服务使用JVM共享长连接。(缺省)
  • <dubbo:service connections=”1”>或<dubbo:reference connections=”1”>表示该服务使用独立长连接。
  • <dubbo:service connections=”2”>或<dubbo:reference connections=”2”>表示该服务使用独立两条长连接。可以继续配置3,4,5.
为防止被大量连接撑挂,可在服务提供方限制大接收连接数,以实现服务提供方自我保护。
<dubbo:protocolname="dubbo"accepts="1000"/>
 

2.多线程池

   dubbo 多线程池不是在一个端口下实现的. 而必须新增一个protocol .将多线程池转成多 protocol 来实现.

<dubbo:protocol id="dubbo1"name="dubbo"port="20880"/>
<dubbo:protocol id="dubbo2"name="dubbo"port="20881"/>
然后 service 配置选择具体的 protocal
<dubbo:service interface="PassengerService"
                   protocol="dubbo2" version="1.0.0${user.env}" ref="passengerRemoteService"
                   timeout="3000" />

    <dubbo:service interface="com.ricky.dubbo.api.DemoService" ref="demoService" protocol="dubbo" />

phil 注: 当有两个协议后,所有的 service 必须注明使用哪个 protocol.

3. 单 protocol 下真正的线程池隔离方法,多线程池. 分线程池
核心是改造了Dispatcher,并利用 java SPI扩展机制配置到 dubbo 的 protocol 配置中,替换默认的 dispatcher.
   dubbo分线程池处理同一服务请求随记

[1] Dubbo 源代码分析八:再说 Provider 线程池被 EXHAUSTED 线程池模型
[2] Dubbo高级篇_10_Dubbo线程模型
[3] 使用Hystrix对Dubbo消费者提供线程隔离保护

 

 

 

以上是关于稳定性 耗时 监控原因分析-- dubbo rpc 框架 的线程池,io 连接模型. 客户端,服务端的主要内容,如果未能解决你的问题,请参考以下文章

稳定性 监控 业务后期 - 架构师

RPC框架深入剖析(下)

RPC服务框架dubbo:dubbo支持的注册中心

dubbo-线程池监控

Dubbo的RPC远程过程调用+Dubbo的负载均衡+Zookeeper注册中心

dubbo原理和机制是啥?