Ejecutar el protocolo tus en producción
En 2013 nos propusimos hacer del mundo un lugar un poco mejor arreglando la subida de archivos para todos. Lo hicimos desarrollando un protocolo abierto para subir archivos de forma fiable, llamado tus. El camino fue largo y hubo muchos contratiempos e hitos en el trayecto, pero hoy celebramos que la API de Transloadit ya es totalmente compatible con el protocolo tus. Ya estamos avanzando mucho en la actualización de todos nuestros SDK para que también sean compatibles con el protocolo tus. Nos entusiasma mucho poder ofrecer sus robustas capacidades de recepción de contenido a todos nuestros clientes.
No todo el mundo disfruta de una conexión a internet rápida y estable. Incluso en los países del primer mundo, la gente sufre a menudo malas conexiones, por ejemplo durante viajes en tren, al bajar al sótano o para quienes viven en zonas más rurales. El Wi-Fi inestable también es una fuente habitual de problemas. Y cuando el usuario de tu aplicación sube un video de 100 MB y su conexión falla después de haber subido 90 MB, eso resulta lo bastante frustrante como para no querer reintentar la subida desde cero.
La mala calidad de la conexión deja en mal lugar a tu aplicación, y puedes acabar recibiendo una frustración que en realidad debería dirigirse a los operadores de red o a las fuentes de interferencia de Wi-Fi.
Este problema empeora cada día, ya que salen cámaras mejores que provocan un aumento drástico del tamaño de los archivos, mientras que la fiabilidad de las conexiones de red sigue igual.
La solución a un problema común

Con el protocolo tus, esto es cosa del pasado. Aunque no podemos arreglar las malas conexiones de red, sí podemos hacer que las subidas se reanuden automáticamente justo donde se interrumpieron. Si todo va bien, el usuario final probablemente ni siquiera notará la interrupción. El sitio web o la aplicación sube de inmediato los bytes restantes y el usuario mantiene su flujo.
La subida reanudable de archivos ha sido posible desde hace tiempo, pero nunca existió un estándar abierto para ello, lo que dio lugar al nacimiento de mil proyectos de una semana, incompatibles y que apenas funcionaban. Cuando nos propusimos hacer algo por la fiabilidad de la subida de archivos, no queríamos convertirnos en uno de esos proyectos. Aunque sabíamos que diseñar un nuevo protocolo no iba a ser fácil, sentíamos que era el único camino correcto, así que nos pusimos manos a la obra.
Dificultades por el camino
Volcamos el corazón en este protocolo y trabajamos duro. Nos topamos con muros, nos desmoralizamos e incluso dejamos de trabajar en él por completo en algunos momentos. Pero siempre nos reagrupamos y probamos nuevos enfoques. Marius merece en particular mucho mérito por sacarnos de un aprieto. Como líder del proyecto, supervisó los comentarios de ingenieros de Vimeo, Google, Yahoo, ZeroMQ y Node.js, y en gran parte decidió qué debía incluirse y qué debía quedar fuera.
Con todas estas dificultades, fue un enorme alivio estar por fin listos para el lanzamiento de la versión tus 1.0. Enseguida vimos un repunte en la participación de la comunidad y en la gente que implementaba el protocolo tus en su lenguaje de programación favorito. Con la v1.0, ya podían confiar en que su componente funcionaría de forma fiable con otros componentes tus durante años. Desde entonces, las mejores implementaciones de la comunidad se han convertido en implementaciones con soporte oficial, alojadas bajo nuestro techo común en https://github.com/tus/. Son bibliotecas que cualquier desarrollador puede integrar sin más en su aplicación para aumentar la velocidad y la fiabilidad de la transmisión.
Ver crecer con el tiempo a la comunidad del protocolo tus ha sido un verdadero placer y, por ejemplo, que Vimeo adoptara el protocolo tus también fue una gran victoria para el proyecto. Su apoyo ha sido nada menos que formidable, tanto en forma de ideas como de contribuciones de código.
Hoy, por tanto, celebramos que también hemos dotado a nuestra propia API de las capacidades de subida reanudable de archivos del protocolo tus. De hecho, optamos por un lanzamiento discreto y fuimos migrando gradualmente a más personas al protocolo tus siempre que pudimos. Unos meses y medio petabyte (o 500 millones de imágenes) después, los usuarios finales de todo el mundo disfrutan de subidas de archivos fiables impulsadas por el protocolo tus sin siquiera notarlo. Las cosas «simplemente funcionan»: incluso las subidas de los videos de gatos más grandes sobreviven a las bajadas al sótano. Y así debe ser: si lo notas, hemos fallado.
Compatibilidad del lado del cliente
Si ya eres cliente de Transloadit, lo más probable es que tu software no hable directamente con nuestra API, sino que uses uno de nuestros SDK. Con un SDK disfrutas de nuestras mejores prácticas desde el primer momento y te ahorras escribir código repetitivo en tu lenguaje de programación. La buena noticia es que muchos de nuestros SDK son compatibles con el protocolo tus. Aquí tienes una lista que se actualiza automáticamente (así que vuelve a consultarla cuando quieras):
| Plataforma | SDK | Soporte para el protocolo tus |
|---|---|---|
| Android | SDK para Android | Sí |
| Navegadores | Navegadores | Sí |
| Convex | Convex | Sí |
| cURL | cURL | No |
| Go | SDK de Go | No |
| Java | SDK de Java | Sí |
| Agentes | Servidor MCP | Sí |
| Navegadores antiguos | Formulario multipart | No |
| Node.js | SDK de Node.js | Sí |
| PHP | SDK de PHP | No |
| Python | SDK de Python | Sí |
| Ruby | SDK de Ruby | No |
| Terraform | Terraform | No aplica |
| iOS & macOS | TransloaditKit | Sí |
| Zapier | Integración con Zapier | Sí |
Si usas uno de los SDK que ya son compatibles con el protocolo tus, ¡estás de suerte! Solo tienes que actualizar a la última versión mayor y las subidas reanudables de archivos quedarán habilitadas de forma predeterminada. En cuanto a nuestros demás SDK, estamos trabajando para desplegar poco a poco la compatibilidad con el protocolo tus en todos ellos, así que mantente atento. Si lees esto como desarrollador y te gustaría participar en el protocolo tus o mejorar nuestros SDK, te invitamos a escribirnos porque nos encantaría hablar de tus ideas de mejora.
Cuando hablamos del lado del cliente o del navegador, merece una mención especial el sólido trabajo de fiabilidad que está haciendo nuestro equipo de Uppy. Además de ser totalmente compatible con el protocolo tus, también ha creado un complemento que te permite reanudar las subidas de archivos tras un fallo del navegador. Estamos orgullosos de decir que ambas cosas son pioneras en el sector.

Los entresijos técnicos 🔩
Esta sección describe nuestra infraestructura en el momento de su publicación en 2017, no nuestra arquitectura de despliegue actual. La tabla de SDK anterior refleja la documentación actual.
La mayor parte del trabajo se dedicó al protocolo en sí y a pulir sus implementaciones junto con la comunidad. Una vez que estuvieron en buen estado, fue bastante sencillo conectar el protocolo tus a nuestro servicio de encoding y subida ya existente.
Ejecutamos un servidor tusd estándar en todas nuestras máquinas
que gestionan subidas, junto con nuestro software de recepción existente.
HAProxy dirige cualquier solicitud apuntada a
/resumable/* a la instancia de tusd que se ejecuta en esa máquina.
Cualquier SDK compatible con el protocolo tus creará una Assembly como de costumbre, pero, en
lugar de subir de inmediato, la Assembly devuelve un endpoint /resumable/ del protocolo tus
que recibe subidas. Al subir a este endpoint de tus, el SDK adjunta la ubicación única de la
Assembly como metadatos. Cada vez que finaliza una subida, se dispara un hook de tusd
que interpreta estos metadatos para encontrar la Assembly e informarle de que una subida
ha terminado. El encoding de este archivo puede empezar ya, aunque otras subidas sigan llegando. El
SDK también revela cuántas subidas debe esperar, de modo que la Assembly sabe cuándo ha
terminado y cuándo debe avisarte con los resultados del encoding.
Para que todo funcione sin problemas, confiamos en el bueno de Upstart (no muy distinto de
cómo lo hacíamos en 2009), así como en
el endpoint /metrics que expone tusd. Ese endpoint contiene las cifras que usa nuestro
autoescalador para lanzar o terminar instancias EC2 a medida que la carga sube o baja. También
enviamos estas métricas a Librato para poder vigilar de cerca la salud de
nuestros procesos y enterarnos de cualquier problema:

Con planes de trasladar buena parte de nuestra infraestructura a Kubernetes,
resulta alentador saber que el endpoint /metrics de tusd ya es compatible con su solución
de monitorización de referencia: Prometheus. Otra cosa que ayudará a
quienes quieran desplegar redes de recepción de contenido de última generación en Kubernetes o en
plataformas similares compatibles con Docker (como Nomad, Swarm, Mesos, etc.), es que estamos
trabajando para publicar una
imagen oficial de Docker de _/tusd. Estamos
valorando si un Kubernetes Operator para ejecutar una red de distribución
y recepción de contenido podría convertirse en un tercer gran proyecto de código abierto
complementario, después del protocolo tus y de Uppy. Contáctanos si quieres
intercambiar ideas al respecto.
Si quieres ejecutar tú mismo servidores del protocolo tus, pero todo este asunto de los contenedores y de gestionar servidores dedicados no es para ti, debes saber que también hay muchas otras implementaciones, por ejemplo para Node.js, Ruby, PHP, Python, etc., que puedes usar junto con tu servidor web actual. Es tan fácil como añadir algo de código a tu aplicación actual. Todas las implementaciones tienen licencia MIT (es decir, libres en todos los sentidos imaginables), así que solo te costará unos minutos de tu tiempo.
En conclusión
Cuando hablamos por primera vez del protocolo tus en 2013, esperábamos o bien fracasar estrepitosamente de inmediato, o bien tener éxito en un año. Resulta que intentar hacer las cosas bien no es necesariamente el camino más corto ni el de menor resistencia.
«Ha tardado mucho en llegar, pero sé que un cambio va a llegar»
— Sam Cooke
Probablemente puedas imaginar lo emocionados que estamos de ver por fin cobrar vida estas inversiones a largo plazo en código abierto, maduradas hasta el punto de ser aptas para producción y de estar listas para usarse no solo en beneficio de nuestros clientes, sino también para redefinir un ecosistema del que apenas somos una pequeña parte.
Gracias por acompañarnos hasta el final, ¡esperamos que te parezca que valió la pena la espera!
Si quieres saber más o ayudarnos a mejorar la subida de archivos para todo el mundo, pásate por tus.io y uppy.io. Como siempre, también son muy bienvenidas tus opiniones a través de nuestra página de soporte o en HN/Reddit.
