¿Por qué Rust es tu próximo paso en microservicios?
\n\nEl mundo de los microservicios ha estado dividido durante mucho tiempo entre Java (con su Spring Boot), Python (FastAPI, Django) y Go. Pero en los últimos años se escucha cada vez más la voz de Rust. ¿Por qué? Porque Rust ofrece lo que antes parecía inalcanzable: el rendimiento de C++ y la seguridad de memoria, sin un recolector de basura.
\n\nSi escribes en Python, estás acostumbrado a la velocidad de desarrollo. Pero cuando la carga crece, Python empieza a «ralentizarse». Rust resuelve este problema de forma radical: un microservicio en Rust puede reemplazar de 3 a 4 servicios en Python en términos de rendimiento. Y además, el código no «falla» en tiempo de ejecución con NullPointerException.
\n\nEn este artículo no filosofaremos. Tomaremos y escribiremos un microservicio en Rust desde cero. Verás que no da miedo, sino que es muy entretenido.
\n\nPreparando el entorno: qué necesitas instalar
\n\nAntes de escribir código, asegurémonos de que tienes todo lo necesario. Si eres nuevo en Rust, no te asustes, la instalación toma 2 minutos.
\n\n1. Instalación de Rust
\nLa forma más sencilla es a través del instalador oficial rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\nDespués de la instalación, verifica la versión:
\n\nrustc --version\ncargo --version\n\n2. Elección del editor
\nRecomiendo VS Code con la extensión rust-analyzer. Esto te dará autocompletado, resaltado de errores y refactorización «lista para usar».
3. Docker (para contenerización)
\nLos microservicios suelen vivir en contenedores. Instala Docker Desktop o Docker Engine. Construiremos la imagen al final del artículo.
\n\nEligiendo el framework: Actix-web vs Axum vs Rocket
\n\nEn el mundo de Rust hay tres frameworks principales para servidores HTTP. Aquí tienes una breve comparación:
\n\n- \n
- Actix-web — el más rápido (hasta 1 millón de solicitudes/seg). Maduro, con muchos ejemplos. Ideal para producción. \n
- Axum — moderno, de los creadores de Tokio. Se integra mejor con el ecosistema async. \n
- Rocket — la sintaxis más «amigable», pero se actualiza más lentamente. \n
En este artículo usaremos Actix-web, ya que está probado por años y tiene la comunidad más grande. Pero si quieres un stack «moderno», elige Axum sin dudar.
\n\nPrimer microservicio: servicio de acortamiento de enlaces
\n\nPara no ser abstractos, escribamos un microservicio real — url-shortener. Recibirá una URL larga y devolverá una corta.
\n\nPaso 1. Crear el proyecto
\ncargo new url-shortener\ncd url-shortener\n\nPaso 2. Agregar dependencias
\nAbre Cargo.toml y agrega:
[dependencies]\nactix-web = "4"\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\nuuid = { version = "1", features = ["v4"] }\ntokio = { version = "1", features = ["full"] }\n\nPaso 3. Escribir el código
\nReemplaza el contenido de src/main.rs con el siguiente código:
use actix_web::{web, App, HttpServer, HttpResponse, Responder};\nuse serde::{Deserialize, Serialize};\nuse std::sync::Mutex;\nuse uuid::Uuid;\n\n// Estructura para almacenar enlaces en memoria\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 — crea un enlace corto\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(), // tomamos los primeros 8 caracteres del UUID\n url: body.url.clone(),\n };\n\n let mut links = data.lin