Gizzard
Framework for creating eventually-consistent distributed datastores
...In Gizzard, data is stored in underlying storage shards (which could be databases or other stores) and Gizzard handles the process of routing requests correctly as the cluster topology changes. Gizzard's architecture is designed for operational flexibility: you can change the shard layout over time, reassign replicas, migrate data between nodes, and have requests redirected during transitions. It also supports secondary indexing and provides hooks for custom logic in migrations and consistency. Because Gizzard handles much of the complexity of shard routing and cluster transitions, it was used to support large-scale, evolving storage backends in production.