summaryrefslogtreecommitdiff
path: root/MANIFESTO
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2019-03-18 15:38:43 +0100
committerantirez <antirez@gmail.com>2019-03-18 15:38:43 +0100
commita5af648fdddaf93e89735a8577b56f12379d1dd2 (patch)
tree167ec11e66e92c1a813ec8435c5142b76ad364e0 /MANIFESTO
parent14b17c3615108fdbca5e7fe4d2c3f0e8b7454521 (diff)
downloadredis-a5af648fdddaf93e89735a8577b56f12379d1dd2.tar.gz
MANIFESTO v2.
Diffstat (limited to 'MANIFESTO')
-rw-r--r--MANIFESTO47
1 files changed, 41 insertions, 6 deletions
diff --git a/MANIFESTO b/MANIFESTO
index 2b719057e..d43a58893 100644
--- a/MANIFESTO
+++ b/MANIFESTO
@@ -34,7 +34,21 @@ Redis Manifesto
so that the complexity is obvious and more complex operations can be
performed as the sum of the basic operations.
-4 - Code is like a poem; it's not just something we write to reach some
+4 - We believe in code efficiency. Computers get faster and faster, yet we
+ believe that abusing computing capabilities is not wise: the amount of
+ operations you can do for a given amount of energy remains anyway a
+ significant parameter: it allows to do more with less computers and, at
+ the same time, having a smaller environmental impact. Similarly Redis is
+ able to "scale down" to smaller devices. It is perfectly usable in a
+ Raspberry Pi and other small ARM based computers. Faster code having
+ just the layers of abstractions that are really needed will also result,
+ often, in more predictable performances. We think likewise about memory
+ usage, one of the fundamental goals of the Redis project is to
+ incrementally build more and more memory efficient data structures, so that
+ problems that were not approachable in RAM in the past will be perfectly
+ fine to handle in the future.
+
+5 - Code is like a poem; it's not just something we write to reach some
practical result. Sometimes people that are far from the Redis philosophy
suggest using other code written by other authors (frequently in other
languages) in order to implement something Redis currently lacks. But to us
@@ -45,23 +59,44 @@ Redis Manifesto
when needed. At the same time, when writing the Redis story we're trying to
write smaller stories that will fit in to other code.
-5 - We're against complexity. We believe designing systems is a fight against
+6 - We're against complexity. We believe designing systems is a fight against
complexity. We'll accept to fight the complexity when it's worthwhile but
we'll try hard to recognize when a small feature is not worth 1000s of lines
of code. Most of the time the best way to fight complexity is by not
creating it at all.
-6 - Two levels of API. The Redis API has two levels: 1) a subset of the API fits
+7 - Threading is not a silver bullet. Instead of making Redis threaded we
+ believe on the idea of an efficient (mostly) single threaded Redis core.
+ Multiple of such cores, that may run in the same computer or may run
+ in multiple computers, are abstracted away as a single big system by
+ higher order protocols and features: Redis Cluster and the upcoming
+ Redis Proxy are our main goals. A shared nothing approach is not just
+ much simpler (see the previous point in this document), is also optimal
+ in NUMA systems. In the specific case of Redis it allows for each instance
+ to have a more limited amount of data, making the Redis persist-by-fork
+ approach more sounding. In the future we may explore parallelism only for
+ I/O, which is the low hanging fruit: minimal complexity could provide an
+ improved single process experience.
+
+8 - Two levels of API. The Redis API has two levels: 1) a subset of the API fits
naturally into a distributed version of Redis and 2) a more complex API that
supports multi-key operations. Both are useful if used judiciously but
there's no way to make the more complex multi-keys API distributed in an
opaque way without violating our other principles. We don't want to provide
the illusion of something that will work magically when actually it can't in
all cases. Instead we'll provide commands to quickly migrate keys from one
- instance to another to perform multi-key operations and expose the tradeoffs
- to the user.
+ instance to another to perform multi-key operations and expose the
+ trade-offs to the user.
-7 - We optimize for joy. We believe writing code is a lot of hard work, and the
+9 - We optimize for joy. We believe writing code is a lot of hard work, and the
only way it can be worth is by enjoying it. When there is no longer joy in
writing code, the best thing to do is stop. To prevent this, we'll avoid
taking paths that will make Redis less of a joy to develop.
+
+10 - All the above points are put together in what we call opportunistic
+ programming: trying to get the most for the user with minimal increases
+ in complexity (hanging fruits). Solve 95% of the problem with 5% of the
+ code when it is acceptable. Avoid a fixed schedule but follow the flow of
+ user requests, inspiration, Redis internal readiness for certain features
+ (sometimes many past changes reach a critical point making a previously
+ complex feature very easy to obtain).