- We need multiple servers, for web/mobile traffic and Database
- Different servers allow independent vertical scaling
- Which Database to Use?
- Relational Databases (RDBMS) or SQL Database.
- Ex. MySQL, Oracle DB, PostgreSQL, etc.
- Non Relational Database (NoSQL)
- Ex. CouchDB, Cassandra, Amazon DynamoDB
- Four Categories
- Key value stores
- Graph stores
- column stores
- Document stores
- Join operations are not supported generally in NoSQL
- Relational Databases (RDBMS) or SQL Database.
- When to use NoSQL Database?
- Application requires super-low latency
- Data is unstructured OR there is no relational data
- Only serialisation/deserialisation of data is required(JSON, XML, YAML)
- You are storing Massive amounts of data
Vertical Scaling (scale-up)¶
- Adding more power (CPU, RAM, etc.) to your servers.
- With low traffic, vertical scaling is a great option. The simplicity being the biggest advantage.
- Has a hard limit and does not have failover and redundancy.
Horizontal Scaling (scale-out)¶
- Adding more servers into your pool of resources.
- More desired for large scale applications.
Database Replication¶
- There is still the problem of 'No Support for failover and no redundancy. Database replication solves this.
- Usually, a master/slave relationship between original(master) and the copies(slaves)
- All the data modifying commands like insert, delete, or update must be sent to the master database.
- Reads can be performed from slaves while master will update them whenever it has fresh data.
- Advantages
- Better Performances
- Reliability
- Data is preserved even if one server goes down; since it is replicated
- High availability
- If master goes down, a slave is promoted to be the new master.
- In production, promoting a new master is more complicated as the data in a slave database might not be up to date.
- How is the data then recovered?
- Running Data recovery scripts
- or implementations like multi-master( #todo) and circular replication #todo
- How is the data then recovered?
-
faultTolerance¶