什么是Dubbo

150 阅读5分钟

前言

image.png 进入Dubbo官网,我们可以看到第一句话,Apache Dubbo是一款易用、高性能的WEB和RPC框架,所以在介绍Dubbo前,我们先来简单介绍一下RPC是个啥。

什么是RPC

RPC(Remote Procedure Call,远程过程调用)框架是一种用于不同进程或计算机之间通信的技术,使得一个程序可以请求另一个地址空间(通常是网络上的另一台机器)的程序的服务,就像调用本地函数一样。

基本上,RPC 框架允许应用程序通过网络调用远程计算机上的函数或过程,而不需要开发者显式编写网络通信相关的代码。它隐藏了底层网络通信的复杂性,让远程调用看起来像是本地调用一样简单。

RPC 框架通常包含以下关键组件:

  1. 通信协议(Communication Protocol) :定义了客户端和服务器之间的通信规范,包括数据格式、消息的序列化和反序列化方式等。
  2. 远程代理生成器(Remote Proxy Generator) :根据定义的服务接口或描述文件生成客户端代码,使得客户端能够调用远程服务的方法。
  3. 序列化(Serialization) :将数据结构或对象转换为字节流以进行网络传输,同时在接收端将字节流反序列化为原始数据结构或对象。
  4. 服务注册与发现(Service Registration and Discovery) :一些 RPC 框架提供了服务注册中心,用于注册和发现可用的服务,使得客户端能够动态地发现并调用服务。
  5. 容错与负载均衡(Fault Tolerance and Load Balancing) :提供容错机制以及负载均衡策略,确保在服务出现故障或负载不平衡时系统能够保持稳定和高可用性。
  6. 超时与重试机制(Timeout and Retries) :确保在网络环境不稳定或服务不可用时,能够进行超时处理和重试策略,增加调用的稳定性和可靠性。

一些常见的 RPC 框架包括 Dubbo、gRPC、Apache Thrift、Apache Avro 等。它们都提供了上述组件,并在不同的语言和平台上实现了对远程服务调用的支持,简化了分布式系统中的开发和通信。

Dubbo

简介

Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。

在云原生时代,Dubbo 相继衍生出了 Dubbo3、Proxyless Mesh 等架构与解决方案,在易用性、超大规模微服务实践、云原生基础设施适配、安全性等几大方向上进行了全面升级。---Dubbo官网 image.png 上面这张图就是Dubbo的总体架构,可以看到,Dubbo由服务运行容器(Container)、服务提供方(Provider)、服务消费方(Consumer)、注册中心(Registry)及监控中心(Monitor)构成。

启动及执行流程

Dubbo 框架的启动和执行流程包括以下步骤:

  1. Provider(服务提供者)启动流程

    • 编写服务提供者的代码:定义服务接口和实现类,并配置服务提供者的信息,如注册中心地址、服务端口等。
    • 初始化 Dubbo 的配置:通过 Dubbo 的配置文件或编码方式初始化 Dubbo 相关配置,包括协议、注册中心、容错机制等。
    • 启动 Dubbo 服务:启动服务提供者,Dubbo 将会初始化各种协议、注册中心等实例,并将服务暴露出来,注册到注册中心上,等待消费者调用。
  2. Consumer(服务消费者)调用流程

    • 编写服务消费者的代码:定义服务接口,并配置服务消费者的信息,如注册中心地址、远程服务的调用方式等。
    • 初始化 Dubbo 的配置:与服务提供者类似,需要初始化 Dubbo 相关的配置信息。
    • 获取远程服务代理对象:通过 Dubbo 的服务引用机制,根据服务接口和配置信息,获取远程服务的代理对象。
    • 通过代理对象调用远程服务:使用代理对象调用远程服务的方法,Dubbo 将会负责处理网络通信、序列化、负载均衡等操作,最终将调用请求发送到远程服务提供者。
    • 远程服务提供者执行服务逻辑:远程服务提供者接收到请求后,执行对应的服务逻辑,并将结果返回给服务消费者。
  3. Dubbo 执行流程概述

    • 服务暴露:服务提供者通过配置和 API 将服务暴露出去,包括服务接口、实现类等信息,向注册中心注册服务信息。
    • 服务引用:服务消费者根据服务接口和配置信息获取远程服务的代理对象,Dubbo 会根据配置进行负载均衡、容错等处理。
    • 远程调用:服务消费者通过代理对象调用远程服务方法,Dubbo 负责处理序列化、网络通信、负载均衡等操作。
    • 服务执行:远程服务提供者接收到请求,执行对应的服务逻辑,并将结果返回给服务消费者。

整个 Dubbo 的启动和执行流程涉及服务暴露、服务引用、远程调用和服务执行等环节,通过框架提供的功能,使得远程服务调用看起来像本地调用一样简单,同时具备了高性能、负载均衡、容错处理等特性。

最后:

作为Dubbo专栏的第一篇文章,今天就先带大家简单了解一下RPC及Dubbo,专栏后续会做Dubbo核心流程的源码解析,大家感兴趣的话可以点个关注并订阅专栏,谢谢大家。