Ir al contenido
use-cases / move-200gb-between-clouds-with-two-curls / hero
PIPE · MIGRACIÓN ENTRE NUBES

Mueve 200 GB entre nubes con dos curls

Un backup de Postgres de 200 GB en Frankfurt. Una caja nueva en Singapur. Saltas la ida y vuelta a S3. Un curl canaliza pg_dump a una URL de Hoody pipe; un curl al otro lado lo transmite directo a psql. Los bytes están en vuelo, nunca en reposo.

use-cases / move-200gb-between-clouds-with-two-curls / mechanism

No es un bucket. Es un router.

Hoody Pipe es una ruta con nombre en un servidor HTTP. El emisor hace PUT de un stream, el receptor hace GET a la misma ruta y el servidor empalma las dos. Nada se escribe en disco; el pipe contiene cero bytes por diseño.

Bytes entre dos curlsTTL DE 5 MIN · SIN CAPA DE ALMACENAMIENTO
01 · EMISOR

PUT a la ruta

Desde la caja de origen, pg_dump | gzip | curl -T - a la URL del pipe. El cuerpo del PUT fluye tan rápido como el backpressure TCP permita. El servidor mantiene la conexión hasta que aparezca un receptor en la misma ruta.

PUT /api/v1/pipe/migration
02 · ROUTER

Empalma en memoria

Cuando el GET del receptor aterriza en la misma ruta, Hoody empalma los bytes de la subida directamente en la respuesta de la descarga. Sin buffer, sin staging en disco, sin commit asíncrono — solo un stream directo entre dos sockets HTTP.

0 bytes en disco
03 · RECEPTOR

GET como stream

Desde la caja de destino, curl hace GET a la ruta y canaliza la respuesta por gunzip | psql. El stream del lado receptor termina en el segundo en que llega el último byte del emisor. Sin reintentos, sin manifest, sin limpieza.

GET /api/v1/pipe/migration

El orden de conexión no importa — el receptor puede hacer curl primero y bloquearse hasta que se conecte el emisor (o viceversa), hasta el TTL de 5 minutos del pipe. El backpressure fluye de extremo a extremo: un psql lento estrangula al curl en el origen. No hay cola que desbordar porque no hay cola.

use-cases / move-200gb-between-clouds-with-two-curls / commands

Los dos comandos de verdad

Esto no es pseudocódigo. Abre dos terminales en los dos servidores, ejecuta uno en cada uno y mira cómo un backup de 200 GB sale de una nube y aterriza en otra.

frankfurt:~ · emisor
PUT · EMISORFrankfurt → pipe
# 1. Transmite la base de datos en vivo al pipe$pg_dump --format=custom mydb | gzip \ | curl -T - https://pipe.containers.hoody.com/api/v1/pipe/migration# 2. El servidor responde con mensajes de estado[INFO] Waiting for 1 receiver(s) to connect...[INFO] Streaming to 1 receiver(s)...[INFO] Upload complete.[INFO] Transfer complete.
singapore:~ · receptor
GET · RECEPTORpipe → Singapur
# 1. Canaliza directo a la nueva base de datos$curl https://pipe.containers.hoody.com/api/v1/pipe/migration \ | gunzip | psql newdb# 2. Los bytes llegan a psql según salen de FrankfurtCREATE TABLE okCOPY 4823918 okALTER TABLE ok

Se prefiere PUT (curl -T) porque es como curl quiere subir un stream. POST funciona idéntico — misma ruta, mismos mensajes de estado. Usa ?n=N en ambos lados si necesitas repartir el mismo dump a varios receptores.

use-cases / move-200gb-between-clouds-with-two-curls / spectator
PROGRESO · ?progress

Una URL de espectador que cualquiera puede mirar

Un tercer portátil abre la misma URL del pipe con ?progress y obtiene un feed SSE en tiempo real de bytes-por-segundo, ETA y receptores conectados. Espectar no consume un slot de receptor — cincuenta compañeros pueden mirar la migración sin cambiar el valor de n ni interferir con la transferencia.

  • SIN SLOT DE RECEPTOR
  • HASTA 50 ESPECTADORES
  • PERMANENCIA DE 30 MIN
spectator.…hoody.com/migration?progress
SSE · text/event-streamSTREAMING
event: statedata: ["state":"streaming","receivers":1]event: progressdata: ["bytes":83_421_667_840, "speed":"412 MB/s", "eta":"4m 44s"]event: progressdata: ["bytes":118_295_117_824, "speed":"406 MB/s", "eta":"3m 21s"]↻ live · 250ms throttle
use-cases / move-200gb-between-clouds-with-two-curls / why

Por qué dos curls le ganan a seis pasos

La ida y vuelta a S3 parece simple en una pizarra. En producción es una pila de piezas móviles que cobran por segundo. El pipe colapsa la pila entera dentro del propio transporte.

Sin tercera capa de almacenamiento

S3, GCS, Azure Blob — la ida y vuelta existe solo porque no había otro sitio donde aparcar los bytes. El pipe es la ruta. No hay bucket que aprovisionar, regla de lifecycle ni limpieza posterior.

Paga por el vuelo, no por el reposo

Egress en la subida, egress en la descarga — dos veces. Con el pipe los bytes salen de Frankfurt y llegan a Singapur en un solo salto. Pagas por los segundos que la conexión estuvo abierta, no por almacenamiento que borrarás mañana.

HTTP de arriba abajo

Tu monitorización ya entiende HTTP. También tu VPN, tu firewall, tu log de auditoría. Sin nueva identidad IAM, sin nuevo SDK, sin nuevo modo de fallo — es un comando curl.

DIMENSIÓNIDA Y VUELTA A S3HOODY PIPE
  • Pasos6 etapas2 curls
  • Disco usado200 GB0 bytes
  • Tramos de egress2 × 200 GB1 × 200 GB
  • Limpiezaregla de lifecycleninguna

La velocidad está acotada por el enlace más lento de extremo a extremo (egress de Frankfurt, ingress de Singapur, tu ventana TCP). El pipe de Hoody contiene cero bytes — no hay almacenamiento del lado del servidor; el backpressure fluye directo entre los dos extremos.

use-cases / move-200gb-between-clouds-with-two-curls / punchline

Dos terminales, una URL, sin tercera capa de almacenamiento.

La migración entera tiene la misma forma que cat file | wc -l. Que los dos pipes vivan en data centers distintos es un detalle de implementación de la URL.

  • cero saltos
  • cero retención
  • una URL
Lee la API
use-cases / move-200gb-between-clouds-with-two-curls / replaces

Lo que esto reemplaza

Cualquier cosa que existe solo porque nadie tenía una ruta HTTP que transmita. El pipe colapsa toda la pila de migración de datos en un curl en cada lado.

  • Copia entre regiones de AWS S3Dos egresses, un bucket, reglas de lifecycle
  • Dropbox transfer200 GB descansando en el disco de otro durante una semana
  • Entrega por Google DriveMuros de cuota, enlaces compartidos, limpieza manual
  • rsync sobre SSHSSH entre nubes aleatorias = bastions y intercambios de claves
  • SCP + resumeUn proceso, sin fan-out, se rompe con enlaces flojos
  • Herramientas de migración de datos de tercerosUn proveedor entero para un curl con pasos de más
use-cases / move-200gb-between-clouds-with-two-curls / cta

Sáltate el bucket. El transporte es la URL.

Lee la API de pipe
use-cases / move-200gb-between-clouds-with-two-curls / related

Lee los otros