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?

  • EinfachUnersetzlich
    link
    fedilink
    arrow-up
    15
    ·
    1 year ago

    What microservices would you split Lemmy into? The database, image hosting and the UI are already separate.

    • myersguy@lemmy.simpl.website
      link
      fedilink
      arrow-up
      3
      ·
      1 year ago

      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.

      • Fauzruk@lemmy.world
        link
        fedilink
        arrow-up
        2
        ·
        1 year ago

        To me this sounds like a code / DB problem more so than a monolith vs microservice issue. You can totally run only the worker part of a monolith inside AWS ECS and have it autoscale, this is not specific to microservices.

    • BURN@lemmy.world
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      1 year ago

      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.