February 13th, 2024
New
Improved

The infrastructure update! Oh boy, this one is a doozy, and really should never really should have happened, but in short, we ended up moving to our own infrastructure on our own servers, with our own API's and all new methods for downloads. There were a lot of reasons why we did this, lets start with those first:
Pricing. To keep TorBox affordable and low price as it is, we have to make sure that we are not spending over our margins, and with our previous solution, GoFile.io, that was not possible. Don't get me wrong, GoFile is extremely cheap at $3/tb, and $2/tb in egress, but unfortunately, not cheap enough for TorBox to be able to sustain itself. With the new infrastructure, we can get infinite egress at no charge, and less than $3/tb, which is already a big deal. TorBox users download over 8tb+ a day from our servers, so we have to make sure that we can handle all of that moving data.
Control. Control over your own storage and the flexibility it gives you is very powerful. We decided to move away because we were tied down to their limited API, as well as no control over how files are served in the slightest.
Processing times, and unreliability. To be able to get the files available for download, they had to be transferred to GoFile's servers. This at times could take quite a long time or even straight up fail. This was completely unacceptable, and we dealt with it for awhile, but GoFile never really completely fixed the issue. They did help us out and made some crucial fixes that made it more manageable, but still never got completely fixed. This was one of our user's largest gripes while using GoFile.
Zipped downloads. GoFile promised us a zipped downloads feature, but never actually delivered on that promise. They had it available, in beta, and to only premium users on their site. As zipped downloads are extremely important on the TorBox platform, this left many users and large torrents practically inaccessible.
Integrations. With the GoFile downloads, we could never be able to create the integrations we wanted, such as WebDAV, as it would make it nearly impossible due to their lackluster API.
When GoFile was determined to not be usable anymore, we decided to prop up our own infrastructure and start from scratch. This was not an easy or simple journey, and took all the way up to today, this post to get right. Let me take you through what we tried, and the solution we eventually landed on.
We started by trying out SeaweedFS. This was what we were looking for. A distributed file system, accessible over any machine in the cluster, and had an S3 gateway that allowed us to easily integrate with little effort. This started out great, we got our servers all set up, and got everything going, and at the beginning, things were okay, but didn't really solve all of our problems, and also introduced more. It was definitely cheaper, we had more control, and allowed us to do zipped downloads and integrations, but processing times still were atrocious and unreliable. It also introduced a speed bottleneck. Each server can only handle 1gbit, but the way SeaweedFS is set up, you can't decide where downloads are routed through, so all downloads actually got sent through one heavily speed limited server which was a huge issue and lead to downloads being slow, like 200kbps slow. You can view the issue we made here about our issue.
Then we tried out Ceph. Everyone who has dealt with distributed storage knows Ceph. It is a pain to setup and was the main reason we didn't use it. At this point we knew exactly what we wanted. We wanted Hot+Cold storage, instant transfer from torrents stored on the local system to the storage system, and an easy setup. Ceph only solved one of those issues. So we moved on.
Then we tried out GarageFS. Again, didn't solve our issues. There was no way to transfer data from the local system to the storage system, without going through the network. They also have no way to do Hot+Cold storage.
Then we tried out Minio. Again, didn't solve the local storage issue.
Finally, we tried out Rclone. This solved the issue of local storage issue, as we could use raw files as the storage system thanks to Alias. We were able to make a unified filesystem using all the servers using Union, and serving that over S3, we could route downloads properly. We were also able to implement hot and cold servers based off of remotes and only transferring new torrents to hot servers, all in the background, which also eliminated processing times, and made things really easy to setup over the command line, using a single bash script. We ran into a few issues though:
The S3 gateway was impossible to secure down, meaning that for a period of time you could clone the entire TorBox cache and it was publicly available. This was a huge problem. You can read more about the issue here.
Given the issues we had with hosting S3 over Rclone, we decided to try out something called S3Proxy. The problem here was that presigned requests simply didn't work which is how we gave out download links. There were also issues with authorization not working either, exposing the entire TorBox Cache. You can read more about that issue here.
Downloads were unstable. They would crash half way through, couldn't be resumed, and you could not use Multi-connection downloads like you could before.
So we ended up writing another API specifically for the storage, which basically allows us to solve all of the issues we were facing. The TorBox cache is now completely private, download links are clean and simple to use. Errors are intuitive and have a nice page for users to look at. Downloads can be resumed, you can use up to 16 connections, zips are very easy to use, and no buffering slowdowns either. We did deal with some issues regarding speeds, but for now, they are adequate. We have been making optimizations (thanks to our control over the entire system) and speeds have been climbing. Right now you can expect to hit around 60-70MB/s, but we are trying to get closer to the theoretical maximum which is about 110MB/s. There are so many optimizations we are trying and testing, so I am confident we can get there. Anyways, that is the story of why there have been no updates in forever. We have been dealing with storage, to give our users the best experience possible.
Now onto the actual change log:
Updated main page speedtest to download the test files.
Available is a 100MB file, 1GB file, and 10GB file. These are in bin format, but are just 0's. The .bin is there so the file can actually be downloaded by our backend.
Updated main page to remove anything about GoFile.io
Adds a pricing button to the header. Eventually we will have a dedicated pricing page for this to lead to.
Adds our infrastructure status link to the footer. This leads to hetrix.torbox.app which is our status page for all of our servers so you can see what each server is doing in real-time.
Adds an announcement panel where general, warnings, errors, and service breaking issues are shown. We added this due to the recent small issues we have been getting on our site, and users contacting us about it, even though we announced it in the Discord server. This solution allows all users, just not members of the Discord to see issues about TorBox.
The different colors give indication how severe the issue is.
Green Border means it is simply an announcement. Things such as discounts, promotions and general announcements will have this border. Easily ignorable.
Yellow Border means it is a warning error. If something is acting flaky, or we are investigating a possible issue, or the issue isn't too big of a deal, it will have this border.
Red Border means there is an error with the site, maybe downloads are down, or a specific part of the site is broken, but won't effect the whole experience, but only some parts of TorBox.
Red Background or a fully red box means that there is a service breaking error, TorBox is down for some reason, or something else that is a very important announcement.
Switched storage to in house.
Unfortunately this meant that all previous torrents were wiped completely and all user's started fresh. There was a vote in our Discord server over to transfer or wipe the storage, and at a vote of 17-2, it was decided to wipe the storage completely and start from scratch.
This also meant that for about a week, downloads were unreliable, failing, slow, or zips were broken.
For the most part, these issues have been resolved, which is why we are comfortable releasing this as a version.
Downloads are still not as fast as we would like, maxing out in most cases around 30-70MB/s. This is quite far from our goal of 110MB/s as described above. We are constantly making improvements to reach that goal.
Download URLs and zip URLs look a little different now. Downloads are done at storage.torbox.app/dld/<presigned_key>?token=<api_token> and zips are done at storage.torbox.app/zip/<presigned_key>?token=<api_token>.
Remember to not share your download URLs publicly! They have your API key in them, which is required to download, as well is matched to the presigned token, so only the user which has the presigned token attached to their account can download the torrent. If you share this token, people can access your account, your torrents, and more! Don't let that happen!
Download URLs are still only valid for one hour. This means that you have 1 hour to start the download until it expires. No, it won't cut your download short after that 1 hour, as long as you started it before that 1 hour. If you are downloading the file, then you don't have to worry about it. If you want to pause and come back, make sure you do it within that hour, or else that progress will be gone forever and you will have to restart the download.
Downloads are now multi-connection and resumable. This allows you to download super-fast using up to 16 connections to the server!
This 16 limit is per IP, not per download. If you have 2 downloads using up 8 connections each, you are at your limit. If you try to force 4 downloads using 6 connections each, the last download will never start, and the 3rd one will be limited to 4 connections.
This limit also counts for single downloads. If you try to have more than 16 downloads at a time, the server will block any downloads afterwards until you have under or are at 16 connections.
Zips count for only 1 connections.
Resuming is now possible. Maybe you have a spotty connection, and the download gets paused, you can resume within an hour to continue the download from the progress it was at before.
Zips are not multi-connection. Zips are also not resumable, don't try to pause them, it will fail. These are due to technical reasons, as we zips torrents on the fly.
If you get an error on the download page, it will give you a nice readable error and the error page you know so well.
Fixed Google Drive and OneDrive download errors. These should work fine now.
We know this might not have been the update you were expecting, we were planning on other things too, but our operating expenses were getting too high, and we needed a new solution ASAP. We are resuming adding awesome new features.
NOTE: We are aware of the issue with mismatching file sizes. We are investigating the issue. Keep up to date by joining our Discord server. For now, the issue can be solved by simply waiting for the file to figure itself out. Depending on the size, this could take awhile, which is an issue. We are investigating. Thank you for your patience.