dubbo配置注意事项

1.超时配置:

建议统一在服务提供方配置。可以设置到method级别。

2.启动时检查:

Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true。

3.订阅:

在测试环境时,为方便测试,经常本地运行main方法启动。影响测试消费者调用。

解决方案

以让服务提供者开发方,只订阅服务(开发的服务可能依赖其它服务),而不注册正在开发的服务,通过直连测试正在开发的服务。

禁用注册配置:
<dubbo:registry address="****" register="false" />

4.日志输出:

<dubbo:protocol accesslog="true" />
输出日志比较大,每天一个节点几百兆。

5.dubbo线程模型:


对应参数流程:


以下转自:http://blog.csdn.net/youaremoon/article/details/51884644

   注意表中参数与图中的对应关系:

        1、当consumer发起一个请求时,首先经过active limit(参数actives)进行方法级别的限制,其实现方式为CHM中存放计数器(AtomicInteger),请求时加1,请求完成(包括异常)减1,如果超过actives则等待有其他请求完成后重试或者超时后失败;

        2、从多个连接(connections)中选择一个连接发送数据,对于默认的netty实现来说,由于可以复用连接,默认一个连接就可以。不过如果你在压测,且只有一个consumer,一个provider,此时适当的加大connections确实能够增强网络传输能力。但线上业务由于有多个consumer多个provider,因此不建议增加connections参数;

        3、连接到达provider时(如dubbo的初次连接),首先会判断总连接数是否超限(acceps),超过限制连接将被拒绝;

        4、连接成功后,具体的请求交给io thread处理。io threads虽然是处理数据的读写,但io部分为异步,更多的消耗的是cpu,因此iothreads默认cpu个数+1是比较合理的设置,不建议调整此参数;

        5、数据读取并反序列化以后,交给业务线程池处理,默认情况下线程池为fixed,且排队队列为0(queues),这种情况下,最大并发等于业务线程池大小(threads),如果希望有请求的堆积能力,可以调整queues参数。如果希望快速失败由其他节点处理(官方推荐方式),则不修改queues,只调整threads;

        6、execute limit(参数executes)是方法级别的并发限制,原理与actives类似,只是少了等待的过程,即受限后立即失败;

        7、tps,控制指定时间内(默认60s)的请求数。注意目前dubbo默认没有支持该参数,需要加一个META-INF/dubbo/com.alibaba.dubbo.rpc.Filter文件,文件内容为:

                   tps=com.alibaba.dubbo.rpc.filter.TpsLimitFilter


        从上面的分析,可以看出如果consumer数*actives>provider数*threads且queues=0,则会存在部分请求无法申请到资源,重试也有很大几率失败。 当需要对一个接口的不同方法进行不同的并发控制时使用executes,否则调整threads就可以。


关注的两个参数:

  • Dispather
    • all, direct, message, execution, connection默认all
  • ThreadPool
    • fixed, cached 默认:fixed
    • 具体的要根据实际情况调整,默认大小200.

线程数设置,需要综合考虑,比如查看linux允许用户创建线程数:ulimit -u

  这个数据可以调大,但是受限于内存大小,cat /proc/meminfo |grep MemTotal,根据内存/128K大概估算出

6.平滑启动:

参见之前。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Dubbo一个分布式服务框架,可帮助我们快速构建高性能、可扩展、可维护的分布式应用程序。下面是Dubbo常用配置注意事项: 1. 服务提供者配置: - `dubbo.application.name`:应用程序名称 - `dubbo.application.owner`:应用程序所有者 - `dubbo.registry.address`:注册中心地址 - `dubbo.protocol.name`:协议名称 - `dubbo.protocol.port`:协议端口 - `dubbo.timeout`:调用超时时间 - `dubbo.provider.timeout`:服务提供者端超时时间 - `dubbo.provider.retries`:服务提供者重试次数 2. 服务消费者配置: - `dubbo.application.name`:应用程序名称 - `dubbo.application.owner`:应用程序所有者 - `dubbo.registry.address`:注册中心地址 - `dubbo.protocol.name`:协议名称 - `dubbo.protocol.port`:协议端口 - `dubbo.timeout`:调用超时时间 - `dubbo.consumer.timeout`:服务消费者端超时时间 - `dubbo.consumer.check`:服务消费者启动时是否检查服务提供者是否存在 3. 注册中心配置: - `dubbo.registry.address`:注册中心地址 - `dubbo.registry.timeout`:注册中心连接超时时间 - `dubbo.registry.username`:注册中心用户名 - `dubbo.registry.password`:注册中心密码 4. 注意事项: - Dubbo服务提供者和消费者的配置项必须一致。 - Dubbo服务提供者和消费者的协议名称、端口号、超时时间等配置项必须与注册中心一致。 - Dubbo服务提供者和消费者的版本号、接口名称、方法名称等必须定义清楚,否则出现调用失败的情况。 - Dubbo服务提供者和消费者的日志级别应该适当调整,以便及时发现问题。 - Dubbo服务提供者和消费者的线程池大小应该根据实际情况进行配置,以避免线程池过大或过小的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值