Usa WebTorrent para cargar objetos multimedia

¡Hola! Soy administrador en https://discuss.pixls.us, una comunidad para fotógrafos que utilizan Software Libre. Tenemos la suerte de que nuestros costos estén cubiertos por donaciones de la comunidad, pero no sé cuánto tiempo será sostenible a medida que sigamos creciendo. Además, tomo muy en serio mi responsabilidad de gestionar las donaciones de las personas y he estado buscando formas de reducir nuestros gastos.

Dado que somos creadores de imágenes, nuestro foro es extremadamente pesado en cuanto a imágenes. Nuestro mayor costo, por mucho, es el ancho de banda de Amazon S3 (casi en su totalidad ancho de banda de salida). Los costos de almacenamiento en S3 son bastante mínimos.

Sería beneficioso poder cargar esas imágenes y otros medios a través de webtorrent, al estilo de PeerTube.

Vería esta función en dos aspectos: (1) los usuarios que visitan el sitio descargan medios de otros usuarios utilizando webtorrent y (2) algún tipo de fuente RSS a la que pueda suscribirme en un cliente de torrent para que los usuarios puedan ser “super semilleros” que simplemente proporcionen ancho de banda al sitio.

1 me gusta

¡Estás usando S3 sin una CDN :scream::scream::scream:!

Realmente deberías implementar una CDN, incluso solo el plan gratuito de Cloudflare, para proteger las subidas a S3 y no ahogarte en tarifas de salida. Si es posible, habilita Origin Shield para reducir aún más el tráfico de salida.

Consulta Uso de almacenamiento de objetos para subidas (clones de S3).

5 Me gusta

Literalmente solo esperé a que @Falco respondiera (:sweat_smile:), ya que ha hecho un gran trabajo llevando S3 al estándar de Discourse.

Yo iría por una opción de clon de S3 más económica. Digital Ocean Spaces sería la opción por defecto después de S3 si tienes muchos datos; quizás optando por proveedores de almacenamiento más grandes como BlackBlaze o Wasabi para reducir aún más los precios.

Hacer esto eliminará la mayor parte del costo de ancho de banda, ya que se facturan a precios mucho más bajos (Wasabi no cobra por ello).

Además, solo para mejorar el rendimiento, añadiría una CDN. Acabo de buscar una CDN económica, ya que mi comunidad apenas es rentable a través de AdSense, y descubrí que BunnyCDN no es la más rápida, pero cumple su función y es rápida de configurar.

Enlace de referencia de BunnyCDN :see_no_evil:

Con esta configuración reducirías mucho la facturación. Ya sea simplemente poniendo la CDN frente a AWS S3 o usando otro proveedor de S3 + CDN.

Creo que @paperdigits tiene la cantidad exacta de tráfico de salida mensual en la factura de AWS, por lo que podemos usarla para calcular el costo del CDN.

Yo me quedaría con S3 y simplemente añadiría un CDN al principio.

6 Me gusta

Gracias, investigaré sobre el CDN.

WebTorrent no nos costaría nada, aunque :wink:

Casi estoy seguro de que te costaría más que cualquier otra cosa. Necesitarías configurar una red P2P utilizando el servidor de Discourse (o un seedbox) como fuente de verdad o principal sembrador para todos los medios.

Ese seedbox necesitaría tener recursos suficientes para manejar una nueva conexión abierta por cada solicitud, ya que cada archivo multimedia sería un archivo torrent diferente. Sé que WebRTC es bastante bueno y eficiente, pero abrir una conexión suele ser la parte que más recursos consume en una aplicación web.

A menos que esté pasando por alto algo, esto sería una configuración nada trivial y muy intensiva en recursos para comunidades realmente activas.

3 Me gusta

Los torrents tienen una semilla de archivo, por lo que si el archivo no está disponible en el grupo, se carga desde otra fuente, por ejemplo, S3.

La aplicación de Discourse solo proporciona el enlace torrent/magnet; no realiza la siembra. Los usuarios que ya tienen las imágenes cargadas las siembran, y adicionalmente, si los activos multimedia también se están sembrando mediante clientes BitTorrent tradicionales, estos también pueden utilizarse. El cliente torrent se ejecuta en el navegador/cliente, por lo que la carga en el servidor se limita a servir más JavaScript.

¿Añadirías un descargo de responsabilidad para los usuarios? Por ejemplo, si entro a tu página desde mi teléfono móvil con una conexión limitada, ¿cómo puedo evitar que mi conexión limitada consuma todo mi ancho de banda porque la publicación se ha vuelto viral?

Sigue utilizando S3 como la fuente principal para cargar los archivos, lo cual no te ahorraría realmente mucho dinero.

Aún necesitas tener semilleros (seeders) que atiendan las conexiones; necesitas semilleros poco fiables debido a las diferentes velocidades de internet.

Claro, simplemente puedes añadir un interruptor en un cuadro de diálogo, integrarlo en las preferencias o usar algo como Privacy Badger para evitar que esa biblioteca se cargue incluso. O bien, detectar si el navegador es móvil y desactivarlo por completo. Hay varias opciones.

Funciona de manera similar a una caché. Si los archivos multimedia no están siendo compartidos (seeded), se obtienen desde la fuente web (S3 en nuestro caso). Sin embargo, como WebTorrent también puede extraer datos de clientes torrent tradicionales como Transmission, rtorrent, etc., podemos tener algunos seeders (como yo) que compartan una gran cantidad de contenido desde mi conexión doméstica. Realmente solo necesitas un puñado de seeders para que esto sea viable.

Efectivamente, pero resolveríamos ese problema como comunidad.

Ahora no es imposible, solo has complicado la función hasta un nivel que casi ninguna función tiene. Como el equipo de Discourse, que acaba de dejar de admitir IE11 debido al dolor de cabeza que significaba mantener el código. Imagina este tipo de lógica; quizás si vas a Marketplace alguien se anime.

Realmente no veo ninguna ventaja en tenerlo en el núcleo, y he solicitado que se agreguen muchas cosas al núcleo que son mucho más fáciles de realizar.

Las cuales han sido denegadas correctamente y con una explicación clara y lógica (sin quejas aquí).

Personalmente, no lo usaría ni tendría ningún interés en hacerlo funcionar; es más fácil, más confiable y más barato colocar un CDN delante y olvidarse del problema.

Tampoco el plan básico de Cloudflare :wink: