System Design
There's a total of 5 articles.
Preparation for a Software Engineer interview
Back of the envelope calculations
When designing a system it’s important to consider the limitations of the technologies chosen, making some approximate calculations when the system is designed help us decide on the tradeoffs of the different approaches, these approximations include
This article has a table with latency comparison numbers, common numbers used in system design calculations and some challenges to put all of these info into practice.
Cassandra
Cassandra is a highly scalable, distributed NoSQL (non-relational) database management system designed for handling large amounts of data across multiple commodity servers.
This article covers key design features of cassandra such as the usage of consistent hashing, the write pattern to a write ahead log and a memtable, the read pattern from the memtable and from sstables, and finally and most important, some examples about data modeling for different types of queries.
Partitioning
Data partitioning refers to the process of dividing a system’s data into smaller, more manageable subsets, which are distributed across multiple storage locations or nodes.
This article covers some strategies for partitioning including random partitioning, by hash key, by range and a hybrid approach for skewed workloads. We also see strategies to rebalance partitions if there's a static or dynamic number of partitions.
Non Functional Requirements
Non functional requirements refer to quality attributes or system characteristics that describe how well a software system or solution performs or behaves.
This article covers well known non functional requirements such as reliability, availability, scalability, performance and durability.