Warum Rust Ihr nächster Schritt bei Mikroservices ist?
\n\nDie 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\nWenn 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\nIn 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\nUmgebung vorbereiten: Was Sie installieren müssen
\n\nBevor 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\n1. Rust installieren
\nDer einfachste Weg ist über den offiziellen Installer rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\nÜberprüfen Sie nach der Installation die Version:
\n\nrustc --version\ncargo --version\n\n2. Editor auswählen
\nIch empfehle VS Code mit der Erweiterung rust-analyzer. Das gibt Ihnen Autovervollständigung, Fehlerhervorhebung und Refactoring „out of the box“.
3. Docker (für Containerisierung)
\nMikroservices leben normalerweise in Containern. Installieren Sie Docker Desktop oder Docker Engine. Wir werden am Ende des Artikels ein Image erstellen.
\n\nFramework auswählen: Actix-web vs Axum vs Rocket
\n\nIn 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
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\nErster Mikroservice: URL-Verkürzungsdienst
\n\nUm 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\nSchritt 1. Projekt erstellen
\ncargo new url-shortener\ncd url-shortener\n\nSchritt 2. Abhängigkeiten hinzufügen
\nÖffnen Sie Cargo.toml und fügen Sie hinzu:
[dependencies]\nactix-web = "4"\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\nuuid = { version = "1", features = ["v4"] }\ntokio = { version = "1", features = ["full"] }\n\nSchritt 3. Code schreiben
\nErsetzen Sie den Inhalt von src/main.rs durch den folgenden Code:
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