OVERVIEW
概述
Dubbo3是基于Java语言开发的RPC框架,它采用了高性能的通信模型和序列化技术,提供了高效、稳定、易用的远程过程调用服务。Dubbo3支持多种服务治理策略,包括随机、轮询、最少活跃调用等,同时支持多种负载均衡策略,如加权轮询、加权随机等。
Dubbo3的架构采用了分层设计,包括应用层、传输层、注册层、监控层等。应用层主要负责提供服务接口和实现,传输层负责网络通信,注册层负责服务注册与发现,监控层则负责服务监控和管理。这种分层设计使得Dubbo3的架构更加清晰,易于维护和扩展。
??01
和Spring Cloud的关系
图片引用自Dubbo官网
根据官网的架构介绍,Dubbo3是定位与SpringCloud相同的云原生微服务治理框架,它们各自有不同的设计理念和特点,两者在功能上有一些重叠,但也有各自的优势和适用场景。
Dubbo3关注服务的调用、流量分发、流量监控和熔断等,并且底层使用Netty这样的NIO框架,基于TCP协议传输。
Spring Cloud则是一个基于Spring、Spring Boot的微服务治理框架,考虑了微服务治理的方方面面。它基于HTTP协议+REST接口调用远程过程,相对而言,HTTP请求会有更大的报文,占的带宽也会更多。
02??
Dubbo是RPC框架么
Dubbo定位是一款微服务开发框架,其中RPC通信是本身实现微服务之间通信的基础功能,Dubbo3将RPC通信能力进行抽象使其兼容性更加灵活,不绑定协议,除了dubbo官方基于HTTP/2的Triple协议和基于TCP的Dubbo2协议之外,Dubbo3开始支持任意第三方通信协议,如gRPC、Thrift、REST、JsonRPC、Hessian2等。
图片引用自Dubbo官网
?? 03
与Dubbo2的区别
除了上述通信协议上的扩展之外,另外的核心差异是Dubbo2采用接口级服务发现,以接口粒度组织地址数据,接口的信息全部注册到注册中心,而一个应用实例一般会存在多个接口,这样一来注册的数据量就要大很多,假设一个微服务应用定义了100个接口(Dubbo中的服务),则需要往注册中心中注册100个服务,如果这个应用被部署在了100台机器上,那这100个服务总共会产生100*100=10000个虚拟节点。
1)以下是Dubbo2的服务发现模型
图片引用自Dubbo官网
2)以下是dubbo3的发现模型
Dubbo3应用级服务发现,以应用粒度组织地址数据,同时很大程度上减轻了注册中心的压力。
图片引用自Dubbo官网
应用级服务发现的机制是同一个应用实例仅在注册中心注册一条数据,对于注册中心、订阅方的存储压力都是一个极大的释放。
CONFIGURE
安装与配置
图片引用自Dubbo官网
??01
创建Maven项目
如果你使用的是IntelliJ IDEA,你可以在\”File\” -> \”New\” -> \”Project from Existing Sources…\”中选择你的项目目录并导入它。如果你使用的是Eclipse,你可以使用\”File\” -> \”New\” -> \”Maven Project\”。
02??
添加Dubbo 3的依赖
在你的pom.xml文件中,添加以下依赖:
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
?? 03
编写服务接口和实现
创建一个简单的服务接口HelloService:
package com.example;
public interface HelloService {
String sayHello(String name);
}
然后,创建一个实现类HelloServiceImpl:
package com.example;
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String message) {
return \"Hello, \" + message;
}
}
04??
注册服务
在resources/META-INF/dubbo目录下创建一个名为com.example.HelloService的文件,内容为服务实现类的全限定名。这样,Dubbo就知道如何将请求路由到正确的服务实现。
??05
编写消费者代码
创建一个消费者类Consumer:
package com.example;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.utils.ReferenceConfigCache;
import org.apache.dubbo.rpc.service.GenericService;
public class Consumer {
public static void main(String[] args) {
ReferenceConfig<HelloService> reference = new ReferenceConfig<>();
reference.setApplication(new ApplicationConfig(\"consumer\"));
reference.setRegistry(new RegistryConfig(\"zookeeper://127.0.0.1:2181\"));
reference.setInterface(HelloService.class);
reference.setGeneric(true); // 使用泛型调用以提高性能和减少序列化开销。注意:如果服务提供者没有启用泛型,则需要设置为false。
reference.init();
HelloService helloService = reference.get(); //获取服务代理对象。
String message= helloService. sayHello(“dubbo3,from ebchinatech”);
System.out.println(message);
}
}
06??
运行
确保你的ZooKeeper服务正在运行,然后运行消费者代码。你应该能看到\”hello dubbo3,from ebchinatech\”的输出。如果一切正常,你的Dubbo 3的工程就启动完成了!
COMPARISON 与Spring Cloud的 应用场景对比 ?? 01 业务场景 Dubbo3主要适用于服务间的远程过程调用、负载均衡、服务注册与发现等场景。而Spring Cloud则更注重于提供一套完整的微服务解决方案,包括服务发现、配置管理、断路器、智能路由等功能,适用于更为复杂的微服务架构。 02?? 生态系统 Dubbo3主要依托于Java生态,具有较为完善的生态体系。而Spring Cloud作为Spring家族的一员,与Spring平台、Spring Boot、Spring Data、Spring Batch等其他Spring项目完美融合,拥有更为广泛的生态系统。 ?? 03 通信方式 Dubbo3采用基于Netty的高性能通信模型,适用于高性能、低延迟的场景。而Spring Cloud则采用HTTP/REST方式进行服务间的通信,具有更好的通用性和跨平台性。 04?? 定制性 Dubbo3的组件相对自由度较高,用户可以根据自己的需求进行定制。而Spring Cloud则更注重品牌机的稳定性,对于非原装组件的使用需要对其基础原理有足够的了解。 综上所述,Dubbo3和Spring Cloud的应用场景区别主要体现在业务场景、生态系统、通信方式和定制性等方面。在选择时,需要根据项目的实际需求和技术栈来进行评估。
—
文章作者:王涛
封面设计:Lina
原创文章,作者:EBCloud,如若转载,请注明出处:https://www.sudun.com/ask/33052.html