乐趣区

关于后端:Apache-Dubbo-多语言体系再添新员首个-Rust-语言版本正式发布

Dubbo Rust 定位为 Dubbo 多语言体系的重要实现,提供高性能、易用、可扩大的 RPC 框架,同时通过接入 Dubbo Mesh 体系提供丰盛的服务治理能力。本文次要为大家介绍 Dubbo Rust 我的项目根本状况,通过一个示例疾速体验 Rust 首个正式版本个性,并给出了 Dubbo Rust 社区的近期布局,适宜于关注或正在学习 Rust 语言的开发者与企业用户浏览。

残缺示例能够间接拜访我的项目官网 Dubbo Rust Quick Start 或搜寻关注官网微信公众号:Apache Dubbo

1 Dubbo Rust 简介

Dubbo 作为 Apache 基金会最沉闷的明星我的项目之一,同时也是国内最受欢迎的开源微服务框架,在易用性、高性能通信、服务治理等方面有着十分大的劣势,通过 Dubbo3、Dubbo Mesh 等提供了云原生敌对的开发与部署模式。与此同时,Dubbo 的多语言体系也失去了疾速倒退,长期以来提供的有 Java、Golang 两种语言实现,Rust、Node、Python、C++ 等语言实现的反对也已在社区正式启动。

  • Dubbo 官网 https://dubbo.apache.org/
  • Dubbo Java https://github.com/apache/dubbo/
  • Dubbo Golang https://github.com/apache/dub…
  • Dubbo Rust https://github.com/apache/dub…

Dubbo Rust 指标是对齐 Dubbo3 的所有外围功能设计,包含基于 HTTP/2 的高性能通信、用户敌对的微服务开发编程模式、通过接入 DubboMesh 提供丰盛的服务治理能力等,相比于其余语言实现,Dubbo Rust 将很好的利用 Rust 语言极致性能、平安和指令级掌控能力的特点。
对于微服务框架,支流的编程语言都有对应的实现,而 Dubbo Rust 将很好的填补 Rust 畛域的空白:

  • Golang:在微服务框架畛域曾经占据着很重要的位置;开源社区呈现了 dubbo-go、gRPC、go-micro、go-zero 等多个微服务框架
  • Java:国内用户量最大的编程语言,Spring Cloud、Dubbo 等优良的微服务框架曾经十分风行
  • C/C++:brpc、grpc 等微服务框架
  • Rust:目前没有很欠缺的微服务框架

依靠 Dubbo 宏大的用户群,以及 Dubbo 体系下的 Mesh 服务治理整体计划布局。Dubbo Rust 能够轻松地融入到现有的云原生研发体系中,不会减少使用者的研发累赘。下图是社区推出的 Dubbo Mesh 架构设计。

在上述架构下,整体分为管制面和数据面两个局部,其中,

  • 管制面负责管理流量治理、地址发现、平安认证、可观测性等服务治理相干的配置信管控工作,包含与 K8S 等底层技术设施的对接;
  • Dubbo Rust 作为数据面组件,负责接管来自管制面的配置;将配置利用到服务中;同时为服务提供根底的 RPC 通信能力。

在架构设计方面,Dubbo Rust 将围绕 Dubbo 外围设计以及 Rust 语言的个性进行设计,并将 Dubbo 框架的外围设计输入为文档,从而晋升 Dubbo 框架的易用性。因而,Dubbo Rust 具备如下特点:易用性、高性能以及可扩大,同时面向云原生提供丰盛的服务治理能力。

2 疾速体验 Dubbo Rust

2.1 首个版本外围能力

Dubbo Rust 首个正式版本为 v0.2.0,v0.2.0 提供的能力包含

  • 基于 HTTP/2 的 Triple 协定的根底通信能力
  • 基于 IDL 的 RPC 定义反对,Protobuf 来生成代码,同时反对 Serde 序列化
  • request-response、request/response streaming、bi-streaming 通信模型反对
  • 设计了简洁的、可扩大的架构,反对对 Listener、Connector、Filter、Protocol 以及 Invoker 组件进行扩大

Dubbo Rust v0.2.0 的外围组件及通信流程如下图所示

外围架构曾经根本实现,接下来的版本将重点关注外围组件的扩大以及服务治理相干组件的设计实现。

2.2 Quick Start

残缺示例可查看【Dubbo 官网】->【Rust SDK 文档】。
https://dubbo.apache.org/zh/docs3-v2/rust-sdk/quick-start/

应用 Dubbo Rust 服务开发的根本步骤为

  1. 应用 IDL 定义服务
  2. 增加 Dubbo Rust 依赖到我的项目
  3. 编译 IDL
  4. 基于 IDL 编译生成的 stub 编写 Server & Client 逻辑
  5. 运行我的项目
  6. 应用 IDL 定义 Dubb 服务

    // ./proto/greeter.proto
    syntax = "proto3";
    
    option java_multiple_files = true;
    
    package org.apache.dubbo.sample.tri;
    
    
    // The request message containing the user's name.
    message GreeterRequest {string name = 1;}
    
    // The response message containing the greetings
    message GreeterReply {string message = 1;}
    
    service Greeter{
    // unary
    rpc greet(GreeterRequest) returns (GreeterReply);
    }
  7. 减少 Dubbo Rust 依赖

    # ./Cargo.toml
    [package]
    name = "example-greeter"
    version = "0.1.0"
    edition = "2021"
    
    [dependencies]
    dubbo = "0.1.0"
    dubbo-config = "0.1.0"
    
    [build-dependencies]
    dubbo-build = "0.1.0"
  8. 编译 IDL 并依据生成的 stub 编写逻辑
    编写 Dubbo Server

    #[tokio::main]
    async fn main() {
     register_server(GreeterServerImpl {name: "greeter".to_string(),
     });
    
     // Dubbo::new().start().await;
     Dubbo::new()
         .with_config({let r = RootConfig::new();
             match r.load() {Ok(config) => config,
                 Err(_err) => panic!("err: {:?}", _err), // response was droped
             }
         })
         .start()
         .await;
    }
    
    struct GreeterServerImpl {name: String,}
    
    impl Greeter for GreeterServerImpl {
     async fn greet(
         &self,
         request: Request<GreeterRequest>,
     ) -> Result<Response<GreeterReply>, dubbo::status::Status> {println!("GreeterServer::greet {:?}", request.metadata);
    
         Ok(Response::new(GreeterReply {message: "hello, dubbo-rust".to_string(),
         }))
     }
    }

编写 Dubbo Client

#[tokio::main]
async fn main() {let mut cli = GreeterClient::new().with_uri("http://127.0.0.1:8888".to_string());

    println!("# unary call");
    let resp = cli
        .greet(Request::new(GreeterRequest {name: "message from client".to_string(),
        }))
        .await;
    let resp = match resp {Ok(resp) => resp,
        Err(err) => return println!("{:?}", err),
    };
    let (_parts, body) = resp.into_parts();
    println!("Response: {:?}", body);
}

这样,一个简略的 Dubbo Rust 示例就开发实现了,能够到 Dubbo 官网查看残缺文档。

3 Roadmap 与将来布局

Dubbo Rust Roadmap 布局分为三个阶段:

  • 首先,提供作为 RPC 框架的根底能力,此阶段重点实现的包含基于 HTTP/2 的 RPC 通信、基于 IDL 的 RPC 定义、其余必要的 RPC 内核组件等
  • 其实,是欠缺 Dubbo Rust 作为微服务框架的高级性能,此阶段包含微服务定义、配置、功能设计等,如服务超时、异步调用、上下文传递等,具体可参见 Dubbo Java 的高级个性。
  • 第三阶段重点是引入丰盛的服务治理能力反对,如流量治理、限流降级、可观测性等,这一指标将次要通过融入 Dubbo Mesh 体系,即适配 Dubbo Mesh 管制面实现。

其中,第一阶段的工作曾经根本实现,大家可通过上文的 Quick Start 进行深刻体验,第二、第三阶段的工作曾经在社区全面发展,欢送感兴趣的社区开发者参加进来,具体联系方式参见下文。

下图是偏重从第一阶段(RPC 框架)、第二阶段(微服务开发框架)的视角对以后 Dubbo Rust 性能齐备性的评估和工作拆解。

上图中都是 Dubbo Rust 外围设计的重要组件,保障 Dubbo Rust 具备微服务框架中残缺的 RPC 通信能力以及服务治理能力。

  • Protocol、Filter、Listener、Connector 等组件都是 RPC 通信外围能力
  • 服务注册发现、负载平衡、Cluster、Metadata 为后续服务治理能力做铺垫

除了上图列出的模块以外,还有一些非性能需要也须要反对,例如:

  • Dubbo 多语言框架之间互相通信测试
  • 性能验证与继续的 benchmark 机制
  • 整体架构的继续优化,如外围配置简化以及相应的文档欠缺
  • 4 参加 Dubbo Rust 社区

和 Rust 语言一样,Dubbo Rust 是一个十分有生机、十分前沿的社区,另一方面,依赖 Apache Dubbo 社区背地宏大的开发者群体和企业用户,Dubbo Rust 有着十分深厚的用户根底和发展潜力。Dubbo Rust 的疾速倒退期待社区贡献者的退出
参加 Dubbo Rust 社区能够播种

  • 见证 Dubbo Rust 开源我的项目的建设以及倒退
  • 在大型项目中通过理论应用学习 Rust 语言,加深对 Rust 语言的了解
  • 取得提名为 Apache Dubbo CommitterPMC
  • 借助 Dubbo 社区进步集体曝光度,进步集体技术影响力
  • 与阿里巴巴等企业专家的面对面交换机会,疾速进步技术视线

参加 Dubbo Rust 社区的形式有如下几种

  • 搜寻并退出钉钉群并参加社区双周会,钉钉群号 44694199
  • 到 GitHub 提 Issue 或奉献代码 https://github.com/apache/dub…

搜寻关注官网微信公众号:Apache Dubbo,理解更多业界最新动静,把握大厂面试必备 Dubbo 技能

退出移动版