This page runs real algorithms from my systems experiments repo — not simulations. Each tab below calls actual, unmodified Java implementations, so what you see is the real behavior of real code, not a description of it.
When a server joins or leaves a cluster, you want as few keys as possible to change owners — otherwise every scaling event becomes a mass cache miss or data reshuffle. Consistent hashing solves this by placing servers and keys on the same ring; this test shows exactly how well it works, and what one tuning knob does to the result.
How the test works:| Keys relocated (avg of 30 trials) | — |
| Imbalance (3-node ring, busiest ÷ fair share) | — |
| Measured cv | — |
| Theoretical cv √((N-1)/(NV+1)) | — |
Runs ConsistentHashing.run() at several vnode values and plots the real measured imbalance and cv against the closed-form prediction.
A Bloom filter answers one question fast and cheaply: "have I definitely never seen this before?" It can never wrongly say "definitely not here" for something that was actually added — but it can occasionally, and predictably, mistake something new for something it's seen. This tests how close that mistake rate lands to what you asked for.
How the test works:| Bit array size | — |
| Number of hash functions | — |
| False positives observed | — |
A single flood of one-time-use data can wipe out a cache's entire "hot" working set — unless the cache is smart enough to know the difference between something used once and something used often. This test shows which of four real cache designs actually survive that.
How the test works: