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-serverpackage is just the core,redis-tlsis 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.