1 Dubbo概述
1.1 RPC概述
RPC(Remote Procedure Call),即远程过程调用,是一种通过网络从远程计算机程序上请求服务模式的协议,也是一种程序间的通信方式,它可以让远程客户端像调用本地服务一样调用远程服务,屏蔽了远程服务的复杂性。
在 RPC 模型中,调用方通过客户端代理调用远程服务,而无需了解具体数据传输细节,RPC 框架实现了数据打包、网络传输和解包等细节,可实现数据传输的透明化,并提供了类似于本地调用一样的编程模型。
如果没有 RPC,远程调用会相对复杂,需要使用底层的 Socket 或 Http 请求等技术来实现数据传输。RPC 技术解决了这个问题,使得远程调用变得简单和可靠,并且对于分布式系统下的服务治理也有着非常重要的作用。
常见的 RPC 框架有 Dubbo、Spring Cloud、gRPC 等。
1.2 什么是Dubbo
Dubbo是一个高性能、轻量级、基于Java的开源RPC框架,由阿里巴巴公司开发维护。Dubbo提供了一个开放式的、高性能的RPC协议,可以使得服务消费者只需要采用简单的操作即可远程调用服务以及获得结果,避免了复杂而繁琐的调用流程,广泛应用于分布式系统的构建。
Dubbo具有如下特点:
1、通信协议:默认提供Dubbo协议和简化版的Http协议,高性能、可扩展的TCP通信协议,使得服务消费者只需要采用简单的操作即可远程调用服务,同时具有较低的网络延迟和较高的性能。
2、负载均衡:Dubbo支持基于权重的负载均衡、随机、轮询等多种负载均衡策略。
3、集群容错:Dubbo提供了多种集群容错方案,如失败自动切换、失败快速响应、失败重试等。
4、服务治理:Dubbo提供了丰富的监控及管理功能,如统计、限流、熔断、降级等。
5、高可扩展性:Dubbo框架支持扩展机制,可以扩展协议、序列化、网络通信等多项功能。
1.3 Dubbo的发展历史
Dubbo的发展历史主要可以分为如下几个阶段:
1、开源前历程:Dubbo 最初诞生于 2008 年,当时阿里巴巴内部的一部分业务正使用 HSF(High Speed Framework)作为 RPC 框架,并存在着很多不足之处。于是,Dubbo 的前身 Dubbox 应运而生,成为了内部服务的基础框架。
2、开源之路:2011 年 10 月,Dubbox 在 GitHub 上首次公开发布。将原有的 Dubbo、Registry(注册中心)、Metadata(元数据)三个独立项目合并。在 Dubbo 全面开源之前,Dubbox 开始了其开源之路,吸引了更多的开发者加入进来,使其成为了当时国内应用最广泛的 RPC 框架之一。
3、社区拉起:2016 年初,Dubbo 在开源社区中的贡献者开始增多,阿里巴巴工程师集中精力将其代码整理及升级。Dubbox 转而为 Dubbo,并以 Apache License 2.0 开源托管在阿里巴巴代码托管平台Gitee和 GitHub 上。和 Spring Boot、Spring Cloud 等一同成为微服务治理的标准工具。
4、稳定性与功能完善:2018 年,Dubbo 在社区框架评测中以最优异的性能表现获得评测最高分,同时在稳定性、扩展性、易用性等方面得到了更好的验证和支持,Dubbo 成了国内最受欢迎的分布式 RPC 框架之一。
目前,Dubbo 已经成为了国内很多大型互联网企业的服务治理基础框架,如阿里、蚂蚁金服、京东、美团、华为等。同时,Dubbo 也与 Spring 等主流框架深度整合,为 Java 开发者高效构建微服务生态系统提供了方便。
1.4 Dubbo的架构
Dubbo 的架构主要由以下四个部分组成:
1、服务提供者(Provider):服务提供者是具有某种功能的应用程序,可以向 Dubbo 注册中心注册自己提供的服务,当服务消费者发起请求时,服务提供者将会响应请求。
2、服务消费者(Container):服务消费者是调用 Dubbo 应用程序的应用,它通过 Dubbo 注册中心发现并消费服务提供者所提供的服务。
3、注册中心(Registry):注册中心是 Dubbo 的核心组件,它用于服务的注册、发现、路由和负载均衡等操作。Dubbo 支持多种注册中心,包括 Zookeeper、Nacos 等。
4、监控中心(Monitor):监控中心是 Dubbo 的扩展组件,用于监控服务的调用情况和性能情况,以帮助分析和优化 Dubbo 应用程序。
1.5 Dubbo的注册发现流程
这也是一道经典的面试题。
Dubbo的注册发现流程如下:
1、首先,服务的提供者启动服务时,将自身具备的服务注册到注册中心,包括当前提供者的IP地址和端口号等信息,Dubbo会同时注册该项目提供的远程调用的方法。
2、消费者项目启动时,也注册到注册中心,同时从注册中心中获得当前项目具备的所有服务列表。
3、当注册中心中有新的服务出现时,注册中心会通知已经订阅发现的消费者,消费者会更新所有服务列表。
4、消费者需要调用远程方法时,根据注册中心服务列表的信息,只需使用服务名称,就可以利用Dubbo调用远程方法。
2 Dubbo负载均衡
2.1 Dubbo负载均衡概述
在实际项目中,每个服务基本都是以集群方式运行的,以满足整个系统对高并发的需求。此时,服务的消费者应该能够访问当前较为空闲的那个服务提供者,以保证系统的整体效率。Dubbo框架内部支持多种负载均衡算法,能够尽可能的让请求在相对空闲的服务器上运行。
在不同的项目中,可能选用不同的负载均衡策略,以达到最好的效果。
2.2 Dubbo内置负载均衡策略算法
Dubbo 支持多种负载均衡策略,包括:
1、Random LoadBalance:随机负载均衡,每次请求随机选择一个可用的服务提供者。
2、Round Robin LoadBalance:轮询负载均衡,按照服务提供者顺序轮询分配请求,当服务提供者故障时自动跳过。
3、Least Active LoadBalance:最小活跃数负载均衡,根据服务提供者处理请求的平均时间来选择最小活跃数的服务提供者,即处理请求时间最短的服务提供者。
4、Consistent Hash LoadBalance:一致性 Hash 负载均衡,根据请求的 hash 值选择服务提供者,这种算法可以避免因节点的增加或删除而造成的请求转移问题。
Dubbo根据具体的场景和需求选择不同的负载均衡策略,同时也支持自定义负载均衡策略,开发者可以根据自己的需求实现自定义的负载均衡策略。