Dubbo是一个高性能的Java RPC框架。RPC是远程过程调用的缩写,其基本思想是:客户端像调用本地方法一样,通过网络请求调用远程服务器上的服务。Dubbo可以帮助我们更方便地构建分布式应用程序,它具有高效的远程调用、服务自动注册和发现、负载均衡、容错机制等众多特性,是企业级应用中可靠的基础架构。本文将从以下十个方面介绍Dubbo。
一、介绍
1. Dubbo是什么
Dubbo是一种高性能、轻量级的分布式服务框架,它的设计目标是为大规模分布式应用提供支持。Dubbo由阿里巴巴提供,最初由Alibaba Dubbo Team开发,目前已经成为Apache基金会的顶级项目。Dubbo在国内得到了广泛的应用,像阿里巴巴、京东、美团等众多互联网企业都在使用该框架。
2. 为什么需要Dubbo
在分布式系统中,服务之间相互依赖非常复杂,需要大量的通信和协调。Dubbo可以帮助我们更方便地构建分布式应用程序,它具有高效的远程调用、服务自动注册和发现、负载均衡、容错机制等众多特性。通过Dubbo,我们可以更方便地实现服务治理、服务调用链追踪、服务降级、服务熔断等重要功能。
3. Dubbo的特性
Dubbo最重要的特性包括:
- 高效的远程调用,支持多种传输协议、序列化协议和集群容错机制;
- 可扩展的服务自动发现,支持多种注册中心;
- 丰富的负载均衡策略,支持轮询、随机、最少活跃调用等多种策略;
- 灵活的集群容错机制,支持多种容错策略;
- 多协议支持,Dubbo同时支持dubbo://、http://和hessian://等多种协议。
二、 Dubbo的核心概念
1. 暴露和引用(Export and Refer)
Dubbo的暴露和引用是通过ProviderConfig和ConsumerConfig实现的,ProviderConfig是服务提供者配置类,可以用于配置服务的接口、服务实现类、协议等,还可以设置暴露服务所用的协议、权重、端口号等信息。ConsumerConfig是服务消费者配置类,可以用于配置服务消费者所接口、协议等信息,还可以设置引用服务所用的协议、集群等信息。
暴露
- 暴露过程中,首先需要解析配置,根据配置中的协议创建相应的协议实现;
- 将协议绑定到指定的 IP 和端口上;
- 将服务地址信息注册到注册中心,以供其他调用者查询;
- 通知订阅者(监听器)服务地址信息的变化;
- 调用者接收到订阅者的通知,得知服务地址信息变化;
- 调用者通过网络层向提供者发起调用请求;
- 提供者处理请求后,返回结果给调用者。
引用的过程类似,只是方向相反,具体如下:
- 引用过程中,同样需要解析配置,根据配置中的协议创建相应的协议实现;
- 连接到指定的服务地址;
- 查询注册中心,获取对应服务地址信息;
- 返回服务地址信息给调用者;
- 提供者处理调用请求,返回结果给调用者;
- 调用者接收到结果,结束调用过程。
2. 服务提供者和服务消费者
Dubbo的服务提供者是指提供服务的主体,通常会暴露自己的服务接口,并通过某种协议提供服务。而服务消费者是使用服务的主体,通常会引用提供者的服务接口,并通过某种协议调用服务。
- 服务提供者向 Zookeeper 注册服务,服务消费者向 Zookeeper 订阅服务;
- 服务消费者通过 Zookeeper 获取服务提供者的地址信息,然后调用服务提供者的服务。
3. 注册中心
Dubbo最核心的概念就是注册中心,它用于管理服务提供者的注册与发现,使服务消费者能够动态地发现和访问服务提供者。Dubbo支持多种注册中心,包括Zookeeper、Redis、Multicast等等,其中Zookeeper是Dubbo默认的注册中心。
- 服务提供者将自己提供的服务注册到注册中心。
- 服务消费者从注册中心订阅所需的服务列表。
- 注册中心返回可用的服务列表给服务提供者和服务消费者。
- 服务消费者调用服务提供者的服务。
- 服务提供者返回服务结果给服务消费者。
4. 负载均衡
Dubbo 的负载均衡是指服务消费者在调用服务提供者的时候,如何从多个服务提供者中选择一个进行调用。Dubbo 默认提供了多种负载均衡策略,例如随机、轮询、最少活跃数等。服务消费者通过 Dubbo 的负载均衡模块,将请求分发给多个服务提供者,然后由负载均衡模块根据选定的负载均衡策略选择一个服务提供者进行调用,从而达到分摊负载的效果。
在图中,服务消费者 A 需要调用一个服务提供者,但是有多个服务提供者可供选择,这时候负载均衡 B 就发挥作用了。B 会根据负载均衡策略,选择一个服务提供者进行调用,例如选择了服务提供者1 C。如果 C 发生故障或宕机,B 就会重新选择一个可用的服务提供者,例如选择了服务提供者2 D。这样,服务消费者 A 就可以通过 Dubbo 的负载均衡模块,动态地选择服务提供者,从而实现负载均衡。
5. 集群容错
Dubbo的集群容错是指当服务提供者发生故障时,Dubbo如何从备选节点中选择一个可用的节点让服务消费者访问。Dubbo提供了多种集群容错策略,包括快速失败、失败切换、失败重试等等,可以根据需求选择适合的策略。
- Consumer:服务的消费者,发起服务调用的一方。
- Invoker:Dubbo 中的调用器,将消费者的请求转换成可执行的任务并执行。
- Cluster:Dubbo 中的集群容错模块,将多个 Invoker 封装成一个集群。
- Failover:Dubbo 集群容错模块中的容错策略之一,如果某次调用失败,会自动切换到下一个 Invoker 进行调用,直到成功为止。
- Failfast:Dubbo 集群容错模块中的容错策略之一,如果某次调用失败,会立即抛出异常。
- Failsafe:Dubbo 集群容错模块中的容错策略之一,如果某次调用失败,会记录下异常,但不会抛出异常。
- Failback:Dubbo 集群容错模块中的容错策略之一,如果某次调用失败,会在后台异步重试。
- Forking:Dubbo 集群容错模块中的容错策略之一,将请求并发调用多个 Invoker,只要有一个 Invoker 成功返回结果,就立即返回。