Why DB clustering is really awesome to scale a monolith project?

Seth ChenSeth Chen
2 min read

Hey folks,

Have you ever heard about DB Clustering (eg MySQL Clustering)? If not, I would give you a quick summary of it.

Before, I worked at a big company based in Munich, Germany (Still working in Vietnam tho haha). Oh boy, they do have a big monolith monster project, the size, code,...

Man, imagine you have to scale a project like that, millions of users (from public to internal), the DB write operations are insane.

There is no way a traditional 1 write - N replica would work. Write instance will and always be a bottleneck.

Then, here I welcome you to the DB Clustering!

DB Clustering details and the Pros

Just like how you deploy your backend project and put it under a Load Balancer, then share the traffic between the instances.

DB Clustering is just as same as that:

  • Shared-nothing: my machine, my usage
  • Sync replication: crazy right? replication for replica is async
  • Self-healing
  • Automatic failover
  • Load-balancing
  • High availability

Awesome right?

In Tech, there will be no silver bullet for everything. Same as clustering, it would have its own Cons, eg:

  • Self-managed (yeah, seems like cloud services still prefer the traditional way - write replica)
    • But once you perfect the setup (self-healing, fail-over,...), you're done.
  • Some limitations, check out MySQL

But the PROs here are way better to go with.

Clustering Sample Chart from SethPhat

Apply to a Monolith Project

With the PROs above, for example, I have an App with MAU (monthly active users) of around 1M. Here would be my perfect setup:

  • Backend:
    • Load Balancer: 4 instances, using the round-robin algorithm.
  • DB:
    • 5 clusters:
      • 4 active, using the round-robin algorithm.
      • 1 standby, will jump in if any active instance is down.

If I needed a Queue Worker, then I would give it a dedicated cluster as well 🥳 Thus, it can work independently without taking all the resources from the HTTP layer.

Then I don't have to bother about the monolith structure (yes I know it is bad), but extracting a big app into multiple services aka microservices would take years without new features.

And I can sleep in peace without worrying about spiking in the database when the write operations are high as fk.

Conclusion

  • Small/medium app (even big): let's go with the DB Clustering to help you scale while you're only focusing on the feature development.
  • Super big app: DB Clustering for your own microservices.

Cheers!

0
Subscribe to my newsletter

Read articles from Seth Chen directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Seth Chen
Seth Chen

develops awesome software, contributes to OSS, writes tech tips, and loves Vietnamese milk coffee!