github:github.com/apache/dubb…
基本概念
现代的分布式服务框架的基本概念与 RMI
是类似的,同样是使用 Java
的 Interface
作为服务契约,通过注册中心来完成服务的注册和发现,远程通讯的细节也是通过代理类来屏蔽。具体来说,Dubbo
在工作时有以下五个角色参与:
- 服务提供者 - 启动时在指定端口上暴露服务,并将服务地址和端口注册到注册中心上
- 服务消费者 - 启动时向注册中心订阅自己感兴趣的服务,以便获得服务提供方的地址列表
- 注册中心 - 负责服务的注册和发现,负责保存服务提供方上报的地址信息,并向服务消费方推送
- 监控中心 - 负责收集服务提供方和消费方的运行状态,比如服务调用次数、延迟等,用于监控
- 运行容器 - 负责服务提供方的初始化、加载以及运行的生命周期管理
架构
节点 | 角色说明 |
---|---|
Consumer | 需要调用远程服务的服务消费方 |
Registry | 注册中心 |
Provider | 服务提供方 |
Container | 服务运行的容器 |
Monitor | 监控中心 |
调用关系
- 服务容器负责启动,加载,运行服务提供者。
- 服务提供者在启动时,向注册中心注册自己提供的服务。
- 服务消费者在启动时,向注册中心订阅自己所需的服务。
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
部署阶段
- 服务提供者在指定端口暴露服务,并向注册中心注册服务信息。
- 服务消费者向注册中心发起服务地址列表的订阅。
运行阶段
- 注册中心向服务消费者推送地址列表信息。
- 服务消费者收到地址列表后,从其中选取一个向目标服务发起调用。
- 调用过程服务消费者和服务提供者的运行状态上报给监控中心。
Dubbo 框架设计
官方文档: dubbo.apache.org/zh/docs/v2.…
Dubbo 示例
XML配置: dubbo.apache.org/zh/docs/v3.…
快速开始: dubbo.apache.org/zh/docs/v2.…
Github示例:github.com/Jonothan-Ho…
Dubbo
的应用一般都是通过 Spring
来组装的。
POM配置
参考官方提供的demo。这里只提供下 maven
配置。
<properties>
<dubbo.version>3.0.6</dubbo.version>
<spring.version>5.2.19.RELEASE</spring.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>${spring.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-bom</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
provider POM
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>dubbo-demo-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<type>pom</type>
</dependency>
</dependencies>
consumer POM
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>dubbo-demo-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<type>pom</type>
</dependency>
</dependencies>