首页 > 其他分享 >Dubbo 3.3.0-beta 版本正式发布

Dubbo 3.3.0-beta 版本正式发布

时间:2024-01-11 17:32:01浏览次数:22  
标签:Dubbo dubbo Spring beta 3.3 版本 starter

作者:Apache Dubbo社区

近日,Apache Dubbo 发布了 3.3 分支大版本 3.3.0-beta.1,相较于 3.2 系列版本,3.3.0-beta 引入了一些重量级的功能升级,按照社区规划,3.3 也将是 Dubbo3 非常重要的一个里程碑大版本,在 3.3.0 首个正式版本之后 Dubbo3 将正式进入长期稳定维护态,即标志着 Dubbo3 作为面向云原生时代的下一代微服务框架将具备规划的所有核心功能。

让我们先快速看一下 3.3.0-beta.1 版本为我们带来了哪些核心能力升级吧:

  • 全新升级的 Triple 协议, Triple 协议可同时运行在 HTTP1/2 之上,与 gRPC 保持 100% 兼容的同时,支持 cURL 和浏览器直接访问。
  • 新发布一系列 Spring Boot Starter 组件,包括  Zookeeper, Nacos, Sentinel 等,大幅降低开发过程中的依赖管理负担。
  • Rest 风格的编程注解支持(涵盖 Spring MVC、JAX-RS),借助 Dubbo 的多协议发布机制,可以轻松的将 RPC 服务发布为标准的 HTTP 端点,简化前端接入成本。
  • Dubbo AOT(GraalVM Native Image)正式发布,特定场景下启动速度提升 10 倍,内存等资源消耗降低 4 倍。
  • 升级 JDK 21 支持,增加 Project Loom 协程支持。
  • 可观测性进一步提升,进一步提升 metrics 统计指标,简化 tracing 等使用。

接下来,我们将对其中的一些重点功能进行更深入的讲解。

Spring Boot Starters

3.3.0-beta.1 版本发布的 Starter 组件,可以大幅简化 Spring Boot 用户的应用开发,以 Zookeeper 注册中心为例,新版本的开发只需要增加以下一个依赖即可。可以通过 https://start.dubbo.apache.org

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-zookeeper-spring-boot-starter</artifactId>
</dependency>

同样的,还有 dubbo-curator5-zookeeper-spring-boot-starter、 dubbo-nacos-spring-boot-starter、 dubbo-sentinel-spring-boot-starter、 dubbo-seata-spring-boot-starter 、 dubbo-observability-spring-boot-starter、 dubbo-tracing-otel-zipkin-spring-boot-starter 等。**

Dubbo AOT 静态化(GraalVM Native Image)

Dubbo AOT 是 Dubbo 3.3.0-beta 版本发布的静态化方案支持,它基于 GraalVM Native Image 实现,旨在大幅提升 Dubbo 应用的启动与运行速度。可以通过 https://start.dubbo.apache.org

Native 的可视性文件比 Jar 包方式的启动耗时降低了 12 倍+,在客户端应用,它的启动耗时降低了 11 倍+。所以在刚刚提到的 Serverless 场景上,它能提供一个非常好的启动速度。在扩容的时候能够达到秒级,甚至达到毫秒级。

Dubbo 3.3.0-beta 版本正式发布_apache

通过静态化执行文件执行后,比都为 Jar 包的情况,第一次调用的耗时降低 6 倍。这第一次调用代表的是预热的时长,以及第一次需要解析的类,包括资源的情况等等。这让我们在 Serverless 场景下能够瞬间达到性能峰值。

Dubbo 3.3.0-beta 版本正式发布_apache_02

在 Dubbo 应用的基础上,它的内存损耗也降低大概 3.5 倍。Native 静态化执行文件可以做到 60M 的内存占比,在客户端它的内存损耗也大概降低了 4 倍。

Dubbo 3.3.0-beta 版本正式发布_apache_03

Triple 协议升级

Triple 协议是 Dubbo3 设计的基于 HTTP 的 RPC 通信协议规范,它完全兼容 gRPC 协议,支持 Request-Response、Streaming 流式等通信模型,可同时运行在 HTTP/1 和 HTTP/2 之上。

你可以使用 cURL 等标准 HTTP 工具直接访问发布的 Triple 服务,大幅降低测试与前端接入成本。

curl \
 --header 'Content-Type: application/json' \
 --data '{"sentence": "Hello World"}' \
 http://localhost:8080/apache.dubbo.demo.example.v1.ExampleService/Say

Dubbo 框架提供了 Triple 协议的多种语言实现,它们可以帮助你构建浏览器、gRPC 兼容的 HTTP API 接口。Dubbo 框架同时支持 Protobuf-first 和 Interface-first 编程模式,即不绑定 IDL 的服务定义与开发模式,比如在 Dubbo Java 中,你可以选择使用 Java Interface 和 Pojo 类定义 Dubbo 服务,并将其发布为基于 Triple 协议通信的微服务。

以下是 Triple 协议的多语言实现布局,目前已经支持了浏览器端的 Dubbo-web,后端的 Java、Go、Node.js、Rust 等,未来会提供 Mobile 端以及更多后端语言实现。

Dubbo 3.3.0-beta 版本正式发布_apache_04

Rest 协议升级

基于 Dubbo 的多协议发布能力,rest 风格的 http 服务发布可以有非常多的应用场景,它可以让你在增加少量注解代码的情况下(当前支持 Spring MVC、JAX-RS 两套注解模式),将之前的 RPC 服务发布为标准的 rest 风格 HTTP 服务。这在很多场景将会非常有用,比如以下是一个 Dubbo 与 Spring Cloud 体系互通的用例。

我们要实现以下互通目标,让左边的 Spring 应用能够调用到右侧的 Dubbo 应用。我们可以利用 Dubbo 的多协议发布机制,为一些服务配置多协议(tcp & http)发布,让这个 Dubbo 应用同时服务 Dubbo 微服务体系和 Spring Cloud 微服务体系。

Dubbo 3.3.0-beta 版本正式发布_spring_05

为了实现这个效果,我们只需要在配置中增加多协议配置即可:

dubbo:
  protocols:
    - id: rest
      name: rest
      port: 8090
    - id: dubbo
      name: dubbo
      port: 20880

同时,@DubboService 服务注解中也配置为多协议发布。

@DubboService(protocol="rest,dubbo")
public class UserServiceImpl implements UserService {}

这样,我们就成功的将 UserService 服务以 dubbo 和 rest 两种协议发布了出去(多端口多协议的方式),dubbo 协议为 Dubbo 体系服务,rest 协议为 Spring Cloud 体系服务。

为了发布标准的 rest 风格服务,记得在接口上增加注解,在这里我们使用 Spring MVC 注解。

@RestController
@RequestMapping("/users")
public interface UserService {
    @GetMapping(value = "/list")
    List<User> getUsers();
}

可观测性(Metrics & Tracing)

首先,是大幅提升了 Metrics、Tracing 的易用性,对于 Spring Boot 用户而言,只需要添加一个依赖即可。

开启 Metrics:

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-observability-spring-boot-starter</artifactId>
</dependency>

开启 Tracing:

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-tracing-otel-zipkin-spring-boot-starter</artifactId>
</dependency>

其次,在监控指标的丰富度上进一步提升。

Dubbo 3.3.0-beta 版本正式发布_HTTP_06

JDK 21 与协程

3.3.0-beta 版本可支持平滑升级到 JDK 21 版本,同时,增加了 Project Loom 协程支持,只需要配置 setThreadPool(virtual) 即可实现协程模型开启。

具体实现上,是我们在新版本增加了以下 Threadpool SPI 实现:

virtual=org.apache.dubbo.common.threadpool.support.loom.VirtualThreadPool
/**
 * Creates a thread pool that use virtual thread
 *
 * @see Executors#newVirtualThreadPerTaskExecutor()
 */
public class VirtualThreadPool implements ThreadPool {
    @Override
    public Executor getExecutor(URL url) {
        String name = url.getParameter(THREAD_NAME_KEY, (String) url.getAttribute(THREAD_NAME_KEY, DEFAULT_THREAD_NAME));
        return Executors.newThreadPerTaskExecutor(
            Thread.ofVirtual()
                .name(name, 1)
                .factory());
    }
}

Roadmap

对于 Dubbo3 而言,当前社区维护有 3.1、3.2、3.3 三个大的版本,其中 3.2 是当前推荐的稳定生产版本,3.3 正处于 beta 阶段,在接下来几个月将取代 3.2 成为最新稳定版本。

截止 3.3.0-beta.1 版本,整个 Dubbo3 规划的核心功能均已开发完成。从这个版本开始,Dubbo3 将进入长期稳定维护阶段,这意味着我们将不会再为任何的 Dubbo3 新版本引入新的功能规划,社区将专注在已有功能的迭代与稳定性保证上。基于这样的基调,我们制定未来半年的社区 Roadmap:https://github.com/apache/dubbo/issues/13065

关于面向未来的新功能,我们将在 Dubbo4 中持续探索,欢迎持续关注社区进展。

标签:Dubbo,dubbo,Spring,beta,3.3,版本,starter
From: https://blog.51cto.com/u_13778063/9201612

相关文章

  • 中间件 ZK分布式专题与Dubbo微服务入门 4-8 权限acl详解,acl的构成-scheme与id
    0课程地址https://coding.imooc.com/lesson/201.html#mid=12704 1重点关注1.1权限的构成权限字符串缩写crdwaCREATE:创建子节点READ:获取节点/子节点WRITE:设置节点数据 DELETE:删除子节点ADMIN:设置权限  2课程内容  ......
  • 中间件 ZK分布式专题与Dubbo微服务入门 4-9 acl的构成-permissions
    0课程地址https://coding.imooc.com/lesson/201.html#mid=12705 1重点关注1.1权限的构成权限字符串缩写crdwaCREATE:创建子节点READ:获取节点/子节点WRITE:设置节点数据 DELETE:删除子节点ADMIN:设置权限  2课程内容  ......
  • 文心一言 VS 讯飞星火 VS chatgpt (175)-- 算法导论13.3 4题
    四、用go语言,Teach教授担心RB-INSERT-FIXUP可能将T.nil.color设为RED,这时,当z为根时第1行的测试就不会让循环终止。通过讨论RB-INSERT-FIXUP永远不会将T.nil.color设置为RED,来说明这位教授的担心是没有必要的。文心一言:首先,我们需要明确RB-INSERT-FIXUP的功能和实现方式......
  • H6225L 降压恒压芯片 输入8V-60V降压12V 60V降压5V 60V降压3.3V/1.3A
    H6225L是一种内置85V耐压MOS,支持输入高达72V的高压降压开关控制器,可以向负载提供1.3A的连续电流。H6225L支持输出恒定电压,可以通过调节VFB采样电阻来设置输出电压,同时支持最大电流限制,可以通过修改CS采样电阻来设置输出电流最大值。典型开关频率为130KHz,设计有最小开关频率5KHz,可以......
  • OpenHarmony 4.1 Beta1发布【坚果派-坚果】
    OpenHarmony4.1Beta1发布作者:坚果团队:坚果派公众号:“大前端之旅”团队介绍:坚果派由坚果创建,团队拥有8个华为HDE,3个HSD,以及若干其他领域的三十余位万粉博主运营。本人为华为HDE、中国计算机学会CCF专业会员、OpenHarmony布道师、开发者联盟优秀讲师、2023年开源之夏导师、2023年......
  • 文心一言 VS 讯飞星火 VS chatgpt (174)-- 算法导论13.3 3题
    三、用go语言,假设图13-5和图13-6中子α、β、γ、δ和ε的黑高都是k。给每张图中的每个结点标上黑高,以验证图中所示的转换能保持性质5。文心一言:在Go语言中,你可以通过以下步骤来为图13-5和图13-6中的每个节点分配黑高,以验证性质5。首先,我们需要定义一个结构体来表示图中的节点,然......
  • Hadoop(3.3.4)-HDFS操作
    ApacheHadoop3.3.4–Overview01.appendToFilehadoopfs-appendToFilelocalfile/user/hadoop/hadoopfilehadoopfs-appendToFilelocalfile1localfile2/user/hadoop/hadoopfilehadoopfs-appendToFilelocalfilehdfs://nn.example.com/hadoop/hadoopfilehadoop......
  • 文心一言 VS 讯飞星火 VS chatgpt (173)-- 算法导论13.3 2题
    二、用go语言,将关键字41、38、31、12、19、8连续地插入一棵初始为空的红黑树之后,试画出该结果树。文心一言:首先,我们需要了解红黑树的性质。红黑树是一种自平衡二叉查找树,其中每个节点要么是红色,要么是黑色,且满足以下性质:每个节点要么是红色,要么是黑色。根节点是黑色。所有叶子节......
  • 理解 Apache ShardingSphere 的 SPI,以及为何它比 Dubbo 更简单
    为什么学习ShardingSphere的SPI?你可能已经熟悉Java和Dubbo的SPI(ServiceProviderInterface)机制,所以你可能会想:“为什么要学习ShardingSphere的SPI机制呢?”原因非常简单:ShardingSphere的源代码更简单、更容易适应。ShardingSphere的SPI机制执行非常顺畅,日常操作所......
  • Goland 2023.3.2最新安装激活教程,手把手带你激活Goland,永久有效!
    大家好,欢迎来到程序视点!我是小二哥。前言作为一个go语言程序员,觉得自己有义务为go新手开一条更简单便捷的上手之路。纵使网上教程很多,但总不尽人意。go的入门门槛还是非常低的,无论是安装还是使用。俗话说“工欲善其事必先利其器”,作为Go语言编程开发者,最锋利的编程工具非Gola......