Why Medium-Sized Mastodon Instances Make Most Sense as of Today
For a couple of months I am running my own Mastodon instance now. It's a tiny instance with currently only two active accounts.
Mastodon is well-built and very stable so far, I never had any bigger problems running it. I also highly appreciate that it's part of the decentralized Fediverse and above all that it's open source. The transparency which comes from open source is highly necessary nowadays with integrated trackers and other surveillance 'features' becoming more and more the 'standard way' of developing software. Recently some very questionable decisions have been made by the responsible developers like e.g. making mastodon.social the default instance in their app or that you are not allowed to use the term 'Mastodon' or anything similar in the domain name of a Mastodon instance anymore without written permission, where I am never really sure if these decisions are taken with the good of the project in mind or just for the ego of the ones who came up with the idea, but in general they're doing a good job.
Still I am thinking about giving up my own Mastodon instance and moving my account to a medium-sized one.
Things to consider when self-hosting Mastodon
With running an instance in a decentralized social network some responsibilities come along: The service has to run stable with a good availability, moderation work might have to be carried out, depending on the country some legal things have to be considered and so on. But the more important point for me is:
Mastodon is heavy-weight and resource hungry.
In the backend it comes with a standard Postgres database, a Redis cache , Puma as webserver and Sidekiq for processing asynchronous tasks. This lineup works very stable, but it costs quite a lot of compute power and memory. If you want to make the posts on your instance full-text searchable, you even have to run your own Elasticsearch cluster (optional).
This would all be ok for me, the main pain point lies in something else: If you create a Mastodon instance for yourself as only user, initially the instance is isolated, means as long as you are not following anyone, you won't see any content. This is kind of suboptimal for a social network, but it's how this decentralized network works. Only when you start following people, then you receive their posts, boosts and so on. If you search on your instance, it will only show matches on your own instance. There is no global index of all people, posts or hashtags and the query is also not forwarded to any other instance.
So what to do to find content and/or interesting people to follow?
Three commons ways are:
- Go on the public webpage of one of the large instances and use the local search there. If it drops interesting people, follow them so their content gets replicated to your own instance. This approach is working quite well, apart from being a bit cumbersome and hard to explain to people who are used to the centralized 'birdcage' approach.
- Attract people to sign up to your instance so that it grows larger, because with more people on the instance there is more content too naturally, because all content of people which are followed by local accounts is replicated to the instance. Growing larger might not be wanted if you e.g. run a private single user instance and want to avoid moderation or if you don't want to spend the money for the necessary server resources and want to keep things small.
- Connect to relays. Relays are servers which just replicate content between all connected Mastodon instances, basically like a network-hub. If you connect with a couple of the bigger relays like https://rel.re, you get a lot of content and the federated timeline of your instance fills up quickly.
This problem exists also in the other direction: Posting content on your own Mastodon instance is somehow pointless when no one is reading it. This means, if you want others to find your posts because you don't have a large amount of followers, you basically have to connect to relays so that other people can find your posts by searching on their instances e.g. for corresponding hashtags.
Ok, so let's just connect to a bunch of relays, where's the point?
The point is: Depending on the amount of relays and their sizes, gigabytes of stuff is being replicated to your instance of which you might not be interested in maybe 99,99%. I was running my instance a while being connected to a handful of relays and with a rather strict content retention policy of only 7 days the used storage was always around 90 GiB.
Dude, but why is this a problem? It's only storage. Just use an S3 bucket and you're good.
Almost. The problem is:
- Object storage and especially access to it costs money. When I was running my instance backed by an AWS S3 bucket I had a monthly bill of around $10 just for that bucket, mainly not because of the used S3 storage but because of the API requests. And the server costs add to that. This might not sound like much, but considering that most of the objects are deleted unseen after a short period, I find it too much. There are cheaper alternatives to AWS S3 around though.
- Resources like electricity, servers, bandwidth and so on are not for free or endlessly available, also not in the first world, although it's a common illusion here. Not everything which is possible should reasonably be done. Developers, administrators and everyone else have the responsibility to care for our planet and the limited resources on it, and transmitting gigabytes of data just to throw them away the other day is simply not reasonable, especially considering there are thousands of Mastodon instances connected to the network.
I see, so better all sign up on the large instances to save resources?
No. Large nodes are not the intention of a decentralized network. They come with all the issues all centralized services suffer from like
- If the instance goes down, a large number of people is affected.
- The power is more centralized: If the moderators of a large instance decide to defederate from your instance, then all users on that large instance are cut from you and vice versa. This might be legitimate in some case but also opens the doors for all kinds of censorship.
- They are much more interesting for hackers, spammers (like we recently saw several times on mastodon.social), DDoS attacks and so on than smaller instances.
Do yourself and the Fediverse a favor and don't sign up on one of the large instances, especially not on mastodon.social which is heavily overcrowded. Give smaller instances a chance and also consider donating to their administrators. Spreading out makes the network resistant to all kinds of attacks, including ego attacks of individuals. We don't need another Twitter, do we?
As of today
- Running a tiny Mastodon instance doesn't make much sense because of the high resource demands (and the resulting costs) not only by the backend components used by Mastodon itself, but also because of the de facto need to connect to relays which leads to large amounts of content being replicated and thrown away after a short period of time which is a wasting we shouldn't accept.
- Joining one of the large instances is no option either, because concentrating on only a handful instances is problematic and against the intention of the Fediverse being a decentralized network.
The way to go is to join a medium-sized instance e.g. with a topic of interest or which is focussed on a certain region. This has the advantage that the centralization effects are weaker and more interesting content is being generated and read locally and the overhead of connecting to relays is not necessary. Interesting instances can be found on specialized sites like https://fedi.garden/ or the official https://joinmastodon.org/servers.
Or as an alternative simply try hosting one of the other applications of the Fediverse. It doesn't always have to be Mastodon.