Dubbo Rust 定位為 Dubbo 多語言體系的重要實現,提供高效能、易用、可延伸的 RPC 框架,同時通過接入 Dubbo Mesh 體系提供豐富的服務治理能力。本文主要為大家介紹 Dubbo Rust 專案基本情況,通過一個範例快速體驗 Rust 首個正式版本特性,並給出了 Dubbo Rust 社群的近期規劃,適合於關注或正在學習 Rust 語言的開發者與企業使用者閱讀。
完整範例可以直接存取專案官網 Dubbo Rust Quick Start 或搜尋關注官方微信公眾號:Apache Dubbo
Dubbo 作為 Apache 基金會最活躍的明星專案之一,同時也是國內最受歡迎的開源微服務架構,在易用性、高效能通訊、服務治理等方面有著非常大的優勢,通過 Dubbo3、Dubbo Mesh 等提供了雲原生友好的開發與部署模式。與此同時,Dubbo 的多語言體系也得到了快速發展,長期以來提供的有 Java、Golang 兩種語言實現,Rust、Node、Python、C++ 等語言實現的支援也已在社群正式啟動。
Dubbo Rust 目標是對齊 Dubbo3 的所有核心功能設計,包括基於 HTTP/2 的高效能通訊、使用者友好的微服務開發程式設計模式、通過接入DubboMesh提供豐富的服務治理能力等,相比於其他語言實現,Dubbo Rust 將很好的利用 Rust 語言極致效能、安全和指令級掌控能力的特點。
對於微服務架構,主流的程式語言都有對應的實現,而 Dubbo Rust 將很好的填補 Rust 領域的空白:
依託 Dubbo 龐大的使用者群,以及 Dubbo 體系下的 Mesh 服務治理整體方案規劃。Dubbo Rust 可以輕鬆地融入到現有的雲原生研發體系中,不會增加使用者的研發負擔。下圖是社群推出的 Dubbo Mesh 架構設計。
在上述架構下,整體分為控制面和資料面兩個部分,其中,
在架構設計方面,Dubbo Rust 將圍繞 Dubbo 核心設計以及 Rust 語言的特性進行設計,並將 Dubbo 框架的核心設計輸出為檔案,從而提升Dubbo框架的易用性。因此,Dubbo Rust 具有如下特點:易用性、高效能以及可延伸,同時面向雲原生提供豐富的服務治理能力。
Dubbo Rust 首個正式版本為 v0.2.0,v0.2.0 提供的能力包括
Dubbo Rust v0.2.0 的核心元件及通訊流程如下圖所示
核心架構已經基本完成,接下來的版本將重點關注核心元件的擴充套件以及服務治理相關元件的設計實現。
完整範例可檢視 【Dubbo官網】 -> 【Rust SDK 檔案】。
https://dubbo.apache.org/zh/docs3-v2/rust-sdk/quick-start/
使用 Dubbo Rust 服務開發的基本步驟為
使用 IDL 定義服務
新增 Dubbo Rust 依賴到專案
編譯 IDL
基於 IDL 編譯生成的 stub 編寫 Server & Client 邏輯
執行專案
使用 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);
}
# ./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"
#[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 官網檢視完整檔案。
Dubbo Rust Roadmap 規劃分為三個階段:
其中,第一階段的工作已經基本完成,大家可通過上文的 Quick Start 進行深入體驗,第二、第三階段的工作已經在社群全面開展,歡迎感興趣的社群開發者參與進來,具體聯絡方式參見下文。
下圖是側重從第一階段(RPC框架)、第二階段(微服務開發框架)的視角對當前 Dubbo Rust 功能完備性的評估和任務拆解。
上圖中都是 Dubbo Rust 核心設計的重要元件,保證 Dubbo Rust 具備微服務架構中完整的 RPC 通訊能力以及服務治理能力。
除了上圖列出的模組以外,還有一些非功能需求也需要支援,例如:
和 Rust 語言一樣,Dubbo Rust 是一個非常有活力、非常前沿的社群,另一方面,依賴 Apache Dubbo 社群背後龐大的開發者群體和企業使用者,Dubbo Rust 有著非常深厚的使用者基礎和發展潛力。Dubbo Rust 的快速發展期待社群貢獻者的加入
參與 Dubbo Rust 社群可以收穫
參與 Dubbo Rust 社群的方式有如下幾種
搜尋關注官方微信公眾號:Apache Dubbo,瞭解更多業界最新動態,掌握大廠面試必備 Dubbo 技能