I know that Lemmy is open source and it can only get better from here on out, but I do wonder if any experts can weigh in whether the foundation is well written? Or are we building on top of 4 years worth of tech debt?
What microservices would you split Lemmy into? The database, image hosting and the UI are already separate.
Well, I’m going to start by repeating that I don’t necessarily agree that it being monolithic is necessarily a problem right now.
The immediate thought in my mind would be all of the federation logic. That’s where all of the instances seem to be lagging behind, and it seems the common fix is “just increase the workers to one billion”. Apparently that does something meaningful, but the developer in me wants to know how a few cores can put so many workers to use.
Spinning federation off into a microservice means you could deploy it on something like Cloud Run or AWS ECS, and have it autoscale as the workload demands it. Seems like a pretty prime candidate to me.
I’d split it out into a few systems
- Signup/Login/Account management
- Posting/Commenting/Voting
- Moderation Controls
- DB Readers and Writers in different services
- Community management (may get lumped into moderation controls, but separation of duties may be needed)
- Edit: Federation is a big one I keep forgetting about
The ultimate goal, and I don’t know how possible it is with rust, would be to have a way to run those as individual services or as one part of a larger monolith. Smaller instances would be able to run it as one binary, while larger instances like Lemmy.world or Lemmy.ml can run each part independently. That would allow easier scaling on large instances while (hopefully) leaving it just as simple to deploy on a small scale too.
There’s no reason to split it into 100 different services, but 4-5 mid sized ones might help.