안녕하세요! 저는 https://discuss.pixls.us 의 관리자입니다. 이 사이트는 자유 소프트웨어를 사용하는 사진가들의 커뮤니티입니다. 다행히도 커뮤니티 기부를 통해 비용을 충당하고 있지만, 커뮤니티가 계속 성장하는 상황에서 이 방식이 얼마나 지속 가능할지 확신이 서지 않습니다. 또한 저는 기부금 사용에 대해 매우 엄격하게 생각하고 있으며, 비용을 절감할 방법을 고민해 왔습니다.
우리는 이미지를 다루는 커뮤니티이기 때문에 포럼에 이미지가 매우 많이 올라갑니다. 가장 큰 비용 항목은 단연 Amazon S3 대역폭 비용(거의 대부분이 출역 대역폭)입니다. S3 저장 비용은 상대적으로 매우 적습니다.
peerTube처럼 webtorrent를 통해 이미지와 기타 미디어를 로드할 수 있다면 큰 도움이 될 것입니다.
저는 이 기능을 두 가지로 보고 있습니다. (1) 사이트를 방문하는 사용자가 webtorrent를 통해 다른 사용자의 미디어를 다운로드하고, (2) 사용자가 토렌트 클라이언트로 구독할 수 있는 일종의 RSS 피드를 제공하여, 사용자가 단순히 사이트의 대역폭을 제공하는 "슈퍼 시더"가 될 수 있도록 하는 것입니다.
솔직히 @Falco 님이 답글을 달길 기다리고 있었어요 () S3를 Discourse 표준에 맞게 잘 설정해 주셨거든요.
더 저렴한 S3 호환 서비스로 전환하는 걸 추천합니다. 대량의 데이터가 있다면 S3 다음으로 Digital Ocean Spaces가 사실상 표준처럼 많이 쓰이지만, BlackBlaze나 Wasabi처럼 대용량 스토리지에 특화된 업체를 선택하면 비용을 더 줄일 수 있습니다.
이렇게 하면 대다수의 대역폭 비용을 절감할 수 있습니다. 대역폭 요금이 훨씬 저렴하거나(예: Wasabi는 대역폭 요금을 부과하지 않음) 아예 없거든요.
또한 성능 향상을 위해 CDN을 추가하는 것도 좋습니다. 제 커뮤니티는 AdSense 수익이 거의 없기에 저렴한 CDN을 검색해 봤는데, BunnyCDN은 가장 빠른 것은 아니지만 목적을 달성하기에 충분하고 설정도 빠릅니다.
거의 확실한 것은, 그것이 당신에게 무엇보다 더 큰 비용을 들이게 될 것이라는 점입니다. 모든 미디어에 대해 Discourse 서버(또는 시드박스)를 신뢰의 원천 또는 메인 시더로 사용하는 P2P 네트워크를 구축해야 합니다.
각 미디어 파일이 서로 다른 토런트 파일이므로, 각 요청마다 새로 열리는 하나의 연결을 처리할 수 있도록 해당 시드박스는 충분한 리소스를 갖추어야 합니다. WebRTC가 꽤 좋고 효율적이라는 것은 알지만, 연결을 여는 과정은 일반적으로 웹 애플리케이션에서 가장 리소스를 많이 차지하는 부분입니다.
제가 무언가를 놓치고 있지 않다면, 이것은 매우 활동적인 커뮤니티에게는 결코 쉽지 않고 리소스가 많이 필요한 설정이 될 것입니다.
토렌트에는 파일 시드가 있으므로, 스웜에서 파일을 사용할 수 없는 경우 s3와 같은 다른 소스에서 로드됩니다.
discourse 애플리케이션은 토렌트/마그넷 링크만 서빙할 뿐, 시딩은 하지 않습니다. 이미 이미지가 로드된 사용자들은 이를 시드하며, 미디어 자산이 전통적인 비트토렌트 클라이언트에 의해 시딩되고 있다면 그것들도 사용할 수 있습니다. 토렌트 클라이언트는 브라우저/클라이언트 측에 있으므로, 서버에 가해지는 부하는 단순히 더 많은 자바스크립트를 서빙하는 것뿐입니다.
물론이죠. 대화 상자에 토글 스위치를 추가하거나, 설정 항목의 일부로 만들거나, Privacy Badger 같은 도구를 사용해 해당 라이브러리가 로드되지 않도록 막을 수도 있습니다. 아니면 브라우저가 모바일인지 감지해서 아예 기능을 비활성화하는 방법도 있습니다. 선택지가 꽤 많아요.
이것은 일종의 캐시처럼 작동합니다. 미디어가 시딩되지 않으면 웹 소스(우리의 경우 S3)에서 가져옵니다. 그러나 웹 토렌트는 Transmission, rtorrent와 같은 전통적인 토렌트 클라이언트에서도 데이터를 가져올 수 있으므로, 저처럼 가정용 인터넷 연결로 대량의 데이터를 시딩하는 시더 몇 명만 있으면 됩니다. 이 방식이 현실적으로 작동하려면 시더가 몇 명만 있으면 충분합니다.
지금 불가능한 것은 아닙니다. 다만, 이 기능을 거의 어떤 기능도 아닌 수준으로 복잡하게 만들었죠. Discourse 팀이 코드를 유지보수하는 데 따른 부담 때문에 IE11 지원을 중단한 것처럼 말입니다. 이런 종류의 로직이라면, 아마 #marketplace에 가면 누군가가 이를 시도할 수도 있을 겁니다.
코어에 이 기능을 포함시키는 데는 장점을 거의看不到라고 봅니다. 코어에 추가해 달라고 요청한 것들이 훨씬 더 쉽게 구현 가능한 것들이었음에도 불구하고요.
당연히 거절되었고, 명확하고 논리적인 설명이 함께 있었습니다(여기서 불평하는 것은 아닙니다).
개인적으로는 이 기능을 사용하지도 않을 것이며, 작동하도록 만드는 데도 어떤 흥미도 없습니다. CDN을 앞에 두고 잊어버리는 것이 더 쉽고, 더 안정적이며, 더 저렴하기 때문입니다.