The Ceph CRUSH algorithm
Allocation algorithm. given an input value, CRUSH deterministically outputs an ordered list of distinct storage targets.
Create a cluster map, which is a tree where the leaves are storage devices; call the internal nodes buckets.
Buckets have associated weights and are of four different types:
uniform (children are identical; constant-time allocation)
list (children are arbitrary weights; we step through it until the current node is heavier than the sum of the remaining)
tree (children have arbitrary weights)
straw (children are assigned numbers which are multiplied by weights, and the "longest straw" is chosen)
This plus implementation of allocation rules, which act as filters.