Olá! Sou administrador do https://discuss.pixls.us, uma comunidade para fotógrafos que utilizam Software Livre. Temos a sorte de ter nossos custos cobertos por doações da comunidade, mas não sei por quanto tempo isso será sustentável à medida que continuamos a crescer. Levo muito a sério a tarefa de gastar as doações das pessoas e tenho procurado maneiras de reduzir nossos custos.
Como somos criadores de imagens, nosso fórum é extremamente pesado em imagens. Nosso maior custo, de longe, é o custo de banda da Amazon S3 (quase inteiramente banda de saída). Os custos de armazenamento no S3 são bastante mínimos.
Seria benéfico poder carregar essas imagens e outros meios de comunicação via webtorrent, à la PeerTube.
Eu veria esse recurso em duas partes: (1) usuários que visitam o site baixam mídia de outros usuários usando o webtorrent e (2) algum tipo de feed RSS que eu possa assinar em um cliente de torrent para que os usuários possam ser “super seeders” que apenas fornecem banda para o site.
Você realmente deveria usar uma CDN, mesmo que seja apenas o plano gratuito do Cloudflare, na frente dos uploads do S3 para não se afogar em taxas de saída. Se possível, ative o Origin Shield para reduzir ainda mais o tráfego de saída.
Literalmente esperei apenas o @Falco responder (), já que ele fez um ótimo trabalho trazendo o S3 para os padrões do Discourse.
Eu iria para uma opção de clone do S3 mais barata. Os Spaces da Digital Ocean seriam a escolha padrão após o S3 se você tiver muitos dados, talvez optando por players focados em armazenamento maior como BlackBlaze ou Wasabi para reduzir ainda mais os preços.
Fazendo isso, você removerá a maior parte do custo de banda, pois são avaliados como muito mais baratos (o Wasabi não cobra por isso).
Além disso, apenas para aumentar o desempenho, eu adicionaria uma CDN. Acabei de pesquisar uma CDN barata, já que minha comunidade é pouco lucrativa via AdSense, e descobri que o BunnyCDN não é o mais rápido, mas cumpre o trabalho e é rápido de configurar.
Tenho quase certeza de que isso custaria mais do que qualquer outra coisa. Você precisaria configurar uma rede P2P usando o servidor Discourse (ou um seedbox) como fonte da verdade ou principal seed para todas as mídias.
Esse seedbox precisaria ter recursos suficientes para lidar com uma nova conexão aberta a cada solicitação, já que cada arquivo de mídia seria um arquivo torrent diferente. Sei que o WebRTC é bastante bom e eficiente, mas abrir uma conexão geralmente é a parte mais exigente em termos de recursos de uma aplicação web.
A menos que esteja passando algo despercebido, essa seria uma configuração nada trivial e bastante exigente em recursos para comunidades realmente ativas.
Os torrents possuem um arquivo seed, então, se o arquivo não estiver disponível no swarm, ele é carregado de outra fonte, como o S3.
O aplicativo Discourse apenas fornece o link do torrent/magnet; ele não faz o seeding. Os usuários que já têm as imagens carregadas as fazem de seed, e, adicionalmente, se os ativos de mídia também estiverem sendo seedados por clientes BitTorrent tradicionais, esses podem ser utilizados. O cliente torrent é executado no lado do navegador/cliente, então a carga no servidor se resume apenas a fornecer mais JavaScript.
Você poderia adicionar um aviso para os usuários? Por exemplo, se eu acessar sua página pelo meu celular em uma conexão com limite de dados, como posso evitar que minha conexão limitada tenha toda a minha banda consumida porque o post se tornou viral?
Você continua usando o S3 como a principal fonte para carregar os arquivos, o que não economizaria muito dinheiro para você.
Você ainda precisa ter sementeiros atendendo às conexões; você precisa de sementeiros não confiáveis por causa das diferentes velocidades de internet.
Claro, basta adicionar um botão de alternância em um diálogo, ou torná-lo parte das preferências, ou usar algo como o Privacy Badger para impedir que essa biblioteca seja carregada. Ou detectar se o navegador é móvel e desativá-la completamente. Existem várias opções.
Funciona de certa forma como um cache. Se a mídia não estiver sendo semeada, ele busca na fonte da web (S3, no nosso caso). No entanto, como o WebTorrent também pode buscar em clientes de torrent tradicionais, como Transmission, rTorrent, etc., podemos ter alguns semeadores (como eu) que apenas semeiam uma grande quantidade de coisas na minha conexão doméstica. Você realmente precisa apenas de um punhado de semeadores para tornar isso viável.
De fato, mas resolveríamos esse problema como uma comunidade.
Agora não é impossível, você apenas complicou a funcionalidade a um nível que quase nenhuma outra funcionalidade possui. Como a equipe do Discourse simplesmente abandonou o suporte ao IE11 por causa da dor de cabeça que isso significava na manutenção do código. Imagine esse tipo de lógica; talvez, se você for para Marketplace, alguém se interesse.
Não vejo realmente nenhuma vantagem em tê-la no núcleo, e já solicitei a adição de muitas coisas ao núcleo que são muito mais fáceis de implementar.
O que foi negado corretamente, com uma explicação clara e lógica (sem reclamações aqui).
Pessoalmente, eu não usaria nem teria qualquer interesse em fazê-la funcionar. É mais fácil, mais confiável e mais barato colocar um CDN na frente e esquecer o assunto.