链接: https://pan.baidu.com/s/1d6YO… 提取码: iamh
作者-\/ 307570512
Dubbo 3介绍
Apache Dubbo 是一款高性能、轻量级的开源服务框架,Apache Dubbo 3.0.0 正式公布 – 全面拥抱云原生
自从 Apache Dubbo 在 2011 年开源以来,在一众大规模互联网、IT 公司的实际中积攒了大量教训后,Dubbo 凭借对 Java 用户敌对、功能丰富、治理能力强等长处在过来获得了很大的胜利,成为国内外热门支流的 RPC 框架之一。
但随着云原生时代的到来,以 Apache Dubbo、Spring Cloud 等为代表的 Java 微服务治理体系面临了许多新的需要,包含冀望利用能够更快的启动、利用通信的协定穿透性能够更高、可能对多语言的反对更加敌对等。例如 Spring 也在往年推出了其基于 GraalVM 的 Spring Native Beta 解决方案,领有毫秒级启动的能力、更高的解决性能等优化晋升。
这样的背景对下一代 Apache Dubbo 提出了两大要求:一是要保留已有的开箱即用和落地实际背景下积攒的长处,这也是泛滥开发者所冀望的;二是尽可能地遵循云原生思维,能更好的复用底层云原生基础设施并且更贴合云原生的微服务架构。
Apache Dubbo3 相比 2.7 版本进行了全面的降级,以下是新增的一些外围个性:
全新服务发现模型
相比于 2.x 版本中的基于接口粒度的服务发现机制,3.x 引入了全新的基于利用粒度的服务发现机制, 新模型带来两方面的微小劣势:
进一步晋升了 Dubbo3 在大规模集群实际中的性能与稳定性。新模型可大幅提高系统资源利用率,升高 Dubbo 地址的单机内存耗费(50%),升高注册核心集群的存储与推送压力(90%), Dubbo 可反对集群规模步入百万实例档次。
买通与其余异构微服务体系的地址互发现阻碍。新模型使得 Dubbo3 能实现与异构微服务体系如Spring Cloud、Kubernetes Service、gRPC 等,在地址发现层面的互通, 为连通 Dubbo 与其余微服务体系提供可行计划。
在 Dubbo3 后期版本将会同时提供对两套地址发现模型的反对,以最大水平保障业务降级的兼容性。
下一代 RPC 通信协议
定义了全新的 RPC 通信协议 – Triple,一句话概括 Triple:它是基于 HTTP/2 上构建的 RPC 协定,齐全兼容 gRPC,并在此基础上扩大出了更丰盛的语义。 应用 Triple 协定,用户将取得以下能力
更容易到适配网关、Mesh架构,Triple 协定让 Dubbo 更不便的与各种网关、Sidecar 组件配合工作。
多语言敌对,举荐配合 Protobuf 应用 Triple 协定,应用 IDL 定义服务,应用 Protobuf 编码业务数据。
流式通信反对。Triple 协定反对 Request Stream、Response Stream、Bi-direction Stream
云原生
Dubbo3 构建的业务利用可间接部署在 VM、Container、Kubernetes 等平台,Dubbo3 很好的解决了 Dubbo 服务与调度平台之间的生命周期对齐,Dubbo 服务发现地址 与容器平台绑定的问题。
在服务发现层面,Dubbo3 反对与 Kubernetes Native Service 的交融,目前限于 Headless Service。
Dubbo3 布局了两种状态的 Service Mesh 计划,在不同的业务场景、不同的迁徙阶段、不同的基础设施保障状况下,Dubbo 都会有 Mesh 计划可供选择, 而这进一步的都能够通过对立的管制面进行治理。
经典的基于 Sidecar 的 Service Mesh
无 Sidecar 的 Proxyless Mesh
用户在 Dubbo2 中熟知的路由规定,在 3.x 中将被一套对立的流量治理规定取代,这套对立流量规定将笼罩将来 Dubbo3 的 Service Mesh、SDK 等多种部署状态, 实现对整套微服务体系的治理。
扩大点拆散
Dubbo3 的 maven 也产生了一些变动,org.apache.dubbo:dubbo:3.0.0 将不再是蕴含所有资源的 all-in-one 包,一些可选的依赖曾经作为独立组件独自公布, 因而如果用户应用了不在 dubbo 外围依赖包中的独立组件,如 registry-etcd、rpc-hessian 等,须要为这些组件在 pom.xml 中独自减少依赖包。
Zookeeper 扩大实现仍在外围依赖包中,依赖放弃不变
<properties>
<dubbo.version>3.0.0</dubbo.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
</dependencies>
Redis 扩大实现曾经不在外围依赖包中,如启用了 Redis 相干性能,需独自减少依赖包
<properties>
<dubbo.version>3.0.0</dubbo.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-redis</artifactId>
<version>${dubbo.version}</version>
</dependency>
</dependencies>
服务柔性
Dubbo3.0 的柔性加强以面向失败设计为理念,提供包含精准容量评估、自适应限流、自适应负载平衡的反对,自底向上的分步构建大规模牢靠利用。 从繁多服务的视角看,服务是压不垮的,稳固的。从分布式视角看,简单的拓扑不会带来性能的降落,分布式负载平衡可能以最优的形式动态分配流量,保障异构零碎可能依据运行时的精确服务容量正当调配申请,从而达到性能最优
全面的性能晋升
比照 2.x 版本,Dubbo3 版本
服务发现资源利用率显著晋升。
比照接口级服务发现,单机常驻内存降落 50%,地址变更期 GC 耗费降落一个数量级 (百次 -> 十次)
比照利用级服务发现,单机常驻内存降落 75%,GC 次数趋零
Dubbo 协定性能持平,Triple 协定在网关、Stream吞吐量方面更具劣势。
Dubbo协定 (3.0 vs 2.x),3.0 实现较 2.x 总体 qps rt 持平,略有晋升
Triple协定 vs Dubbo协定,直连调用场景 Triple 性能并无劣势,其劣势在网关、Stream调用场景。
Dubbo 3 深度分析 – 透过源码意识你 – 深入浅出Apache Dubbo 3源码解析
服务提供者
创立一个空工程,并创立maven工程(打包形式为war)dubbodemo_provider模块,在pom.xml文件中导入如下坐标
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- dubbo相干 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.7</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.12.1.GA</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
</dependencies>
第二步、编写spring与dubbo整合的服务提供者spring配置文件applicationContext-dubboprovider.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--给以后服务提供者命名-->
<dubbo:application name="dubbodemo_provider"/>
<!--指定zookeeper注册核心的address和port,如果应用的是redis则address应用redis的address-->
<dubbo:registry address="zookeeper://127.0.0.1:2181" ></dubbo:registry>
<!--协定必须应用dubbo,端口号是提供一个可供消费者应用的端口-->
<dubbo:protocol name="dubbo" port="20881"/>
<!--开启注解扫描,使dubbo的注解失效-->
<dubbo:annotation package="com.alibaba.provider"/>
</beans>
第三步、在web.xml中配置我的项目加载监听器,并指定spring配置文件的门路
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<!-- 监听器监听其余的spring配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
第四步、编写service的接口和实现类
Service接口代码
public interface HelloService {
public String sayHello(String name);
}
Service实现类代码
import com.alibaba.dubbo.config.annotation.Service;
import com.alibaba.service.provider.HelloService;
//此注解应用的阿里巴巴的dubbo注解
@Service
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String name) {
return "hello@@"+name;
}
}
发表回复