Show newer

Mastodon doesn't fork off a new process or spawn a new thread for every request, but it's darn close to it.

How did the web evolve past this scalability challenge? It didn't necessarily involve buying a faster computer. The developers of the venerable `nginx` web server famously struck first blood when they cracked what they called the "c10k" problem for the first time. (handling 10 thousand simultaneous connections to the same server application).

This happened in the early 2000s, and the nginx server in question was consuming only about 2.5MB of RAM during the load test.

This style of client and server application has its roots in things like `inetd` (internet daemon) and CGI (common gateway interface). Benno Rice explains in a section of his excellent presentation covering the history of linux and unix:

video.strongthany.cc/watch?v=o

> [Then things changed...] the internet happened. That inetd model was great when [you were dealing with a small amount of stuff going on], like, [only a few users would have telnet connections] ...The web looked like it would work that way too, and then it became really really popular. And so you end up with situations where forking off a process to handle every single connection doesn't really scale that well.

Many Mastodon server users and admins have mentioned that the load from all the new users is causing a strain on the system -- large outbound queues, delays on messages, slow page load times, etc.

The good news is that these problems don't have to be solved by buying a more powerful computer.

The Mastodon software uses an old (circa 90s and earlier) way of organizing its code, which I like to call "one-thread-per-request with blocking IO"

One of them is GoToSocial, which I see as a dark horse poised to surpass Mastodon and become the best general purpose Fediverse server implementation.

nlnet.nl/project/GoToSocial/

Congrats to everyone who has worked incredibly hard to make that project a reality!

Show thread

Look at all the cool projects that NLNet is funding right now !!! 😮​

nlnet.nl/project/current.html

Forest boosted

Can I get some voluntary load testing from #fediverse users lol, please boost/interact with this post.

Forest boosted

You know what, I'm realizing that maybe the correct implementation for a fedi client has **a freakin <em>URL BAR</em>** at the top o' the page like its its own browser

I created an account for my dogs to try out pixelfed: @fedipugs

So far its been a bit rough (no video support, hyperlinks get broken 🪦)

But if you like cute pet pictures maybe it could be worth a follow, I'll try to post when I can and occasionally maybe repost older stuff from the instagram that my partner made in the past.

```
Updating crates.io index
Fetch [===================> ] 82.56%, (163401/213323) resolving deltas
```

Show thread

Ok, tinygo is definitely not stable enough for this, moving on to trying rust instead docs.rs/age/latest/age/ 👀

Show thread

Streaming again, getting to work on running FiloSottile/age to run in the web browsa (compile golang to WASM with tinygo compiler)

music rn: 🎸🎺 Less Than Jake 🧨🍺

stream.sequentialread.com/

Forest boosted

Querying the db showed:

```
# SELECT username FROM accounts WHERE id=-99;

username
----------------
localhost:3000
```

Which corresponded with the value in the curl
```
"preferredUsername": "localhost:3000",
```

So a quick fix was to connect to psql and run the following update: UPDATE accounts SET username = 'destituent.social' WHERE id=-99;

Now I can toot at my friends over on pixie.town!

Hopefully I didn't burn too many of your CPU cycles @f0x and @forestjohnson thanks!

Show thread
Forest boosted
Forest boosted

wow, blocking a list of bad instance is super easy with gotosocial.

Show older
Pixietown

Small server part of the pixie.town infrastructure. Registration is closed.