Chaos Engineering für Rust: Wie Sie Ihre Anwendung unzerstörbar machen

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

Ist Ihr Rust-Server perfekt? Lassen Sie uns das überprüfen



Sie haben einen Server in Rust geschrieben, der Tausende von Anfragen pro Sekunde verarbeitet. Der Compiler ist zufrieden, clippy schweigt, die Tests bestehen. Aber was passiert, wenn plötzlich die Datenbank ausfällt? Oder die Netzwerkkarte anfängt zu „spinnen“? Oder die Festplatte voll läuft?



Beim traditionellen Testen prüfen wir, ob der Code wie vorgesehen funktioniert. Chaos Engineering dreht sich um etwas anderes: Wir prüfen, ob das System trotz allem überlebt. Und Rust, mit seinem Fokus auf Zuverlässigkeit und Leistung, ist die ideale Plattform für solche Experimente.



Dieser Artikel ist keine langweilige Nacherzählung der Dokumentation. Wir gehen den Weg von der Theorie zur Praxis: Ich zeige Ihnen, wie Sie Chaos Engineering für Rust-Anwendungen mit echten Tools und Code implementieren.



Was ist Chaos Engineering und warum braucht ein Rust-Entwickler es?



Chaos Engineering ist eine Disziplin von Experimenten an verteilten Systemen, die darauf abzielt, Schwachstellen zu identifizieren, bevor sie in der Produktion auftreten. Netflix, das als Pionier dieses Ansatzes gilt, verwendet das Tool Chaos Monkey, um zufällig Server abzuschalten.



Warum ist das gerade für Rust wichtig? Weil Rust oft für kritische Systeme gewählt wird:

  • Netzwerkdienste (Proxys, Load Balancer, API-Gateways)
  • Eingebettete Systeme (IoT, Fahrzeuge)
  • Blockchain-Knoten und Finanzsysteme
  • Datenstromverarbeitung


In all diesen Fällen sind die Kosten eines Fehlers hoch. Chaos Engineering hilft sicherzustellen, dass Ihre Rust-Anwendung nicht nur die normale Last, sondern auch das Chaos der realen Welt überlebt.



Tools für Chaos Engineering im Rust-Ökosystem



Obwohl das Rust-Ökosystem jünger ist als das von Java oder Go, haben wir bereits mehrere ausgereifte Bibliotheken zur Einführung von Chaos.



Tool Zweck Status
tokio-rs/bytes Emulation von Netzwerkverzögerungen Aktiv
fault-injection Einfügen von Paniken und Fehlern Stabil
simulation Emulation von Festplatten-/Netzwerkausfällen Experimentell
chaostoolkit Framework für Chaos-Szenarien Unterstützung über HTTP API


Wir konzentrieren uns auf ein praktisches Beispiel mit fault-injection und der Emulation von Netzwerkproblemen.



Praktisches Beispiel: „Feuer löschen“ in einem Rust-Dienst



Angenommen, wir haben einen einfachen HTTP-Server mit axum, der etwas tut (z. B. eine externe API aufruft). Wir möchten testen, wie er sich verhält, wenn der externe Dienst nicht verfügbar ist oder mit Verzögerung antwortet.



Schritt 1: Basisserver mit „Schwachstelle“



Schreiben wir einen Server, der eine Anfrage an httpbin.org stellt (Simulation eines externen Dienstes):



use axum::{Router, routing::get, response::Json};use reqwest::Client;use std::sync::Arc;use serde_json::Value;

#[tokio::main]async fn main() { let client = Arc::new(Client::new());

let app = Router::new() .route("/fetch", get(handler)) .with_state(client);

axum::Server::bind(&"0.0.0.0:3000".parse().unwrap()) .serve(app.into_make_service()) .await .unwrap();}

async fn handler(client: Arc<Client>) -> Result<Json<Value>, (StatusCode, String)> { let resp = client.get("https://httpbin.org/uuid") .timeout(std::time::Duration::from_secs(5)) .send() .await .map_err(|e| (StatusCode::SERVICE_UNAVAILABLE, e.to_stri

Blogs

Buchempfehlungen