El Hydra del pobre era pobre por algo


17 de mayo de 2026

Hace cinco dias monte el "Hydra del pobre": un binary cache compartido para los cinco clones del enjambre. Hoy lo he jubilado. No porque estuviera mal hecho. Porque la fisica no daba para mas.

Que era la idea

Cada clon (aurin, macbook, vespino, cohete, retropix) compila sus propios paquetes. Eso significa que aurin compila firefox, macbook compila firefox, vespino compila firefox… cinco veces el mismo build, cinco copias en distintos discos.

La idea era simple: el primero que compila sube al bucket. Los demas descargan. Un Hydra del pobre, una factoria binaria compartida.

Pieza por pieza:

Sobre el papel, bonito.

El error de calculo

El cuello de botella no estaba en garage, ni en nix, ni en el hook. Estaba en mi uplink. Aurin sale a internet por WiMAX. Ancho de banda de subida medido:

scp -i ~/.ssh/id_ed25519 50MB.bin root@cohete:/tmp/
# 50 MB transferred in 6 minutes 16 seconds
# = 130 KB/s
# = 1.04 Mbps

Un megabit. Eso es lo que tengo para empujar al mundo. Para una replicacion factor 2, cada path que aurin sube al bucket viaja a cohete por el mismo cable estrecho. Un google-chrome-unwrapped de 300 MB tarda 40 minutos. Un kernel completo, mas de una hora. Y mientras, el nix copy del post-build-hook se queda zombi bloqueando el daemon. La build siguiente espera. Y la siguiente.

Lo peor: cuando un cliente remoto (mac, vespino, cohete) intentaba leer del nix-serve HTTP de aurin para un substituter, tambien pasaba por el mismo uplink. Timeouts de minutos por path. El cliente acababa rindiendose y compilando localmente. Habia construido un cache compartido que era mas lento que no tenerlo.

La autocritica

Tres errores de diseno:

  1. No medi el uplink antes de elegir factor 2. Asumi "tendre un par de megas de subida". La realidad: 1 Mbps. Con factor 1 (solo aurin) hubiera bastado. Con factor 2 multipliqué por dos el ancho de banda necesario.

  2. Confundi "tengo dos zonas" con "tengo redundancia barata". La redundancia tiene un coste de red. Si ese coste no te entra en el presupuesto fisico, no tienes redundancia: tienes una cola de subida infinita.

  3. Replique un patron de empresa en una red domestica. Hydra de NixOS existe porque tienen centros de datos con uplinks de gigabits. Yo replique el mismo concepto sobre un cable de ferreteria. Que un sistema "se pueda" replicar no significa que "se deba" replicar.

La jubilacion

Commits:

Quedan en pie:

Lo que NO se jubila:

La leccion

La infraestructura no se diseña sobre lo que podrias construir. Se diseña sobre lo que de verdad aguanta tu eslabon mas debil. En mi caso, el eslabon mas debil es un radioenlace WiMAX que sale desde un campo de Murcia. Cualquier diseño que ignore eso, por elegante que sea, esta diseñado para otra persona, no para mi.

Salimos ganando: cuatro dias de aprendizaje, un cluster Garage que sigue siendo util para el blog, y un diagnostico claro de cual es realmente el cuello de botella del enjambre. Ahora ese cuello de botella tiene nombre: 1 Mbps de subida. Cualquier futura idea que implique trafico saliendo de aurin pasara por ese filtro antes de escribir una sola linea de Nix.

El Hydra del pobre era pobre por algo. Lo de "del pobre" no era un chiste. Era el diagnostico.

/Commits relacionados: c169735 retirar writer, cd190f1 quitar nix-serve del client. Bucket Garage nix-cache eliminado el 17/05/2026./

/El cluster Garage sigue vivo: cohete-blog-images con factor de replicacion 2 entre aurin y cohete. Esa parte funciona porque el writer es cohete, no aurin./

Comparte este post:

Es tu post

Estas seguro? Esto no se puede deshacer.

Comentarios (0)

Sin comentarios todavia. Se el primero!

Deja un comentario