Systems Design and Scalability
Vertical Scaling
Adding resources to a single node, such as memory, processing power, or redundant components. Also referred to as scale up. ex. Adding more disk/SSD storage to support large dataset
Separation of Services/Operations
Advantage: Able to solve problems independently of one another. Each service can scale independently. ex. Separating reading from database from writing to increase efficiency of user requests. Read is less expensive than writing. Will likely will always need to do more reading than writing so you can scale reading operations independently.
Global Cache
All nodes in network use the same single cache space.
Proxy Server
An intermediate piece of hardware/software that receives requests from clients and relays them to the backend origin servers. Client request <-> Proxy Server <-> Backend Server
Distributed Cache
Cache is distributed across multiple nodes and each node can maintain its own part of cache data Advantage: Increased Cache Speed Disadvantage: What happens when a server/node goes down?
Horizontal Scaling
Employ multiple computers to share workload ex. splitting a large dataset into multiple partitions
(T/F) It is faster to read from disk than memory
False
Redundancy
Keeping multiple copies of data prevents you from losing data in the case server is lost. Ensuring that multiple copies or versions of services are running simultaneously can secure against the failure of a single node.
Simple web application structure
LAMP stack (Linux OS, Apache HTTP Server, MySQL database, PHP programming) Internet -> App server -> Backend database
Data Locality
The closer the data to the operation or point of computation, the better the performance. It is potentially problematic to have data spread across multiple servers which is employed in horizontal scaling
Data inconsistency/race condition
When there are different services reading/writing from shared resource, there's a chance that data is supposed to be updated, but a read occurs before it is updated