Mikroservices mit Rust: Wo man anfängt und nicht den Verstand verliert

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum Rust Ihr nächster Schritt bei Mikroservices ist?

\n\n

Die Welt der Mikroservices war lange Zeit zwischen Java (mit seinem Spring Boot), Python (FastAPI, Django) und Go aufgeteilt. Aber in den letzten Jahren hört man immer häufiger die Stimme von Rust. Warum? Weil Rust das bietet, was früher unerreichbar schien: die Leistung von C++ und Speichersicherheit – ohne Garbage Collector.

\n\n

Wenn Sie in Python schreiben, sind Sie an schnelle Entwicklung gewöhnt. Aber wenn die Last steigt, beginnt Python zu „trödeln“. Rust löst dieses Problem radikal: Ein Mikroservice in Rust kann 3–4 Dienste in Python in Bezug auf die Leistung ersetzen. Und dabei stürzt der Code zur Laufzeit nicht mit NullPointerException ab.

\n\n

In diesem Artikel werden wir nicht philosophieren. Wir nehmen und schreiben einen Mikroservice in Rust von Grund auf. Sie werden sehen, dass das nicht beängstigend, sondern sogar sehr spannend ist.

\n\n

Umgebung vorbereiten: Was Sie installieren müssen

\n\n

Bevor wir Code schreiben, stellen wir sicher, dass Sie alles Notwendige haben. Wenn Sie neu in Rust sind – keine Angst, die Installation dauert 2 Minuten.

\n\n

1. Rust installieren

\n

Der einfachste Weg ist über den offiziellen Installer rustup:

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

Überprüfen Sie nach der Installation die Version:

\n\n
rustc --version\ncargo --version
\n\n

2. Editor auswählen

\n

Ich empfehle VS Code mit der Erweiterung rust-analyzer. Das gibt Ihnen Autovervollständigung, Fehlerhervorhebung und Refactoring „out of the box“.

\n\n

3. Docker (für Containerisierung)

\n

Mikroservices leben normalerweise in Containern. Installieren Sie Docker Desktop oder Docker Engine. Wir werden am Ende des Artikels ein Image erstellen.

\n\n

Framework auswählen: Actix-web vs Axum vs Rocket

\n\n

In der Welt von Rust gibt es drei Haupt-Frameworks für HTTP-Server. Hier ist ein kurzer Vergleich:

\n\n
    \n
  • Actix-web – das schnellste (bis zu 1 Million Anfragen/Sekunde). Ausgereift, viele Beispiele. Ideal für die Produktion.
  • \n
  • Axum – modern, von den Erstellern von Tokio. Am besten in die async-Ökosystem integriert.
  • \n
  • Rocket – die „freundlichste“ Syntax, wird aber langsamer aktualisiert.
  • \n
\n\n

In diesem Artikel verwenden wir Actix-web, da es jahrelang erprobt ist und die größte Community hat. Aber wenn Sie einen „modischen“ Stack wollen – nehmen Sie ruhig Axum.

\n\n

Erster Mikroservice: URL-Verkürzungsdienst

\n\n

Um nicht abstrakt zu bleiben, schreiben wir einen echten Mikroservice – einen url-shortener. Er nimmt eine lange URL entgegen und gibt eine kurze zurück.

\n\n

Schritt 1. Projekt erstellen

\n
cargo new url-shortener\ncd url-shortener
\n\n

Schritt 2. Abhängigkeiten hinzufügen

\n

Öffnen Sie Cargo.toml und fügen Sie hinzu:

\n\n
[dependencies]\nactix-web = "4"\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\nuuid = { version = "1", features = ["v4"] }\ntokio = { version = "1", features = ["full"] }
\n\n

Schritt 3. Code schreiben

\n

Ersetzen Sie den Inhalt von src/main.rs durch den folgenden Code:

\n\n
use actix_web::{web, App, HttpServer, HttpResponse, Responder};\nuse serde::{Deserialize, Serialize};\nuse std::sync::Mutex;\nuse uuid::Uuid;\n\n// Struktur zum Speichern von Links im Speicher\nstruct AppState {\n    links: Mutex>,\n}\n\n#[derive(Serialize, Deserialize, Clone)]\nstruct Link {\n    id: String,\n    url: String,\n}\n\n#[derive(Deserialize)]\nstruct CreateLinkRequest {\n    url: String,\n}\n\n// POST /shorten — erstellt einen kurzen Link\nasync fn shorten(data: web::Data<AppState>, body: web::Json<CreateLinkRequest>) -> impl Responder {\n    let new_link = Link {\n        id: Uuid::new_v4().to_string()[..8].to_string(), // nimmt die ersten 8 Zeichen der UUID\n        url: body.url.clone(),\n    };\n\n    let mut links = data.lin                

Blogs

Buchempfehlungen