Software techniques
Fully-distributed, shared-nothing code
- centralization breaks as systems scale up immensely
- avoids single-point-of-failure front ends
-
Redundant data storage
- required for high availability, simplifies self-testing
- replication at the level of application objects
- application can control consistency policy
- more opportunity for data placement optimization