216 lines
8.6 KiB
Markdown
216 lines
8.6 KiB
Markdown
|
|
# Talk Structure: Why I Needed Rust
|
|||
|
|
|
|||
|
|
> Orientado a: `abstract_en.md`
|
|||
|
|
> Fuente: `2026-02-17-notas_voz.md`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Sistema de Medidores *(elemento visual persistente)*
|
|||
|
|
|
|||
|
|
Tres barras que aparecen en esquina de cada slide de transición.
|
|||
|
|
Escala 0–5. Se actualizan en cada etapa clave.
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
🛡 Confianza ●●●●● = máxima certeza sobre el sistema
|
|||
|
|
😴 Descanso ●●●●● = puedes dormir tranquilo
|
|||
|
|
🔥 Estrés ●●●●● = alarma permanente, pesadillas
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Estado inicial (apertura)**
|
|||
|
|
```
|
|||
|
|
🛡 ●●●○○ 😴 ●●●○○ 🔥 ●○○○○
|
|||
|
|
```
|
|||
|
|
*Se presenta como "¿Reconoces estos números? Sigamos..."*
|
|||
|
|
|
|||
|
|
**Progresión a lo largo de la charla:**
|
|||
|
|
|
|||
|
|
| Momento | 🛡 Confianza | 😴 Descanso | 🔥 Estrés |
|
|||
|
|
|---|:---:|:---:|:---:|
|
|||
|
|
| Etapa 1 — Local | ●●●●○ | ●●●●○ | ●○○○○ |
|
|||
|
|
| Etapa 2 — Redes | ●●●○○ | ●●●○○ | ●●○○○ |
|
|||
|
|
| Etapa 3 — Cloud/CI-CD | ●●○○○ | ●○○○○ | ●●●●○ |
|
|||
|
|
| YAML hell / peak pain | ●○○○○ | ○○○○○ | ●●●●● |
|
|||
|
|
| Rust — compilador | ●●●○○ | ●●○○○ | ●●●○○ |
|
|||
|
|
| Rust — tipos + traits | ●●●●○ | ●●●●○ | ●●○○○ |
|
|||
|
|
| Cierre | ●●●●● | ●●●●● | ●○○○○ |
|
|||
|
|
|
|||
|
|
> El título de la charla ES el último estado del medidor de sueño.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 0. Hook de apertura
|
|||
|
|
|
|||
|
|
**Imagen concreta**: definir un host, un nodo, un puerto.
|
|||
|
|
- Eso es todo. Queremos que algo corra en algún sitio y que algo pueda hablar con él.
|
|||
|
|
- ¿Cómo de difícil puede ser?
|
|||
|
|
|
|||
|
|
**Promesa**: vamos a ver por qué eso, durante 30 años, nos ha dado pesadillas. Y por qué Rust cambió eso.
|
|||
|
|
|
|||
|
|
*→ Mostrar medidores en interrogante o en estado inicial neutro*
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. Evolución de los desafíos en infraestructura (2013-2025)
|
|||
|
|
|
|||
|
|
*Abstract: "The evolution of infrastructure challenges (2013-2025)"*
|
|||
|
|
|
|||
|
|
### Etapa 1 — Local (finales 80s / primeros 90s)
|
|||
|
|
- Terminales tontos, desarrollo local
|
|||
|
|
- Ciclos de despliegue largos, baja urgencia
|
|||
|
|
- Un solo estado, fácil de observar y controlar
|
|||
|
|
- IaC: scripts procedurales, lógica oculta en comandos o en la aplicación
|
|||
|
|
|
|||
|
|
> *Medidores fin Etapa 1:* `🛡 ●●●●○ 😴 ●●●●○ 🔥 ●○○○○`
|
|||
|
|
> *"Tienes un servidor. Sabes lo que tiene. Puedes dormir."*
|
|||
|
|
|
|||
|
|
### Etapa 2 — Conectividad en red / Internet
|
|||
|
|
- Los sistemas están cada vez más lejos — acceso remoto, redes distantes
|
|||
|
|
- Seguridad empieza a importar; procesos críticos, coste de caída sube
|
|||
|
|
- Más agentes participando (dev, ops, seguridad) — hay que armonizar
|
|||
|
|
- Armonizar: instalación de paquetes, configuración de recursos, actualizaciones en paralelo
|
|||
|
|
- IaC: procesos automatizables y reproducibles, primeros intentos declarativos, config-driven model
|
|||
|
|
|
|||
|
|
> *Medidores fin Etapa 2:* `🛡 ●●●○○ 😴 ●●●○○ 🔥 ●●○○○`
|
|||
|
|
> *"Más piezas. Más personas. Empieza a ponerse interesante."*
|
|||
|
|
|
|||
|
|
### Etapa 3 — Contenedores / Cloud / CI-CD
|
|||
|
|
- Monolítico → distribuido, 24×7×365, alta disponibilidad
|
|||
|
|
- Cloud, híbrido, multi-cloud, on-prem — todo a la vez
|
|||
|
|
- Rollback y rollforward: como transacciones de BD, pero en infraestructura
|
|||
|
|
- Escalado horizontal **y** vertical, también **desescalado** — en ambas direcciones
|
|||
|
|
- CI/CD continuo, ciclos cortos — nuevas funcionalidades, nuevos despliegues, permanente
|
|||
|
|
- IaC: Helm, Ansible, Terraform — más herramientas, más complejidad
|
|||
|
|
- Múltiples versiones de "lo que creemos que es válido" — la fuente de verdad se fragmenta
|
|||
|
|
- **Resultado**: estados de alarma como norma, no como excepción
|
|||
|
|
|
|||
|
|
> *Medidores fin Etapa 3:* `🛡 ●●○○○ 😴 ●○○○○ 🔥 ●●●●○`
|
|||
|
|
|
|||
|
|
> *"¿Hemos aumentado la productividad? Sí.<br> ¿Hemos aumentado el estrés? Sí.<br> ¿Hemos aumentado las posibilidades de tener problemas? También.<br> ¿Tenemos más control y seguridad? No."*
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. Por qué el IaC tradicional falla a escala
|
|||
|
|
|
|||
|
|
*Abstract: "Why traditional approaches to IaC fall short at scale"*
|
|||
|
|
|
|||
|
|
### El ciclo del YAML hell
|
|||
|
|
1. JSON entre máquinas funciona bien → pero es ilegible para humanos
|
|||
|
|
2. Pasamos a YAML / TOML → sintaxis frágil, errores de indentación
|
|||
|
|
3. Usamos gestores de plantillas (Helm, Jinja) → generan YAML a partir de variables en YAML
|
|||
|
|
4. **¿Valida el contenido?** No. En absoluto.
|
|||
|
|
5. Cruzamos los dedos.
|
|||
|
|
|
|||
|
|
> *Medidores — YAML hell peak:* `🛡 ●○○○○ 😴 ○○○○○ 🔥 ●●●●●`
|
|||
|
|
> *"Esto es el suelo. A partir de aquí, o seguimos igual o buscamos algo mejor."*
|
|||
|
|
|
|||
|
|
### Las tres preguntas sin respuesta
|
|||
|
|
|
|||
|
|
**Pregunta 1: ¿Por qué esperamos a que se rompa?**
|
|||
|
|
- "In my machine it works" — en producción, no lo sé
|
|||
|
|
- Fail late = coste máximo
|
|||
|
|
- Queremos: fail fast, fail cheap
|
|||
|
|
|
|||
|
|
**Pregunta 2: ¿Tenemos claro lo que queremos?**
|
|||
|
|
- ¿La declaración es suficiente? ¿Consistente con lo que es posible?
|
|||
|
|
- ¿Respeta los límites y reglas del sistema?
|
|||
|
|
- ¿Cuál es la "fuente de verdad" y cuándo muta?
|
|||
|
|
|
|||
|
|
**Pregunta 3: ¿Tenemos herramientas que garanticen determinismo?**
|
|||
|
|
- CI/CD continuo sin validación semántica = esperanza continua
|
|||
|
|
- Queremos certeza, no aleatoriedad
|
|||
|
|
- "En mi máquina funciona" no puede ser el estándar de producción
|
|||
|
|
|
|||
|
|
### Analogía del restaurante *(hilo conductor)*
|
|||
|
|
| Restaurante | Infraestructura |
|
|||
|
|
|---|---|
|
|||
|
|
| Comensal declara lo que quiere | Config declarativa (YAML, HCL) |
|
|||
|
|
| Camarero valida si es posible | Orchestrator (K8s, Ansible) |
|
|||
|
|
| Cocina ejecuta y entrega | Runtime / provisioning |
|
|||
|
|
| El plato llega o no llega | Deployment falla o no |
|
|||
|
|
|
|||
|
|
- El camarero no puede volver a cocina con un pedido imposible
|
|||
|
|
- La cocina no puede asumir ingredientes que no están
|
|||
|
|
- Cada actor en la cadena tiene una vista parcial de "la verdad"
|
|||
|
|
- Un fallo en mesa ≠ un fallo en cocina ≠ un fallo en entrega → coste diferente en cada punto
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. Type safety y memory safety como fiabilidad en producción
|
|||
|
|
|
|||
|
|
*Abstract: "Type safety and memory safety as production reliability"*
|
|||
|
|
|
|||
|
|
### Lo que Rust introduce
|
|||
|
|
|
|||
|
|
**Tipado estático estricto**
|
|||
|
|
- Un número no es un string. Un puerto no es cualquier entero.
|
|||
|
|
- Tipos primarios ricos + tipos compuestos (structs, enums)
|
|||
|
|
- Las conversiones (cast) son explícitas, no implícitas
|
|||
|
|
|
|||
|
|
**Inmutabilidad por defecto**
|
|||
|
|
- "Quiero tomate. Puedes inventarte lo que quieras, pero sin tomate no es el plato que pedí."
|
|||
|
|
- Lo que no puede cambiar, no cambia. Sin sorpresas en runtime.
|
|||
|
|
|
|||
|
|
**Options, no nulos**
|
|||
|
|
- No `null`, no "asume que está". `Option<T>`: está o no está, y ambos casos son manejados.
|
|||
|
|
- Ingrediente opcional: si no está, lo sé. Lo cobro o no. Pero lo controlo.
|
|||
|
|
|
|||
|
|
**Enums y rangos como restricciones**
|
|||
|
|
- Un puerto válido es un rango entre 0 y 65535, no cualquier número
|
|||
|
|
- Un cloud provider es `AWS | GCP | Azure | OnPrem`, no un string libre
|
|||
|
|
- Las restricciones son parte del tipo, no de la documentación
|
|||
|
|
|
|||
|
|
**Traits como contratos**
|
|||
|
|
- Composición en vez de herencia
|
|||
|
|
- Implementaciones validadas contra interfaces definidas
|
|||
|
|
- Diferentes "actores" en la cadena pueden tener diferentes implementaciones del mismo contrato
|
|||
|
|
|
|||
|
|
**El compilador como pre-validación**
|
|||
|
|
- Valida *antes* de construir el binario
|
|||
|
|
- No cuando lleva tiempo en ejecución
|
|||
|
|
- No cuando se llama a una función que hace meses que nadie toca
|
|||
|
|
- Binarios predecibles en comportamiento de memoria, recursos y flujos
|
|||
|
|
|
|||
|
|
> *"El compilador es el camarero que valida el pedido antes de que llegue a cocina."*
|
|||
|
|
|
|||
|
|
> *Medidores — Rust completo:* `🛡 ●●●●● 😴 ●●●●● 🔥 ●○○○○`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. Orquestación segura multi-cloud y on-prem
|
|||
|
|
|
|||
|
|
*Abstract: "Building safe orchestration across multi-cloud and on-prem environments"*
|
|||
|
|
|
|||
|
|
*(Sección a desarrollar — no cubierta en las notas de voz actuales)*
|
|||
|
|
|
|||
|
|
Puntos a cubrir:
|
|||
|
|
- Tipos como esquema de infraestructura → no YAML libre
|
|||
|
|
- Traits para abstraer providers (AWS, GCP, on-prem, K8s)
|
|||
|
|
- Compilador detecta configuraciones imposibles antes del despliegue
|
|||
|
|
- Estado mutable explícito → sin configuration drift silencioso
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. Aplicaciones reales
|
|||
|
|
|
|||
|
|
*Abstract: "Real applications: Kubernetes, blockchain validators, disaster recovery"*
|
|||
|
|
|
|||
|
|
*(Sección a desarrollar — no cubierta en las notas de voz actuales)*
|
|||
|
|
|
|||
|
|
Casos concretos:
|
|||
|
|
- Kubernetes: operadores en Rust, CRDs con tipos seguros
|
|||
|
|
- Blockchain validators: disponibilidad crítica, configuración determinista
|
|||
|
|
- Disaster recovery: reproducibilidad, sin "funciona en prod pero no en DR"
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Cierre
|
|||
|
|
|
|||
|
|
- No hemos inventado nada nuevo. Los problemas siempre han existido.
|
|||
|
|
- Rust los reúne y los resuelve: tipos, traits, compiler, memory safety.
|
|||
|
|
- El resultado: infraestructura predecible. Deployments sin pesadillas.
|
|||
|
|
- **Duermes bien.**
|
|||
|
|
|
|||
|
|
> *Medidores — cierre:* `🛡 ●●●●● 😴 ●●●●● 🔥 ●○○○○`
|
|||
|
|
>
|
|||
|
|
> *Slide final: los tres medidores en verde. Título de la charla. Fin.*
|