微服务框架(三)Dubbo性能调优配置

简介:   此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为服务治理框架Dubbo的特性及泛化实现

  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。
  本文为服务治理框架Dubbo性能调优配置

本系列文章中所使用的框架版本为Spring Boot 2.0.3-RELEASE,Spring 5.0.7-RELEASE,Dubbo 2.6.2。

Dubbo性能调优配置

本系列文章使用Spring boot集成Dubbo,故只需设置spring.profiles.active属性即可选择对应前缀的配置文件,详见Profile运行环境配置

映射规则

若使用properties文件,只需将 XML 配置的标签名,加属性名,用点分隔,多个属性拆成多行(yml文件注意缩进即可)

如果 XML 有多行同名标签配置,可用 id 号区分,如果没有 id 号将对所有同名标签生效

XML Properties
<dubbo:application name="foo" /> dubbo.application.name=foo
<dubbo:protocol id="rmi" name="rmi" port="1099"/> dubbo.protocol.rmi.port=1234

properties配置

application.properties:

dubbo.application.name=foo
dubbo.application.owner=bar
dubbo.registry.address=10.20.153.10:9090

XML配置

application.xml:

<dubbo:application name="foo" owner="bar" />
<dubbo:registry address="10.20.153.10:9090" />

YAML配置

application.yml:

dubbo:
  application:
    name: foo
    owner: bar
  rigistry:
    address: 10.20.153.10:9090

覆盖策略

  1. JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。
  2. XML 次之,如果在 XML 中有配置,则 dubbo.properties 中的相应配置项无效
  3. Properties 最后,相当于缺省值,只有 XML 没有配置时,dubbo.properties 的相应配置项才会生效,通常用于共享公共配置,比如应用名。

性能调优配置说明及使用

在Provider端多配置Consumer端属性官方推荐

  • 作为服务的提供者,比服务使用方更清楚服务性能参数,如调用的超时时间,合理的重试次数,等等
  • 在 Provider 配置后,Consumer 不配置则会使用 Provider 的配置值,即 Provider 配置可以作为 Consumer 的缺省值。否则,Consumer 会使用 Consumer 端的全局设置,这对于 Provider 不可控的,并且往往是不合理的

以下配置使用properties文件配置为例,展示推荐性能调优配置的说明及使用

provider

属性 缺省值 作用 描述
timeout 1000 性能调优 远程服务调用超时时间(毫秒)
retries 2 性能调优 远程服务调用重试次数,不包括第一次调用,不需要重试请设为0
connections 100 性能调优 对每个提供者的最大连接数,rmi、http、hessian等短连接协议表示限制连接数,dubbo等长连接协表示建立的长连接个数
loadbalance random 性能调优 负载均衡策略,可选值:random,roundrobin,leastactive,分别表示:随机,轮循,最少活跃调用
cluster failover 性能调优 集群方式,可选:failover/failfast/failsafe/failback/forking
validation jvalidation 性能调优 服务参数验证器(默认为JValidation )
filter 内置filter 性能调优 调用拦截器

Provider端推荐配置超时、重连及负载均衡等性能调优参数,即timeout/retries/loadbalance,如需使用参数验证只需配置validation = "true",要使用自定义验证器及拦截器见微服务框架(七)Dubbo实现自定义验证器及拦截器

具体配置如下:

## Provider
dubbo.provider.validation = true
dubbo.provider.timeout = 1500
dubbo.provider.retries = 1
dubbo.provider.loadbalance = random
dubbo.provider.threadpool = fixed
dubbo.provider.threads = 1000

consumer

consumer端的配置参数与provider端基本一致,推荐在provider端配置大部分参数。如有必要,亦可在consumer端配置对应参数,此配置会覆盖provider端配置。

service

属性 缺省值 作用 描述
interface 服务发现 服务接口名
ref 服务发现 服务对象实现引用
version 0.0.0 服务发现 服务版本,建议使用两位数字版本,如:1.0,通常在接口不兼容时版本号才需要升级
group 服务发现 服务分组,当一个接口有多个实现,可以用分组区分
timeout 1000 性能调优 远程服务调用超时时间(毫秒)
retries 2 性能调优 远程服务调用重试次数,不包括第一次调用,不需要重试请设为0
connections 100 性能调优 对每个提供者的最大连接数,rmi、http、hessian等短连接协议表示限制连接数,dubbo等长连接协表示建立的长连接个数
loadbalance random 性能调优 负载均衡策略,可选值:random,roundrobin,leastactive,分别表示:随机,轮循,最少活跃调用
cluster failover 性能调优 集群方式,可选:failover/failfast/failsafe/failback/forking
validation jvalidation 性能调优 服务参数验证器(默认为JValidation )
filter 内置filter 性能调优 调用拦截器

Provider端推荐配置应用于项目下所有@Service,使服务配置统一,若无配置provider参数则具体配置如下:(Dubbo @Service注解)

@Service(version = "1.0.0", 
        timeout = 2000, 
        validation = "true",
        retries = 2,
        loadbalance = "random")

若已配置provider参数,则

@Service(version = "1.0.0")

注:在配置文件中需扫描Dubbo容器(如@Service/@Reference
dubbo.scan.basePackages = org.spring.boot.dubbo.provider

protocol

属性 缺省值 作用 描述
name dubbo 性能调优 协议名称,可选值为rmi/thrift/memcached/rest等,详见 com.alibaba.dubbo.rpc.Protocol文件
port dubbo缺省为20880,rmi缺省为1099,http和hessian缺省为80;如果配置为-1 或者 没有配置port,则会分配一个没有被占用的端口。 服务发现 服务端口(推荐配置)
threadpool fixed 性能调优 线程池类型,可选:fixed(固定线程)/cached(缓存线程)
threads 100 性能调优 服务线程池大小(固定大小)
serialization dubbo协议缺省为hessian2,rmi协议缺省为java,http协议缺省为json 性能调优 协议序列化方式,当协议支持多种序列化方式时使用
transporter dubbo协议缺省为netty 性能调优 协议的服务端和客户端实现类型,比如:dubbo协议的mina,netty等,可以分拆为server和client配置

推荐使用dubbo协议,同时自定义端口,协议的服务端和客户端实现类型使用netty4,最后根据线上服务的使用情况定义适合的threadpool和threads。具体配置如下:

dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 9900
dubbo.protocol.threadpool = fixed
dubbo.protocol.threads = 1000
dubbo.protocol.transporter = netty4

使用netty4通信模块需引入netty4依赖,如

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.28.Final</version>
</dependency>

参考资料:

  1. Dubbo官方文档
  2. 配置加载流程
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
11月前
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
1185 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
11月前
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
1459 0
|
11月前
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
225 0
|
11月前
|
SQL Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
1067 0
|
11月前
|
Java 数据库连接 微服务
微服务——MyBatis配置——事务管理
本段内容主要介绍了事务管理的两种类型:JDBC 和 MANAGED。JDBC 类型直接利用数据源连接管理事务,依赖提交和回滚机制;而 MANAGED 类型则由容器全程管理事务生命周期,例如 JEE 应用服务器上下文,默认会关闭连接,但可根据需要设置 `closeConnection` 属性为 false 阻止关闭行为。此外,提到在使用 Spring + MyBatis 时,无需额外配置事务管理器,因为 Spring 模块自带的功能可覆盖上述配置,且这两种事务管理器类型均无需设置属性。
185 0
|
11月前
|
Java 数据库连接 数据库
微服务——MyBatis配置——多环境配置
在 MyBatis 中,多环境配置允许为不同数据库创建多个 SqlSessionFactory。通过传递环境参数给 SqlSessionFactoryBuilder,可指定使用哪种环境;若忽略,则加载默认环境。`environments` 元素定义环境配置,包括默认环境 ID、事务管理器和数据源类型等。每个环境需唯一标识,确保默认环境匹配其中之一。代码示例展示了如何构建工厂及配置 XML 结构。
181 0
|
11月前
|
缓存 Java 数据库连接
微服务——MyBatis配置——常见配置
本文介绍了 MyBatis 的常见配置及其加载顺序。属性配置优先级为:方法参数传递的属性 &gt; resource/url 属性中配置 &gt; properties 元素中指定属性。同时列举了多个关键配置项,如 `cacheEnabled`(全局缓存开关)、`lazyLoadingEnabled`(延迟加载)、`useGeneratedKeys`(使用 JDBC 自动生成主键)等,并详细说明其作用、有效值及默认值。这些配置帮助开发者优化 MyBatis 的性能与行为。
177 0
|
存储 网络协议 Nacos
高效搭建Nacos:实现微服务的服务注册与配置中心
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。
2155 82
高效搭建Nacos:实现微服务的服务注册与配置中心
|
12月前
|
Shell Go 开发工具
【环境】Rocky8使用gvm配置Go多版本管理的微服务开发环境(go-zero)
通过本文的介绍,我们详细讲解了如何在Rocky8上使用gvm来管理多个Go版本,并配置go-zero框架的开发环境。通过gvm的灵活管理,开发者可以轻松切换不同的Go版本,以适应不同项目的需求。同时,go-zero框架的使用进一步提升了微服务开发的效率和质量。希望本文能帮助开发者构建高效的Go语言开发环境,提高项目开发的灵活性和稳定性。
377 63
|
9月前
|
人工智能 数据可视化 JavaScript
颠覆开发效率!国内首个微服务编排框架Juggle开源啦!
Juggle是国内首个开源的微服务编排框架,专注于解决企业微服务进程中接口重复开发、系统对接复杂等问题。它提供零代码、低代码和AI增强功能,通过可视化拖拽快速组装简单API为复杂接口,支持多协议、多语言脚本和流程多版本管理。相比国外框架如Conductor,Juggle更贴合国内需求,具备高效开发、企业级可靠性及信创适配等优势,助力企业实现敏捷创新与数字化转型。
颠覆开发效率!国内首个微服务编排框架Juggle开源啦!