It is a common question these days how one should design their next system to support elastic and growth requirements in the cloud era.
As I got this specific query today, I would like to share with you my answer based on various materials I created in the last few years:
1. Avoid File Storage SPOF: Use AWS S3 or its equivalent open source OpenStack Swift as a central file server repository when needed
How to use OpenStack Swift for your business case
2. Avoid Data Store SPOF: Use clustered data store that recovers automatically w/o a DBA or an operator intervention. Fine examples are AWS MySQL RDS, MongoDB and Cassandra
MongoDB HA concepts
3. Avoid Static Servers: Leverage Autoscale features or customize it for your needs
How to implement your application logic to auto scale your app
4. Avoid Messing with Cache: Use a central sharded cache to avoid cache revocation and reduce data stores load using MongoDB, CouchBase or Redis.
5. Offload your servers sessions: in order to avoid users log off and lost transactions:
How to implement a session offloading using a central store
6. Avoid Service Downtime due to Servers Downtime: More issues that can be found in my extensive presentation:
- Use DNS Load Balancing for Geo LB and DRP (Slide 10)
- Use CDN to offload network traffic (Slides 16-19)
- Perform Session Offloading by cookies or a central store (Slides 62-65)
You can scale your app! just follow the right recommendations