System Design Interview PDF Book Free Download

Share on facebook
Share on whatsapp
Share on twitter
Share on telegram

Table of Contents

System Design Interview

System Design Interview – An insider's guide Summary

The system design interview is considered to be the most complex and most difficult technical job interview by many. This book provides a step-by-step framework on how to tackle a system design question. It includes many real-world examples to illustrate the systematic approach with detailed steps that you can follow.

What’s inside?


– An insider’s take on what interviewers really look for and why.
– A 4-step framework for solving any system design interview question.
– 16 real system design interview questions with detailed solutions.
– 188 diagrams to visually explain how different systems work.

Table Of Contents

  • Chapter 1: Scale From Zero To Millions Of Users
  • Chapter 2: Back-of-the-envelope Estimation
  • Chapter 3: A Framework For System Design Interviews
  • Chapter 4: Design A Rate Limiter
  • Chapter 5: Design Consistent Hashing
  • Chapter 6: Design A Key-value Store
  • Chapter 7: Design A Unique Id Generator In Distributed Systems
  • Chapter 8: Design A Url Shortener
  • Chapter 9: Design A Web Crawler
  • Chapter 10: Design A Notification System
  • Chapter 11: Design A News Feed System
  • Chapter 12: Design A Chat System
  • Chapter 13: Design A Search Autocomplete System
  • Chapter 14: Design Youtube
  • Chapter 15: Design Google Drive
  • Chapter 16: The Learning Continues

About the Author

Alex Xu is an experienced software engineer and entrepreneur. Previously, he worked at Twitter, Apple, and Zynga. He can be found online at LinkedIn (https://www.linkedin.com/in/alex-xu-a8131b11/) and Twitter (@alexxubyte)

System Design Interview – An insider's guide Introduction

Excerpt. © Reprinted by permission. All rights reserved.

CHAPTER 1: SCALE FROM ZERO TO MILLIONS OF USERS


Designing a system that supports millions of users is challenging, and it is a journey that requires continuous refinement and endless improvement. In this chapter, we build a system that supports a single user and gradually scale it up to serve millions of users. After reading this chapter, you will master a handful of techniques that will help you to crack the system design interview questions

Single server setup


A journey of a thousand miles begins with a single step, and building a complex system is no different. To start with something simple, everything is running on a single server. Figure 1-1 shows the illustration of a single server setup where everything is running on one server: web app, database, cache, etc.

To understand this setup, it is helpful to investigate the request flow and traffic source. Let us first look at the request flow (Figure 1-2).

  1. Users access websites through domain names, such as api.mysite.com. Usually, the Domain Name System (DNS) is a paid service provided by 3rd parties and not hosted by our servers.
  2. Internet Protocol (IP) address is returned to the browser or mobile app. In the example, IP address 15.125.23.214 is returned.
  3. Once the IP address is obtained, Hypertext Transfer Protocol (HTTP) [1] requests are sent directly to your web server.
  4. The web server returns HTML pages or JSON response for rendering.

Next, let us examine the traffic source. The traffic to your web server comes from two sources: web applications and mobile applications.

•Web application: it uses a combination of server-side languages (Java, Python, etc.) to handle business logic, storage, etc., and client-side languages (HTML and JavaScript) for presentation.

•Mobile application: HTTP protocol is the communication protocol between the mobile app and the webserver. JavaScript Object Notation (JSON) is a commonly used API response format to transfer data due to its simplicity. An example of the API response in JSON format is shown below:

GET /users/12 – Retrieve user object for id = 12

Database


With the growth of the user base, one server is not enough, and we need multiple servers: one for web/mobile traffic, the other for the database (Figure 1-3). Separating web/mobile traffic (web tier) and database (data tier) servers allow them to be scaled independently.

Which databases to use?


You can choose between a traditional relational database and a non-relational database. Let us examine their differences.

Relational databases are also called relational database management systems (RDBMS) or SQL databases. The most popular ones are MySQL, Oracle database, PostgreSQL, etc. Relational databases represent and store data in tables and rows. You can perform join operations using SQL across different database tables.

Non-Relational databases are also called NoSQL databases. Popular ones are CouchDB, Neo4j, Cassandra, HBase, Amazon DynamoDB, etc. [2]. These databases are grouped into four categories: key-value stores, graph stores, column stores, and document stores. Join operations are generally not supported in non-relational databases.

For most developers, relational databases are the best option because they have been around for over 40 years and historically, they have worked well. However, if relational databases are not suitable for your specific use cases, it is critical to explore beyond relational databases. Non-relational databases might be the right choice if:

  • Your application requires super-low latency.
  • Your data are unstructured, or you do not have any relational data.
  • You only need to serialize and deserialize data (JSON, XML, YAML, etc.).
  • You need to store a massive amount of data.

Vertical scaling vs horizontal scaling


Vertical scaling, referred to as “scale up”, means the process of adding more power (CPU, RAM, etc.) to your servers. Horizontal scaling referred to as “scale-out”, allows you to scale by adding more servers into your pool of resources.

When traffic is low, vertical scaling is a great option, and the simplicity of vertical scaling is its main advantage. Unfortunately, it comes with serious limitations.

  • Vertical scaling has a hard limit. It is impossible to add unlimited CPU and memory to a single server.
  • Vertical scaling does not have failover and redundancy. If one server goes down, the website/app goes down with it completely.

Horizontal scaling is more desirable for large-scale applications due to the limitations of vertical scaling.

In the previous design, users are connected to the webserver directly. Users will be unable to access the website if the webserver is offline. In another scenario, if many users access the webserver simultaneously and it reaches the web server’s load limit, users generally experience slower responses or fail to connect to the server. A load balancer is the best technique to address these problems.

Load balancer


A load balancer evenly distributes incoming traffic among web servers that are defined in a load-balanced set. Figure 1-4 shows how a load balancer works.

As shown in Figure 1-4, users connect to the public IP of the load balancer directly. With this setup, web servers are unreachable directly by clients anymore. For better security, private IPs are used for communication between servers. A private IP is an IP address reachable only between servers in the same network; however, it is unreachable over the internet. The load balancer communicates with web servers through private IPs.

In Figure 1-4, after a load balancer and a second web server are added, we successfully solved no failover issue and improved the availability of the web tier. Details are explained below:

•If server 1 goes offline, all the traffic will be routed to server 2. This prevents the website from going offline. We will also add a new healthy web server to the server pool to balance the load.

•If the website traffic grows rapidly, and two servers are not enough to handle the traffic, the load balancer can handle this problem gracefully. You only need to add more servers to the webserver pool, and the load balancer automatically starts to send requests to them.

Now the web tier looks good, what about the data tier? The current design has one database, so it does not support failover and redundancy. Database replication is a common technique to address those problems. Let us take a look.

Disclaimer:
This site complies with DMCA Digital Copyright Laws. Please bear in mind that we do not own copyrights to this book/software. We are not hosting any copyrighted content on our servers, it’s a catalog of links that have already been found on the internet. hubpdf.com doesn’t have any material hosted on the server of this page, only links to books that are taken from other sites on the web are published and these links are unrelated to the book server. Moreover, hubpdf.com server does not store any type of book, guide, software, or images. No illegal copies are made or any copyright © and/or copyright is damaged or infringed since all material is free on the internet. Check out our DMCA Policy. If you feel that we have violated your copyrights, then please contact us immediately. We’re sharing this with our audience ONLY for educational purposes and we highly encourage our visitors to purchase original licensed software/Books. If someone with copyrights wants us to remove this software/Book, please contact us. immediately.

You may send an email to [email protected] for all DMCA / Removal Requests.

For More Computers Books

System Design Interview

System Design Interview PDF

Product details:

EditionInternational Edition
ISBN
Posted onAugust 10, 2021
Formatpdf
Page Count400 pages
AuthorAlex Xu

System Design Interview PDF Book Free Download - HUB PDF

The system design interview is considered to be the most complex and most difficult technical job interview by many. This book provides a step-by-step framework on how to tackle a system design question. It includes many real-world examples to illustrate the systematic approach with detailed steps that you can follow.

URL: https://amzn.to/3nbnxPT

Author: Alex Xu

Editor's Rating:
4.6
Recent Books
Audible Plus Free
Recent Posts