dubbo作为一个服务治理框架,功能相对比较完善,性能也挺不错。但很多朋友在使用dubbo的时候,只是简单的参考官方说明进行搭建,并没有过多的去思考一些关键参数的意义(也可能是时间紧任务多,没空出来研究),最终做出来的效果有一定的打折。 这里我根据目前我们项目的使用情况列出几个性能调优的参数及其意义,供大家参考。
在介绍参数之前,我们先了解下dubbo中配置的优先级,以免出现调优参数设置了却没发现效果实际是配置被覆盖导致这样的问题。dubbo分为consumer和provider端,在配置各个参数时,其优先级如下:
1、consumer的method配置
2、provider的method配置
3、consumer的reference配置
4、provider的service配置
5、consumer的consumer节点配置
6、provider的provider节点配置
可以看到,方法级的配置优先级高于接口级,consumer的优先级高于provider。同时,在本地参数配置还存在一层优先级:
1、系统参数(-D),如-Ddubbo.protocol.port=20881
2、xml配置
3、property文件
了解了这两个优先级,调优起来才会更加清晰,省去了一些诸如配置设置了不生效这样的麻烦。注意,其实dubbo中还可以通过将配置写入注册中心的方式覆盖用户配置(优先级高于系统参数),这里不展开,有兴趣的同学可以去看官方文档。接下来我们看看dubbo的几个比较重要的调优参数,及其影响的方式和大概实现。
actives | consumer | 0 | 每服务消费者每服务每方法最大并发调用数 | 0表示不限制 |
connections | consumer | 对每个提供者的最大连接数,rmi、http、hessian等短连接协议表示限制连接数,dubbo等长连接协表示建立的长连接个数 | dubbo时为1,及复用单链接 | |
accepts | provider | 0 | 服务提供方最大可接受连接数 | 0表示不限制 |
iothreads | provider | cpu个数+1 | io线程池大小(固定大小) | |
threads | provider | 200 | 业务线程池大小(固定大小) | |
executes | provider | 0 | 服务提供者每服务每方法最大可并行执行请求数 | 0表示不限制 |
tps | provider | 指定时间内(默认60s)最大的可执行次数,注意与executes的区别 | 默认不开启 |
注意表中参数与图中的对应关系:
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就可以。
https://my.oschina.net/u/3070368/blog/815906
https://my.oschina.net/ydsakyclguozi/blog/415600
http://itindex.net/detail/49353-dubbo
相关推荐
### Zookeeper调优关键知识点 #### 一、Zookeeper集群个数 Zookeeper集群的规模直接影响到系统的稳定性和可用性。通常建议至少采用三个节点组成的集群来保障高可用性,这样即使有一个节点出现故障,系统仍能正常...
3. **性能优化技巧**:分享Dubbo的性能调优策略,包括参数调整、服务治理策略优化等,以提高服务响应速度和系统稳定性。 4. **扩展与集成**:介绍如何与其他系统集成,如Spring Boot、Spring Cloud等,以及如何扩展...
- 服务消费者引用:理解服务消费者如何查找并引用服务,包括URL参数解析、服务订阅和回调机制。 4. **负载均衡策略** - 负载均衡器:探讨Dubbo内置的各种负载均衡策略,如Random、RoundRobin、LeastActive等,...
dubbo 官方配置指南是 dubbo 框架的核心组件之一,用于配置 dubbo 服务的各种参数。该指南涵盖了 dubbo 服务的配置关系、配置 override、配置类型等多方面的内容。 Configuration Reference dubbo 配置可以分为多...
- **参数调优**:调整Dubbo的超时时间、连接池大小、线程池配置等,以适应不同场景的需求。 - **服务治理**:通过服务限流、熔断、降级等机制,保障系统在高并发时的稳定性和可用性。 - **数据传输优化**:考虑...
- **QoS参数调整**:包括连接数、超时时间、重试次数等,这些参数的合理设置对服务性能和稳定性至关重要。 4. **监控与日志** Dubbo提供了丰富的监控指标,如调用成功率、响应时间、调用量等,可以通过`dubbo-...
本指南主要介绍 Dubbo 的配置元素及其在服务发现、治理和性能调优中的作用。 首先,我们要了解的是配置层次结构: 1. **ApplicationConfig**: 定义了当前应用的信息,包括应用名,这是注册中心识别应用的基础,不...
5. **监控与调优**:Dubbo提供了一套全面的监控体系,可以统计服务调用的QPS、成功率、耗时等指标,帮助开发者定位和优化问题。 6. **扩展性**:Dubbo设计了插件化的架构,用户可以通过实现特定接口自定义实现,如...
4. 性能调优:通过调整Dubbo的参数,如超时时间、重试次数等,提升系统性能。 总之,Dubbo作为一款强大的微服务框架,不仅简化了分布式系统的开发,还提供了丰富的扩展功能。通过学习和实践dubbodemo,我们可以深入...
- 性能调优:根据实际场景调整 Dubbo 的超时时间、重试次数等参数。 - 监控与日志:集成监控工具(如 Zipkin、Prometheus)进行服务跟踪,设置合适的日志级别,便于问题定位。 通过 SpringBoot、Dubbo 和 ...
通过这个“dubbo学习的项目”,你可以深入了解Dubbo的工作原理,掌握如何构建分布式服务,并熟悉相关的配置和调优技巧。这将有助于你在实际开发中更好地运用Dubbo来设计和实现高效、可靠的微服务架构。
- **测试与调优**:通过调用测试工具验证服务是否正常工作,根据性能指标调整服务参数,如超时时间、重试次数等。 综上所述,"基于Dubbo+Zookeeper实现webservice"是一个融合了现代微服务理念和技术传统Web服务需求...
6. 监控与调优:分享Dubbo内置的监控平台Dubbo Monitor,以及如何进行服务性能优化。 7. 实战案例:通过实际的业务场景,展示如何利用Dubbo构建分布式系统。 四、学习路径与进阶指南 1. 理解Dubbo的基本原理:深入...
"parentZhht"这个文件可能包含了Dubbo的配置文件,如XML配置或Java配置,用于定义服务接口、实现类、参数、协议、注册中心等信息。Dubbo还支持动态配置,服务提供者和消费者可以实时感知配置变化,无需重启服务。 ...
服务提供者可以通过配置元数据来定义服务的接口、方法、参数类型等信息。 【服务注册与发现】 Dubbo使用Zookeeper、Eureka等作为服务注册中心,服务提供者在启动时会将自己的服务信息注册到注册中心,服务消费者则...
- **性能调优**:根据实际需求,可以调整Dubbo的配置参数,例如超时时间、并发数、重试次数等,以优化服务性能。 5. **监控与管理** - **Dubbo监控中心**:可以使用Dubbo提供的监控中心(如Admin)来查看服务的...
9. **性能优化**:通过监控性能数据,可以对服务进行性能调优,比如调整参数以优化负载均衡策略。 10. **安全性**:dubbo-admin 还可以设置访问控制,确保只有授权的用户才能访问和操作服务。 总之,这个压缩包...
本篇将深入探讨Dubbo的核心特性、架构设计以及实际应用中的配置与调优,旨在为读者提供全面且深入的Dubbo知识。 一、Dubbo简介 Dubbo是一个基于Java的RPC(远程过程调用)框架,它致力于简化分布式服务开发和管理,...
标题中的“修改后的dubbo服务提供者实例”指的是一个经过定制或优化的Dubbo服务提供者项目,这个...开发者需要熟悉Java编程、Maven使用以及Dubbo的配置和调优,才能有效地利用这个“修改后的dubbo服务提供者实例”。