com.huaweicloud.dubbo-servicecomb:discovery-tests-client

an apache dubbo extension to use servicecomb patterns of microservices registration and dynamic configuration

License

License

Categories

Categories

CLI User Interface Dubbo Net Networking
GroupId

GroupId

com.huaweicloud.dubbo-servicecomb
ArtifactId

ArtifactId

discovery-tests-client
Last Version

Last Version

1.1.0
Release Date

Release Date

Type

Type

jar
Description

Description

an apache dubbo extension to use servicecomb patterns of microservices registration and dynamic configuration

Download discovery-tests-client

How to add to project

<!-- https://jarcasting.com/artifacts/com.huaweicloud.dubbo-servicecomb/discovery-tests-client/ -->
<dependency>
    <groupId>com.huaweicloud.dubbo-servicecomb</groupId>
    <artifactId>discovery-tests-client</artifactId>
    <version>1.1.0</version>
</dependency>
// https://jarcasting.com/artifacts/com.huaweicloud.dubbo-servicecomb/discovery-tests-client/
implementation 'com.huaweicloud.dubbo-servicecomb:discovery-tests-client:1.1.0'
// https://jarcasting.com/artifacts/com.huaweicloud.dubbo-servicecomb/discovery-tests-client/
implementation ("com.huaweicloud.dubbo-servicecomb:discovery-tests-client:1.1.0")
'com.huaweicloud.dubbo-servicecomb:discovery-tests-client:jar:1.1.0'
<dependency org="com.huaweicloud.dubbo-servicecomb" name="discovery-tests-client" rev="1.1.0">
  <artifact name="discovery-tests-client" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.huaweicloud.dubbo-servicecomb', module='discovery-tests-client', version='1.1.0')
)
libraryDependencies += "com.huaweicloud.dubbo-servicecomb" % "discovery-tests-client" % "1.1.0"
[com.huaweicloud.dubbo-servicecomb/discovery-tests-client "1.1.0"]

Dependencies

test (2)

Group / Artifact Type Version
junit : junit jar 4.12
org.assertj : assertj-core jar 3.11.1

Project Modules

There are no modules declared in this project.

dubbo-servicecomb 项目介绍

dubbo-servicecomb 为 dubbo 开发的微服务应用,提供注册中心、配置中心、服务治理支持,方便 dubbo 应用使用 华为云微服务引擎

dubbo 的微服务概念一直在变化, 2.7.x 之前的版本和之后的版本存在差异。在 2.7.x 之前, dubbo 主要提供 基于接口的服务发现, 2.7.x 以后,为了和主流社区的概念统一 (比如 Spring Cloud, ServiceComb, Istio 等), dubbo 提供了基于服务的服务发现 机制。

dubbo-servicecomb 为 dubbo 版本(包括 2.7.x 之前的版本), 提供 基于服务的服务发现。 这样不同的微服务开发框架都可以平滑的接入 华为云微服务引擎,在微服务引擎里面,可以采用统一的微服务模型进行管理和治理。

版本配套关系

阅读下面的内容前,请切换对应代码分支,查看需要的版本内容。

分支 最新版本 dubbo 基线版本 支持的dubbo版本建议
2.6.x 1.1.3 2.6.9 2.6.x,建议使用前先升级到 2.6.9 以上的版本
2.6.x 1.1.5-SNAPSHOT 2.6.9 2.6.x,建议使用前先升级到 2.6.9 及以上的版本
master 1.3.3 2.7.8 2.7.x,建议使用前先升级到 2.7.8 及以上的版本
master 1.3.5-SNAPSHOT 2.7.8 2.7.x,建议使用前先升级到 2.7.8 及以上的版本

dubbo 微服务概念 vs dubbo-servicecomb

  • Dubbo微服务概念:

    • 应用(application):可以独立部署和运行的单元。即通常所说的微服务。
    • 服务(service):dubbo的服务发现机制是基于接口(java interface)的,dubbo的服务,对应于我们通常所说的接口。
  • ServiceComb微服务概念:

    • 微服务(microservice):可以独立部署和运行的单元。即通常所说的微服务。
    • 应用(application): 服务于某种客户功能的一组微服务的统称。 比如客户OA系统,就是一个应用。应用由多个微服务组成,比如认证鉴权微服务、业务流微服务等。
    • 契约/接口(schema):一个接口(java interface)对应一个契约文件。契约类似于dubbo的服务,但是契约没有实例化的概念,而dubbo的服务是可以实例化的,类似于微服务实例。

这些概念容易导致冲突,在下面的文档中,除了特殊说明,都会采用ServiceComb微服务概念。

dubbo 服务治理概念 vs dubbo-servicecomb

和服务发现一样, dubbo 的服务治理是基于接口的。 dubbo 服务在启动的时候, 会将与接口有关的治理项注册到注册中心。通过注册中心控制台, 可以修改治理项,或者增加新的治理项。 注册中心将治理项的变更,推送给相关的服务订阅者(consumer),从而实现服务治理。

ServiceComb的治理过程和dubbo不同。服务注册的时候,只会将微服务信息、微服务实例信息、契约/接口信息注册到注册中心。微服务实例信息的变更, 注册中心会推送给服务订阅者(consumer)。 单纯通过注册中心,无法实现服务治理。 ServiceComb提供了独立的配置中心,可以在配置中心修改、 增加配置项,配置项的变更会推送给作用域内的微服务。配置项作用域包括全局生效、微服务生效等。 服务订阅者(consumer)通过订阅配置变更实现 服务治理。

dubbo-servicecomb 功能介绍

基于 dubbo 提供的扩展机制,将 dubbo 的微服务概念和治理模型,转换为 ServiceComb的微服务概念和治理模型。 使用 cse dubbo 接入 CSE 以后,应用视图如下:

dubbo  <------->  servicecomb dubbo
应用                     服务
无                       应用
服务                     契约/接口
服务实例                 服务实例中的一个端点(endpoint)

一个示例项目的注册信息:

Microserivce:
   application: Dubbo应用示例
   service:dubbo provider
   schemas: com.dubbo.Foo
                    com.dubbo.Bar
MicroserviceInstance:
   endpoints: dubbo://192.168.1.2/com.dubbo.Foo?methods=sayHello&pid=7504
                       dubbo://192.168.1.3/com.dubbo.Bar?methods=sayHello&pid=7507

为了实现 dubbo 的原生治理, dubbo-servicecomb 增加了一个配置项:

dubbo.servicecomb.governance: {"providerInfos":[{"serviceName":"price-provider","schemaInfos":[{"schemaId":"com.huaweicloud.it.price.PriceService","parameters":{"timeout":5000}}]}]}

服务订阅者监听这个配置项的变更,模拟 dubbo 原生监听注册信息的变更。 当配置项变更后,会调用 dubbo 的 NotifyListener , 将变更的属性,和 注册属性进行合并(配置变更覆盖注册属性),从而实现对于 dubbo 的服务治理。 上面的配置项演示了设置请求超时时间的功能。

优点和限制

  • 优点

    • 统一了 servicecomb、spring cloud、dubbo 等微服务开发框架的模型。都采用服务进行统一的注册和发现。能够更好的和云原生开发相契合,比如将服务名映射为 istio 的主机名,能够更好的使用云原生运行环境的服务发现机制。
    • 缩小了注册中心的管理规模,能够支持更大型系统的注册模型。原生dubbo,假设有100个应用,每个应用有100个服务,每个应用部署100个实例,那么dubbo需要管理 100 * 100 * 100个实例和心跳信息,对注册中心的性能提出很高的要求,维持心跳也会对网络带宽造成极大的浪费。采用 dubbo servicecomb, 只需要管理 100 * 100 个实例信息和心跳,减少了100(服务个数)倍。通常来讲,应用个数相对是比较固定和比较少的,而服务个数和实例个数增长的速度远大于应用,所以实际场景这个优化的效果是非常好的。
    • 统一了微服务引擎对于不同微服务框架,比如 Spring Cloud、ServiceComb、Dubbo的治理模型。治理都通过配置的方式进行,让 Dubbo 跟随微服务引擎按照一样的策略长期发展和演进,为以后针对不同的开发框架抽象统一的治理模型奠定技术基础。
  • 限制

    • 原生dubbo允许一个服务在不同的应用中提供实现。这个给服务拆分和合并带来了很大的方便,将一个微服务拆分两个微服务,consumer不用感知这个拆分。使用 dubbo servicecomb,服务拆分涉及接口变更,需要调用端配套修改(或者只能够通过应用网关屏蔽差异,前提条件是URL不发生变化)。
    • 原生dubbo可以通过注册中心控制台或者REST接口,调整注册参数,从而实现对微服务的治理。使用 dubbo servicecomb,无法满足这方面的使用要求。短期内需要通过提供的配置项实现治理,无法使用 dubbo-admin 控制台。

快速开始

dubbo-servicecomb-sample 提供了使用 dubbo-servicecomb 接入的例子。 可以下载 示例进行本地体验, 本章节简单介绍一个 dubbo 应用, 快速使用 dubbo-servicecomb 接入微服务引擎的过程。

  • 下载本地微服务引擎, 解压后运行 start.bat 启动。 工具会安装注册中心、配置中心,以及控制台。 安装完毕后, 通过 http://localhost:30106/ 可以访问控制台。

  • POM 中引入依赖

      ```
      <dependency>
        <groupId>com.huaweicloud.dubbo-servicecomb</groupId>
        <artifactId>dubbo-servicecomb-service-center</artifactId>
      </dependency>
      <dependency>
        <groupId>com.huaweicloud.dubbo-servicecomb</groupId>
        <artifactId>dubbo-servicecomb-config-center</artifactId>
      </dependency>
      ```
    

    上面两个部件,实现 dubbo 应用的注册和动态配置、服务治理配置项检测等功能。

  • 采用 Spring 启动 Spring 扫描路径中,需要增加 classpath*:spring/dubbo-servicecomb.xml, 举例如下:

      ```
      public class PriceApplication {
        public static void main(String[] args) throws Exception {
          try {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath*:spring/dubbo-provider.xml", "classpath*:spring/dubbo-servicecomb.xml");
            context.start();
            System.in.read();
          } catch (Throwable e) {
            e.printStackTrace();
          }
        }
      }
      ```
    
  • 采用 Spring Boot 启动 Spring 扫描路径中,需要增加 classpath*:spring/dubbo-servicecomb.xml, 举例如下:

     ```
     @SpringBootApplication
     @ImportResource({"classpath*:spring/dubbo-provider.xml", "classpath*:spring/dubbo-servicecomb.xml"})
     public class PriceApplication {
       public static void main(String[] args) throws Exception {
         try {
           SpringApplication.run(PriceApplication.class);
         } catch (Throwable e) {
           e.printStackTrace();
         }
       }
     }
     ``` 
    

    Spring Boot 启动,需要额外依赖如下 jar 包:

     ```
     <dependency>
       <groupId>com.huaweicloud.dubbo-servicecomb</groupId>
       <artifactId>dubbo-servicecomb-spring-boot</artifactId>
     </dependency>
     ```
    
  • 使用 service center 作为注册发现。 在 Spring 配置文件中增加如下配置。 如果配置文件已经配置了 zookeeper, 那么需要使用下面的配置项进行替换。

      ```xml
      <dubbo:registry address="sc://127.0.0.1:30100"/>
      ```
    

    这里配置的地址信息是不重要的。 服务中心和配置中心的实际地址在 dubbo.properties 里面指定。

  • 在配置文件 dubbo.properties 增加配置项。 基本配置项包括微服务信息、微服务实例信息和服务中心、注册中心地址信息。

      ```properties        
      #### 服务配置信息 ####
      # 所属应用。
      dubbo.servicecomb.service.application=discovery
      # 服务名称。
      dubbo.servicecomb.service.name=price-provider
      # 版本。默认为 1.0.0.0
      dubbo.servicecomb.service.version=1.0.0
      # 环境。默认为空。可选值:development, testing, acceptance, production
      dubbo.servicecomb.service.environment=production
      #### END
      
      #### 服务中心配置信息 ####
      dubbo.servicecomb.registry.address=http://127.0.0.1:30100
      
      #### 配置中心配置信息 ####
      dubbo.servicecomb.config.address=http://127.0.0.1:30113
      ```
    

接入微服务引擎

上面介绍了使用本地微服务引擎开发的过程。华为云微服务引擎接入需要使用 HTTPS,并且需要提供认证信息。 在配置文件增加如下配置即可:

#### 服务中心配置信息 ####
dubbo.servicecomb.registry.address=https://cse.cn-north-1.myhuaweicloud.com

#### 配置中心配置信息 ####
dubbo.servicecomb.config.address=https://cse.cn-north-1.myhuaweicloud.com

#### SSL 配置信息  ####
dubbo.servicecomb.ssl.enabled=true

#### AK/SK 认证配置  ####
dubbo.servicecomb.credentials.enabled=true
dubbo.servicecomb.credentials.accessKey= Your access key
dubbo.servicecomb.credentials.secretKey= Your secret key
dubbo.servicecomb.credentials.project=cn-north-1

所有配置项参考

#### 服务配置信息 ####
# 所属应用。
dubbo.servicecomb.service.application=discovery
# 服务名称。
dubbo.servicecomb.service.name=price-provider
# 版本。默认为 1.0.0.0
dubbo.servicecomb.service.version=1.0.0
# 环境。默认为空。可选值:development, testing, acceptance, production
# dubbo.servicecomb.service.environment=production
# project。 默认为 default
# dubbo.servicecomb.service.project=
#### END

#### 实例配置信息 ####
# 实例初始状态。可选值: UP, DOWN, STARTING, OUTOFSERVICE
# dubbo.servicecomb.instance.initialStatus=UP
#### END

#### 服务中心配置信息 ####
dubbo.servicecomb.registry.address=http://127.0.0.1:30100

#### 配置中心配置信息 ####
dubbo.servicecomb.config.address=http://127.0.0.1:30113

#### SSL 配置信息  ####
#dubbo.servicecomb.ssl.enabled=true
# ssl engine. 默认为 JDK, 可选 OPENSSL
#dubbo.servicecomb.ssl.engine=
# ssl protocols。 默认 TLSv1.2
#dubbo.servicecomb.ssl.protocols=
# ssl ciphers。默认 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
#dubbo.servicecomb.ssl.ciphers=
#dubbo.servicecomb.ssl.authPeer=false
#dubbo.servicecomb.ssl.trustStore=
#dubbo.servicecomb.ssl.trustStoreType=
#dubbo.servicecomb.ssl.trustStoreValue=
#dubbo.servicecomb.ssl.keyStore=
#dubbo.servicecomb.ssl.keyStoreType=
#dubbo.servicecomb.ssl.keyStoreValue=
#dubbo.servicecomb.ssl.crl=
#dubbo.servicecomb.ssl.sslCustomClass=

#### AK/SK 认证配置  ####
#dubbo.servicecomb.credentials.enabled=true
#dubbo.servicecomb.credentials.accessKey=
#dubbo.servicecomb.credentials.secretKey=
#dubbo.servicecomb.credentials.cipher=
#dubbo.servicecomb.credentials.project=cn-south-1
com.huaweicloud.dubbo-servicecomb

HUAWEI CLOUD

Versions

Version
1.1.0