当前位置: 首页 > 后端技术 > Java

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

时间:2023-04-01 19:56:35 Java

ApacheDubbo多语言系统再添新兵:第一个Rust语言版本正式发布Mesh系统提供丰富的服务治理能力。本文主要介绍了DubboRust项目的基本情况,通过实例快速体验Rust第一个正式版的特性,并给出了DubboRust社区的近期计划,适合关注的开发者和业务用户关于或学习Rust语言。完整的例子可以直接访问项目DubboRust快速入门官网或者搜索关注官方微信号公众号:ApacheDubbo1DubboRust简介Dubbo是Apache基金会最活跃的明星项目之一,也是国内最流行的开源微服务框架。它在易用性、高性能通信和服务治理方面具有很大优势。通过Dubbo3、DubboMesh等提供云原生友好的开发部署模型,同时Dubbo的多语言体系也发展迅速。长期以来,它提供了Java和Golang两种语言实现,对Rust、Node、Python、C++等语言实现的支持也正式在社区上线。Dubbo官网https://dubbo.apache.org/DubboJavahttps://github.com/apache/dubbo/DubboGolanghttps://github.com/apache/dub...DubboRusthttps://github.com/apache/dub...DubboRust旨在对齐Dubbo3的所有核心功能设计,包括基于HTTP/2的高性能通信、用户友好的微服务开发和编程模式,通过接入DubboMesh提供丰富的服务治理能力等,相比于其他语言实现,DubboRust会很好地利用Rust语言的极致性能、安全性和指令级控制能力。对于微服务框架,主流编程语言都有相应的实现,而DubboRust将填补Rust领域的空白:Golang:已经在微服务框架领域占据了非常重要的地位;dubbo-go已经出现在开源社区,gRPC、go-micro、go-zero等微服务框架Java:国内使用人数最多的编程语言,SpringCloud等优秀的微服务框架Dubbo已经非常流行C/C++:brpc、grpc等微服务框架Rust:目前还没有完善的微服务框架依托于Dubbo庞大的用户群和Dubbo体系下Mesh服务治理的整体规划。DubboRust可以方便的集成到现有的云原生研发体系中,而不会增加用户的研发负担。下图是社区介绍的DubboMesh架构设计。在上面的架构下,整体分为控制平面和数据平面两部分。其中,控制平面负责管理流量管理、地址发现、安全认证、可观察性等服务管理相关的配置信息管控工作,包括K8S等底层技术设施的对接;DubboRust作为数据面组件,负责接收来自控制面的配置;将配置应用于服务;并为服务提供基本的RPC通信能力。在架构设计方面,DubboRust将围绕Dubbo的核心设计和Rust语言的特点进行设计,将Dubbo框架的核心设计输出为文档,从而提高Dubbo框架的易用性。因此,DubboRust具有以下特点:易用性、高性能和可扩展性,同时为云原生提供了丰富的服务治理能力。2快速体验DubboRust2.1第一版的核心能力。DubboRust的第一个正式版本是v0.2.0。v0.2.0提供的能力包括基于HTTP/2Triple协议的基础通信能力,基于IDL的RPC定义支持,Protobuf生成代码,支持Serde序列化request-response,request/responsestreaming,bi-streaming通信模型支持设计简洁可扩展的架构,支持Listener、Connector、Filter、Protocol和Invoker组件的扩展DubboRustv0.2.0的核心组件和通信流程基本完成如下图所示。下个版本将重点关注核心组件的扩展和服务治理相关组件的设计与实现。2.2快速入门完整示例请参考【Dubbo官网】->【RustSDK文档】。https://dubbo.apache.org/zh/docs3-v2/rust-sdk/quick-start/使用DubboRust服务开发的基本步骤在使用IDL定义服务的项目中添加DubboRust依赖CompileIDL基于IDL生成compilationstubwriteServer&Clientlogicrunningproject使用IDL定义Dubb服务//./proto/greeter.protosyntax="proto3";optionjava_multiple_files=true;packageorg.apache.dubbo.sample.tri;//请求消息containingtheuser'sname.messageGreeterRequest{stringname=1;}//包含greetingsmessage的响应消息GreeterReply{stringmessage=1;}serviceGreeter{//unaryrpcgreet(GreeterRequest)returns(GreeterReply);}添加DubboRust依赖#。/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"编译IDL,根据生成的stub编写逻辑编写DubboServer#[tokio::main]asyncfnmain(){register_server(GreeterServerImpl{name:"greeter".to_string(),});//Dubbo::new().start().await;Dubbo::new().with_config({letr=RootConfig::new();matchr.load(){Ok(config)=>config,Err(_err)=>panic!("err:{:?}",_err),//响应被丢弃}}).start().await;}structGreeterServerImpl{name:String,}implGreeterforGreeterServerImpl{asyncfngreet(&self,request:Request,)->Result,dubbo::status::Status>{println!("GreeterServer::greet{:?}",request.metadata);Ok(Response::new(GreeterReply{message:"hello,dubbo-rust".to_string(),}))}}编写DubboClient#[tokio::main]asyncfnmain(){letmutcli=GreeterClient::new().with_uri("http://127.0.0.1:8888".to_string());println!("#一元调用");让resp=cli.greet(Request::new(GreeterRequest{name:"m来自客户端的消息".to_string(),})).await;letresp=matchresp{Ok(resp)=>resp,Err(err)=>returnprintln!("{:?}",err),};let(_parts,body)=resp.into_parts();println!("Response:{:?}",body);}这样一个简单的DubboRust实例就开发好了,大家可以去Dubbo官网获取查看完整文档3Roadmap和未来规划DubboRustRoadmap规划分为三个阶段:一是提供作为RPC框架的基础能力,本阶段重点关注基于HTTP/2的RPC通信、基于IDL的RPC定义等必要的RPC内核组件等,其实就是在完善DubboRust作为微服务框架的高级功能,这个阶段包括微服务定义、配置、功能设计等,比如服务超时、异步调用、上下文传递等,详见,请参考DubboJava的高级特性,第三阶段的重点是引入丰富的服务治理支持,比如流量治理、限流降级、可观察性等,这个目标将主要通过集成到Dubbo中来实现Mesh系统,即适配DubboMesh控制面。其中,第一阶段的工作已经基本完成,大家可以通过上面的QuickStart进行体验。二、三期工作已在社区全面开展。欢迎有兴趣的社区开发者参与。具体联系方式见下文。下图主要从第一阶段(RPC框架)和第二阶段(微服务开发框架)的角度对目前DubboRust功能完备性进行评估和任务拆解。上图是DubboRust核心设计的一个重要组成部分。保证DubboRust在微服务框架中具备完备的RPC通信能力和服务治理能力。Protocol、Filter、Listener、Connector等组件是RPC通信的核心能力。服务注册发现、负载均衡、Cluster、Metadata为后续的服务治理能力做铺垫。除了上图中列出的模块外,还有一些非功能需求需要支持,例如:Dubbo多语言框架之间的互通测试性能验证和基准机制整体架构的持续优化,例如核心配置简化和相应的文档改进4参与DubboRust社区与Rust语言一样,DubboRust是另一方面,依托于ApacheDubbo社区背后庞大的开发者群体和企业用户,DubboRust拥有非常深厚的用户基础和发展潜力。DubboRust的快速发展期待着社区贡献者的参与。DubboRust社区可以获得和见证DubboRust开源项目的建设和发展。通过在大型项目中的实际使用来学习Rust语言,加深对Rust语言的理解。被Dubbo社区提名为ApacheDubboCommitterPMC,增加个人曝光度,提高个人技术影响力和与阿里巴巴等企业专家面对面交流的机会,快速提升技术视野。有多种方式可以参与DubboRust社区。搜索加入钉钉群,参与双周社区聚会钉钉群号44694199到GitHub提交issue或贡献代码https://github.com/apache/dub...搜索并关注官方微信公众号:ApacheDubbo,了解行业最新动态,掌握大厂Dubbo技能面试要领