Redis is currently pretty much a monolith in the way it is developed, distributed (in source or binary form) and organized internally.

One idea that came up a few times in the past was to start considering "first party modules", and basically take a more modular approach even for core features. The term "module" here doesn't necessarily refer to existing Redis Modules, which are independent/external, although some of the existing APIs could be leveraged.

This is not a new approach and many infrastructure open source projects take it, like Apache HTTP Server, Nginx, Asterisk, FreeRADIUS and many others.

Pros

  • Users can build and install just the features they care about.
  • In some way we're already there but relying on compilation flags, e.g. BUILD_TLS, USE_SYSTEMD and may even the different allocators, which can get awkward.
  • Makes modular third party (e.g. Linux distributions) packaging much easier and more efficient with regard to dependency management. For example, the redis-server package is just the core, redis-tls is an add-on module that adds TLS support and pulls in OpenSSL as a dependency, etc.

Cons

  • Depending on what we modularize, this might not be a trivial effort.
  • A monolith that always includes everything can be simpler to use, and definitely simpler to support or troubleshoot.
  • In the long term, this may lead to lowering the bar and letting features that would otherwise be rejected creep in.

Comment From: yossigo

@madolson We can continue the discussion here.

Comment From: oranagra

we're not considering cross-version / ABI or API support, right? just modular approach to coding (clear separation between modules and the API between them), and enabling partial build and partial deployment (dynamic loading, i suppose only at startup to simplify things)

Comment From: madolson

I would think having cross version interface support wouldn't be a requirement. It would be nice if we had a stronger versioning system for modules so that compatibility was clearer, I wouldn't say that's a major requirement though.