System Design — Part 1

Giuseppe Canto
2 min readMay 3, 2020

A process to model a system and satisfy requirements.

When you’re designing a software solution you typically have many alternatives to consider . You’ll also usually make lots of mistakes before you come up with a solution that works. Also, most software projects are time-limited, so you usually won’t be able to implement all the features that the customer wants. You have to figure out the subset that will give the customer the most high-priority features in the time you have available. So, you have to prioritize the requirements and trade off one subset for another. Design is a lot about tradeoffs and priorities.

Components

In this journey to system design here there is a list of essential components to consider ,while building the solution, to realize a product that reflect modern application needs such as availability, maintainability, faults tolerance, optimal costs, performances, scalability, reliability. In this series we‘ll dive into each specific component.

  • Load balancing
  • Caching
  • Sharding
  • Indexing
  • Proxies
  • Queues
  • Redundancy
  • Databases
  • Hashing
  • Communications
  • Stream processing

Example: Facebook’s photo storage system

Facebook photo storage upload

The following is an example of a modern system where scalability, low latency and tolerance to failures are at the core of the design. It’s a photo storage system developed in-house by Facebook. The system is publicly available through a research paper. It was specifically designed to optimize lookups while maintaing low costs, considering that the amount of storage involved in this scenario is about 20 petabytes. In the pictures are shown some of the components behind the system: a web server, a caching system and so on.

This and other solution will be studied during the series, start now to follow me and don’t lose new upcoming parts.

--

--