System requirements
Functional:
1)Store /update the data with unique key
2)retrieve the record based on key.
3) create cache invalidation based on TTL.
4)Users should be authenticated
Non-Functional:
1) High available : System should be highly available
2) Scalability : System should be scalable when the number of user load increase.
3 Consistency : Maintain consistency with the original data source
Capacity estimation
Average sizes: Html page =50KB,Image = 100kb,video = 2mb
cache : Html page =10,000,Images :20,000,Images : 1000
Total Size = 50kb*100000+100kb*20000+2Mb*1000 = 9*10^9= 9GB
API design
1) To create/Insert the cache :
POST /api/v1/put
parmeter : Key : Integer
Value:String
return 201 created
2) To view the cache
Get /api/vi/get/{key}
return Value as an string
Database design
1)
High-level design
Request flows
For both the request either to put OR get the value from cache it flows through Load balancer to webserver and first cache client fetch which server the cache are stored using configuration server (zookeeper/etcd).
2) the cache are sored in the consistent hashring with leader and read replica for better performance.
Detailed component design
1) We have portioned the record based on key and used consistent hashing to make sure that the portioned records are not skewed .
2) We have used configuration server to know that which server based on key need to redirect the cache clients.
3) We have opted Leader and replica model to provide high availability of the system
Trade offs/Tech choices
1) We have choose the zookeeper/etcd for configuration manager to mange the cache client to redirect to correct node based on key.
2)there can be issue when there is any particular key has higher load and to over come with that we can have virtual nodes created to handle larger traffic.
3) we are using consses algorithm to make the higher consistency .
Failure scenarios/bottlenecks
1) We can have read replicas in case of leader fails any of the read replica will become the leader.
2)Strong consistency can be tuned based on the use case and we are using concesse algo which relay on (R+w)>n gives strong consistency.
Future improvements
1) we can use API gateway for rate limiting and to handle authorization of the application.