Requirement
- Functional (put, get)
- non-functional (high scalability, high availability, high performance)
Simple solution
- client -> local cache -> Data storage
- LRU
Scale to multiple machine
- local cache is not enough -> distributed system
- separate service / cache server
- sharding cache server (Consistent Hashing)
- Cache client call config service(ZooKeeper) to discover all cashe servers
- master / slave for cache server
- put: master
- get: slave
Resource
TODO
cache miss, search from disk? Bloom filter? SStable?