RPC框架之Dubbo(1)——基本概念

664 阅读2分钟

官网:dubbo.apache.org/zh/

github:github.com/apache/dubb…

RMI:juejin.cn/post/707521…

基本概念

现代的分布式服务框架的基本概念与 RMI 是类似的,同样是使用 JavaInterface 作为服务契约,通过注册中心来完成服务的注册和发现,远程通讯的细节也是通过代理类来屏蔽。具体来说,Dubbo 在工作时有以下五个角色参与:

  1. 服务提供者 - 启动时在指定端口上暴露服务,并将服务地址和端口注册到注册中心上
  2. 服务消费者 - 启动时向注册中心订阅自己感兴趣的服务,以便获得服务提供方的地址列表
  3. 注册中心 - 负责服务的注册和发现,负责保存服务提供方上报的地址信息,并向服务消费方推送
  4. 监控中心 - 负责收集服务提供方和消费方的运行状态,比如服务调用次数、延迟等,用于监控
  5. 运行容器 - 负责服务提供方的初始化、加载以及运行的生命周期管理

架构

image.png

节点角色说明
Consumer需要调用远程服务的服务消费方
Registry注册中心
Provider服务提供方
Container服务运行的容器
Monitor监控中心

调用关系

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

部署阶段

  • 服务提供者在指定端口暴露服务,并向注册中心注册服务信息。
  • 服务消费者向注册中心发起服务地址列表的订阅。

运行阶段

  • 注册中心向服务消费者推送地址列表信息。
  • 服务消费者收到地址列表后,从其中选取一个向目标服务发起调用。
  • 调用过程服务消费者和服务提供者的运行状态上报给监控中心。

Dubbo 框架设计

官方文档: dubbo.apache.org/zh/docs/v2.…

image.png

Dubbo 示例

XML配置: dubbo.apache.org/zh/docs/v3.…

快速开始: dubbo.apache.org/zh/docs/v2.…

Github示例:github.com/Jonothan-Ho…

Dubbo 的应用一般都是通过 Spring 来组装的。

image.png

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>