Dubbo 的概述
Dubbo 是一个分布式服务框架,它提供了远程调用、负载均衡、服务注册和发现等分布式服务必备的功能。Dubbo 可以帮助开发人员构建高性能、可伸缩和可扩展的分布式服务系统。
Dubbo 的架构和相关核心概念
Dubbo 的架构分为三层:服务提供者、注册中心和服务消费者。
服务提供者:提供服务实现,并将服务注册到注册中心,等待消费者调用。
服务消费者:调用远程服务,并通过注册中心获取服务提供者的地址,然后调用服务提供者的接口。
注册中心:存储服务提供者的信息,并将信息提供给消费者,消费者通过注册中心获取服务提供者的地址。
监控中心:监控服务提供者的状态和性能,并提供服务治理功能。
Dubbo 的快速入门
使用SpringBoot整合Dubbo进行快速部署。
1.配置 Dubbo:在 pom.xml 文件中添加 Dubbo 依赖,然后在配置文件中添加 Dubbo 配置信息。
dubbo:
application:
name: dubbo-springboot-demo-consumer
protocol:
name: dubbo
port: -1
registry:
address: zookeeper://${zookeeper.address:127.0.0.1}:2181
从而实现了以zookeeper为注册中心的服务注册配置。
2.定义服务接口
public interface DemoService {
String sayHello(String name);
}
3.实现服务提供者:实现服务接口
@DubboService
public class DemoServiceImpl implements DemoService {
@Override
public String sayHello(String name) {
return "hello "+name+"!!!";
}
}
4.实现服务消费者:在服务消费者中,通过 @Reference 注解引用服务提供者的实现。即可在方法体中调用service执行对应的远程方法。
@DubboReference
private DemoService demoService;
启动应用:启动服务提供者和服务消费者应用,测试服务是否正常工作。
关于RPC中的序列化协议
使用不同的传输协议和序列化协议的执行效率如下
由数据可得,基于二进制序列化进行传输效率基本要高于基于文本序列化进行传输。
通常来讲Dubbo是基于TCP协议进行传输的,且采用二进制序列化,效率远远高于Json、xml等文本序列化协议。另一种常用的基于HTTP协议的远程调用框架Feign,便采用Json格式的序列化协议。虽然效率不如Dubbo,但做到了更强的松耦合,且开发与测试过程的消息可读可调试。Feign也被认为是伪RPC框架。
关于负载均衡
Dubbo提供了以下几种负载均衡策略:
1.随机(Random):随机选择一个服务提供者节点处理请求;
2.轮询(RoundRobin):按照顺序轮流选择服务提供者节点处理请求;
3.最少活跃数(LeastActive):选择最少正在处理请求的服务提供者节点处理请求;
4.一致性哈希(ConsistentHash):根据请求参数的hash值选择服务提供者节点,保证同一参数的请求总是选择同一个节点处理;
5.带权重的随机(RandomWeighted):根据服务提供者节点的权重进行随机选择;
6.带权重的轮询(RoundRobinWeighted):根据服务提供者节点的权重进行轮询选择。