Ciao! Sono un amministratore di https://discuss.pixls.us, una community per fotografi che utilizzano software libero. Abbiamo la fortuna di avere le spese coperte dalle donazioni della community, ma non sono sicuro di quanto questo possa essere sostenibile man mano che continuiamo a crescere. Prendo molto sul serio il compito di gestire le donazioni delle persone e ho cercato di trovare modi per ridurre i nostri costi.
Poiché siamo creatori di immagini, il nostro forum è estremamente ricco di immagini. Il nostro costo maggiore di gran lunga è quello della banda Amazon S3 (quasi interamente banda in uscita). I costi di archiviazione S3 sono invece molto contenuti.
Sarebbe molto utile poter caricare queste immagini e altri media tramite webtorrent, alla maniera di PeerTube.
Vedo questa funzionalità in due modi: (1) gli utenti che visitano il sito scaricano i media dagli altri utenti utilizzando webtorrent e (2) una sorta di feed RSS a cui posso iscrivermi in un client torrent, in modo che gli utenti possano diventare “super seeder” fornendo semplicemente banda al sito.
Dovresti davvero mettere una CDN, anche solo del piano gratuito di Cloudflare, a fronte dei caricamenti su S3 per non affogare nelle tariffe di egress. Se possibile, abilita Origin Shield per ridurre ulteriormente il traffico in uscita.
Letteralmente ho solo aspettato che @Falco rispondesse (), dato che ha fatto un ottimo lavoro nel portare S3 agli standard di Discourse.
Consiglierei di passare a un’opzione di clone S3 più economica. Digital Ocean Spaces sarebbe la scelta di default dopo S3 se hai molti dati; in alternativa, potresti valutare provider specializzati in storage come BlackBlaze o Wasabi per ridurre ulteriormente i costi.
Facendo questo, elimineresti la maggior parte dei costi di banda, poiché sono valutati molto più bassi (Wasabi non applica costi per la banda).
Inoltre, solo per migliorare le prestazioni, aggiungerei una CDN. Ho appena cercato una CDN economica, dato che la mia community è a malapena redditizia tramite AdSense, e ho scoperto che BunnyCDN non è la più veloce, ma fa il suo dovere ed è rapida da configurare.
Con questa configurazione ridurrai notevolmente la fatturazione. Puoi semplicemente posizionare la CDN davanti ad AWS S3 o utilizzare un altro provider S3 + CDN.
Credo che @paperdigits abbia l’importo esatto del traffico in uscita mensile dalla fattura di AWS, quindi possiamo usarlo per calcolare il costo del CDN.
Consiglierei di rimanere su S3 e aggiungere semplicemente un CDN all’inizio.
Sono quasi certo che ti costerebbe più di qualsiasi cosa: dovresti configurare una rete P2P utilizzando il server Discourse (o un seedbox) come fonte di verità o seeder principale per tutti i media.
Questo seedbox dovrebbe avere risorse sufficienti per gestire una nuova connessione aperta per ogni richiesta, poiché ogni file multimediale sarebbe un diverso file torrent. So che WebRTC è molto buono ed efficiente, ma aprire una connessione è solitamente la parte più dispendiosa in termini di risorse di un’applicazione web.
A meno che non mi stia perdendo qualcosa, questa sarebbe una configurazione non banale e molto dispendiosa in termini di risorse per comunità davvero attive.
I torrent hanno un file seed, quindi se il file non è disponibile dallo swarm, viene caricato da un’altra fonte, ad esempio S3.
L’applicazione Discourse fornisce solo il link torrent/magnet e non effettua il seeding. Gli utenti che hanno già caricato le immagini le fanno da seed e, se le risorse multimediali vengono seedate anche da client BitTorrent tradizionali, possono essere utilizzati anche quelli. Il client torrent è lato browser/client, quindi il carico sul server si limita a fornire più JavaScript.
Aggiungeresti un disclaimer per gli utenti? Ad esempio, se accedo alla tua pagina dal mio telefono con una connessione a consumo, come posso evitare che la mia connessione limitata venga esaurita perché il post è diventato virale?
Continui a utilizzare S3 come fonte principale per caricare i file, il che non ti farebbe risparmiare molto denaro.
Hai comunque bisogno di seeders che gestiscano le connessioni; ti servono seeders inaffidabili a causa delle diverse velocità di connessione Internet.
Certo, basta aggiungere un interruttore in una finestra di dialogo, oppure integrarlo nelle preferenze, oppure utilizzare qualcosa come Privacy Badger per impedire il caricamento di quella libreria. Oppure rilevare se il browser è su dispositivo mobile e disabilitarlo completamente. Ci sono diverse opzioni.
Funziona in una certa misura come una cache. Se i media non vengono seminati, vengono recuperati dalla fonte web (S3 nel nostro caso). Tuttavia, poiché WebTorrent può anche recuperare dati da client torrent tradizionali come Transmission, rtorrent, ecc., possiamo avere alcuni seeders (come me) che seminano un sacco di contenuti sulla mia connessione domestica. In realtà bastano solo una manciata di seeders per rendere tutto ciò fattibile.
Esatto, ma risolveremmo quel problema come comunità.
Non è impossibile, hai solo complicato la funzionalità a un livello che quasi nessuna funzionalità ha. Come il team di Discourse che ha appena abbandonato il supporto per IE11 a causa del mal di testa che comportava mantenere il codice. Immagina una logica del genere, forse se vai su Marketplace qualcuno potrebbe prenderla in considerazione.
Non vedo davvero alcun vantaggio nell’avere questa funzionalità nel core e ho chiesto di aggiungere al core molte cose che sono molto più semplici da realizzare.
Che sono state giustamente negate con una spiegazione chiara e logica (nessuna lamentela da parte mia).
Personalmente non la userei né avrei alcun interesse a farla funzionare; è più facile, più affidabile e più economico mettere un CDN davanti e dimenticarsene.