Rust微服务:如何起步而不迷失方向

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么Rust是你在微服务领域的下一步?



微服务世界长期以来一直被Java(及其Spring Boot)、Python(FastAPI、Django)和Go所主导。但最近几年,Rust的声音越来越响亮。为什么?因为Rust提供了过去看似难以企及的优势:C++级别的性能和无垃圾回收的内存安全。



如果你使用Python开发,你已经习惯了快速开发的节奏。但当负载增加时,Python开始“变慢”。Rust从根本上解决了这个问题:一个Rust微服务在性能上可以替代3-4个Python服务。而且代码不会在运行时因NullPointerException而崩溃。



本文不会空谈理论。我们将从零开始编写一个Rust微服务。你会发现这并不可怕,反而非常有趣。



准备环境:需要安装什么



在编写代码之前,让我们确保你已准备好所有必要工具。如果你是Rust新手,别担心,安装只需2分钟。



1. 安装Rust

最简单的方法是通过官方安装程序rustup:



curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh


安装后检查版本:



rustc --versioncargo --version


2. 选择编辑器

推荐使用VS Code并安装rust-analyzer扩展。这将为你提供自动补全、错误高亮和开箱即用的重构功能。



3. Docker(用于容器化)

微服务通常运行在容器中。请安装Docker Desktop或Docker Engine。我们将在文章末尾构建镜像。



选择框架:Actix-web vs Axum vs Rocket



在Rust世界中,有三个主要的HTTP服务器框架。以下是它们的简要对比:



  • Actix-web — 速度最快(可达100万请求/秒)。成熟稳定,示例丰富。适合生产环境。
  • Axum — 现代化框架,由Tokio团队开发。与异步生态系统集成最佳。
  • Rocket — 语法最“友好”,但更新速度较慢。


本文将使用Actix-web,因为它经过多年验证且拥有最大的社区。但如果你想要“时髦”的技术栈,可以放心选择Axum。



第一个微服务:URL缩短服务



为了避免空谈,我们将编写一个真实的微服务——url-shortener。它将接收长URL并返回短URL。



步骤1. 创建项目

cargo new url-shortenercd url-shortener


步骤2. 添加依赖

打开Cargo.toml并添加:



[dependencies]actix-web = "4"serde = { version = "1", features = ["derive"] }serde_json = "1"uuid = { version = "1", features = ["v4"] }tokio = { version = "1", features = ["full"] }


步骤3. 编写代码

将src/main.rs的内容替换为以下代码:



use actix_web::{web, App, HttpServer, HttpResponse, Responder};use serde::{Deserialize, Serialize};use std::sync::Mutex;use uuid::Uuid;

// 用于在内存中存储链接的结构体struct AppState { links: Mutex>,}

#[derive(Serialize, Deserialize, Clone)]struct Link { id: String, url: String,}

#[derive(Deserialize)]struct CreateLinkRequest { url: String,}

// POST /shorten — 创建短链接async fn shorten(data: web::Data<AppState>, body: web::Json<CreateLinkRequest>) -> impl Responder { let new_link = Link { id: Uuid::new_v4().to_string()[..8].to_string(), // 取UUID的前8个字符 url: body.url.clone(), };

let mut links = data.lin

博客

书籍推荐