From 1dac6caa568901efc7d02c2de931aca8e730aea7 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Wed, 9 Nov 2022 13:01:25 +0400 Subject: [PATCH] Add content for system design --- .../100-horizontal-vs-vertical-scaling.md | 9 ++++++++- .../content/116-system-design/101-clustering.md | 7 ++++++- .../116-system-design/101-load-balancing.md | 8 +++++++- .../content/116-system-design/102-caching.md | 9 ++++++++- .../content/116-system-design/103-cdn.md | 8 +++++++- .../content/116-system-design/104-proxy.md | 8 +++++++- .../content/116-system-design/105-cap-theorem.md | 8 +++++++- .../content/116-system-design/106-queues.md | 9 ++++++++- .../116-system-design/107-architectural-styles.md | 7 ++++++- .../content/116-system-design/108-rest.md | 11 ++++++++++- .../content/116-system-design/109-graphql.md | 7 ++++++- .../content/116-system-design/110-grpc.md | 14 +++++++++++++- .../116-system-design/111-cloud-design-patterns.md | 9 ++++++++- .../content/116-system-design/112-long-polling.md | 8 +++++++- .../content/116-system-design/113-short-polling.md | 7 ++++++- .../content/116-system-design/114-web-sockets.md | 7 ++++++- .../content/116-system-design/115-sse.md | 8 +++++++- .../content/116-system-design/readme.md | 11 ++++++++++- .../110-apis-and-integrations/102-graphql.md | 3 ++- .../108-working-with-apis/103-restful-apis.md | 11 ++++++++++- 20 files changed, 149 insertions(+), 20 deletions(-) diff --git a/content/roadmaps/103-computer-science/content/116-system-design/100-horizontal-vs-vertical-scaling.md b/content/roadmaps/103-computer-science/content/116-system-design/100-horizontal-vs-vertical-scaling.md index 83088db44..9e79f4bda 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/100-horizontal-vs-vertical-scaling.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/100-horizontal-vs-vertical-scaling.md @@ -1 +1,8 @@ -# Horizontal vs vertical scaling \ No newline at end of file +# Horizontal vs Vertical Scaling + +Horizontal scaling is the process of adding more machines to your system. This is also known as scaling out. Vertical scaling is the process of adding more power to a single machine. This is also known as scaling up. + +Free Content +Scaling Horizontally vs. Scaling Vertically +System Design Basics: Horizontal vs. Vertical Scaling +Vertical vs. Horizontal Scaling for Database Servers diff --git a/content/roadmaps/103-computer-science/content/116-system-design/101-clustering.md b/content/roadmaps/103-computer-science/content/116-system-design/101-clustering.md index 9c8218477..1336376d4 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/101-clustering.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/101-clustering.md @@ -1 +1,6 @@ -# Clustering \ No newline at end of file +# Clustering + +At a high level, a computer cluster is a group of two or more computers, or nodes, that run in parallel to achieve a common goal. This allows workloads consisting of a high number of individual, parallelizable tasks to be distributed among the nodes in the cluster. As a result, these tasks can leverage the combined memory and processing power of each computer to increase overall performance. + +Free Content +System Design: Clustering diff --git a/content/roadmaps/103-computer-science/content/116-system-design/101-load-balancing.md b/content/roadmaps/103-computer-science/content/116-system-design/101-load-balancing.md index 76a6e1c25..47b66f156 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/101-load-balancing.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/101-load-balancing.md @@ -1 +1,7 @@ -# Load balancing \ No newline at end of file +# Load Balancing + +Load balancing is the process of distributing network or application traffic across a cluster of servers. Load balancing is used to improve responsiveness and reliability of applications, maximize throughput, minimize response time, and avoid overload of any single server. + +Free Content +Load Balancers 101 +What is Load Balancing? diff --git a/content/roadmaps/103-computer-science/content/116-system-design/102-caching.md b/content/roadmaps/103-computer-science/content/116-system-design/102-caching.md index 07f88797a..02523e907 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/102-caching.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/102-caching.md @@ -1 +1,8 @@ -# Caching \ No newline at end of file +# Caching + +Caching is a way of storing data in a temporary storage to make future requests faster. It is one of the most important tools in the computer science toolbox. + +Free Content +System Design - Caching +What is Caching | System Design Basics + diff --git a/content/roadmaps/103-computer-science/content/116-system-design/103-cdn.md b/content/roadmaps/103-computer-science/content/116-system-design/103-cdn.md index 10851277a..dd70aec6c 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/103-cdn.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/103-cdn.md @@ -1 +1,7 @@ -# Cdn \ No newline at end of file +# Content Delivery Network (CDN) + +A CDN is a network of servers that are distributed geographically. The servers are connected to each other and to the internet. The servers are used to deliver content to users. The content is delivered to the user from the server that is closest to the user. This is done to reduce latency and improve the performance of the content delivery. + +Free Content +Content Delivery Network (CDN) - System Design +Content Delivery Networks diff --git a/content/roadmaps/103-computer-science/content/116-system-design/104-proxy.md b/content/roadmaps/103-computer-science/content/116-system-design/104-proxy.md index 8be8b356c..65d76cd52 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/104-proxy.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/104-proxy.md @@ -1 +1,7 @@ -# Proxy \ No newline at end of file +# Proxy + +A proxy server is an intermediary piece of hardware/software sitting between the client and the backend server. It receives requests from clients and relays them to the origin servers. Typically, proxies are used to filter requests, log requests, or sometimes transform requests (by adding/removing headers, encrypting/decrypting, or compression). + +Free Content +Proxy - System Design +Proxy Servers diff --git a/content/roadmaps/103-computer-science/content/116-system-design/105-cap-theorem.md b/content/roadmaps/103-computer-science/content/116-system-design/105-cap-theorem.md index b85469e6d..82309de64 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/105-cap-theorem.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/105-cap-theorem.md @@ -1 +1,7 @@ -# Cap theorem \ No newline at end of file +# CAP Theorem + +The CAP theorem states that it is impossible for a distributed data store to simultaneously provide more than two out of Consistency, Availability and Partition Tolerance. + +Free Content +What is CAP Theorem? +CAP Theorem - Wikipedia diff --git a/content/roadmaps/103-computer-science/content/116-system-design/106-queues.md b/content/roadmaps/103-computer-science/content/116-system-design/106-queues.md index b3e37379a..9e46fd6ae 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/106-queues.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/106-queues.md @@ -1 +1,8 @@ -# Queues \ No newline at end of file +# Queues + +Messaging queues are a common way to decouple systems. They are used to decouple the producer of a message from the consumer of a message. This allows the producer to send a message and not have to wait for the consumer to process it. It also allows the consumer to process the message at their own pace. + +Free Content +Message Queues - System Design +What is a Message Queue? +What is a Message Queue and Where is it used? diff --git a/content/roadmaps/103-computer-science/content/116-system-design/107-architectural-styles.md b/content/roadmaps/103-computer-science/content/116-system-design/107-architectural-styles.md index 6ab57a0a5..9a9b636ec 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/107-architectural-styles.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/107-architectural-styles.md @@ -1 +1,6 @@ -# Architectural styles \ No newline at end of file +# Architectural Styles + +Architectural patterns are the fundamental organization of a system, defining how the system is composed and how its components interact. Architectural patterns are identified by their name, like client-server, peer-to-peer, and layered. + +Free Content +List of software architecture styles and patterns diff --git a/content/roadmaps/103-computer-science/content/116-system-design/108-rest.md b/content/roadmaps/103-computer-science/content/116-system-design/108-rest.md index 5088a865c..89298f1e9 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/108-rest.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/108-rest.md @@ -1 +1,10 @@ -# Rest \ No newline at end of file +# REST + +REST, or REpresentational State Transfer, is an architectural style for providing standards between computer systems on the web, making it easier for systems to communicate with each other. + +Free Content + +What is REST? +What is a REST API? +Roy Fielding's dissertation chapter, "Representational State Transfer (REST)" +Learn REST: A RESTful Tutorial diff --git a/content/roadmaps/103-computer-science/content/116-system-design/109-graphql.md b/content/roadmaps/103-computer-science/content/116-system-design/109-graphql.md index 92b738b69..e2db673a1 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/109-graphql.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/109-graphql.md @@ -1 +1,6 @@ -# Graphql \ No newline at end of file +# GraphQL + +GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools. + +Free Content +Apollo GraphQL Tutorials diff --git a/content/roadmaps/103-computer-science/content/116-system-design/110-grpc.md b/content/roadmaps/103-computer-science/content/116-system-design/110-grpc.md index 5d543f43c..c0c63e749 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/110-grpc.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/110-grpc.md @@ -1 +1,13 @@ -# Grpc \ No newline at end of file +# gPRC + +gRPC is a platform agnostic serialization protocol that is used to communicate between services. Designed by Google in 2015, it is a modern alternative to REST APIs. It is a binary protocol that uses HTTP/2 as a transport layer. It is a high performance, open source, general-purpose RPC framework that puts mobile and HTTP/2 first. + +It's main use case is for communication between two different languages within the same application. You can use Python to communicate with Go, or Java to communicate with C#. + +gRPC uses the protocol buffer language to define the structure of the data that is + +Free Content +gRPC Website +gRPC Introduction +gRPC Core Concepts +Stephane Maarek - gRPC Introduction diff --git a/content/roadmaps/103-computer-science/content/116-system-design/111-cloud-design-patterns.md b/content/roadmaps/103-computer-science/content/116-system-design/111-cloud-design-patterns.md index 17c562494..d363c714d 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/111-cloud-design-patterns.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/111-cloud-design-patterns.md @@ -1 +1,8 @@ -# Cloud design patterns \ No newline at end of file +# Cloud Design Patterns + +These design patterns are useful for building reliable, scalable, secure applications in the cloud. + +The link below has cloud design patterns where each pattern describes the problem that the pattern addresses, considerations for applying the pattern, and an example based on Microsoft Azure. Most patterns include code samples or snippets that show how to implement the pattern on Azure. However, most patterns are relevant to any distributed system, whether hosted on Azure or other cloud platforms. + +Free Content +Cloud Design Patterns diff --git a/content/roadmaps/103-computer-science/content/116-system-design/112-long-polling.md b/content/roadmaps/103-computer-science/content/116-system-design/112-long-polling.md index 7c6f67b5a..5f266ae5b 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/112-long-polling.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/112-long-polling.md @@ -1 +1,7 @@ -# Long polling \ No newline at end of file +# Long Polling + +Long polling is a technique used to implement server push functionality over HTTP. It is a method of opening a request on the server and keeping it open until an event occurs, at which point the server responds. This is in contrast to a regular HTTP request, where the server responds immediately with whatever data is available at the time. + +Free Content +Long polling +What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet? diff --git a/content/roadmaps/103-computer-science/content/116-system-design/113-short-polling.md b/content/roadmaps/103-computer-science/content/116-system-design/113-short-polling.md index 074a1187f..90af71b63 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/113-short-polling.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/113-short-polling.md @@ -1 +1,6 @@ -# Short polling \ No newline at end of file +# Short Polling + +In short polling, the client requests information from the server. The server processes the request. If data is available for the request, server responds to the request with the required information. However, if the server has no data available for the client, server returns an empty response. In both the situation, the connection will be closed after returning the response. Clients keep issuing new requests even after server sends the empty responses. This mechanism increases the network cost on the server. + +Free Content +What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet? diff --git a/content/roadmaps/103-computer-science/content/116-system-design/114-web-sockets.md b/content/roadmaps/103-computer-science/content/116-system-design/114-web-sockets.md index 8b76cfb8d..27ca6075e 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/114-web-sockets.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/114-web-sockets.md @@ -1 +1,6 @@ -# Web sockets \ No newline at end of file +# Web Sockets + +Web sockets are a bidirectional communication protocol between a client and a server. They are used for real-time applications like chat, multiplayer games, and live data updates. Web sockets are also used to establish a connection between a server and a client. This connection is then used to send data in both directions. + +Free Content +What is web socket and how it is different from the HTTP? diff --git a/content/roadmaps/103-computer-science/content/116-system-design/115-sse.md b/content/roadmaps/103-computer-science/content/116-system-design/115-sse.md index abf8d9426..3910be158 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/115-sse.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/115-sse.md @@ -1 +1,7 @@ -# Sse \ No newline at end of file +# Server Sent Events + +Server-Sent Events is a server push technology enabling a client to receive automatic updates from a server via an HTTP connection, and describes how servers can initiate data transmission towards clients once an initial client connection has been established. + +Free Content +What is Server-Sent Events (SSE) and how to implement it? +Using server-sent events diff --git a/content/roadmaps/103-computer-science/content/116-system-design/readme.md b/content/roadmaps/103-computer-science/content/116-system-design/readme.md index ef51ccef6..0f0594fb1 100644 --- a/content/roadmaps/103-computer-science/content/116-system-design/readme.md +++ b/content/roadmaps/103-computer-science/content/116-system-design/readme.md @@ -1 +1,10 @@ -# System design \ No newline at end of file +# System Design + +System design is the process of defining the architecture, modules, interfaces, and data for a system to satisfy specified requirements. It is a very broad topic, and there are many ways to approach it. + +Free Content +System Design Primer +System Design: The complete course +System Design 101 +Scaling the Unscalable +System design interview: Scale to 1 million users diff --git a/content/roadmaps/114-software-architect/content/110-apis-and-integrations/102-graphql.md b/content/roadmaps/114-software-architect/content/110-apis-and-integrations/102-graphql.md index 982041fa3..9896de270 100644 --- a/content/roadmaps/114-software-architect/content/110-apis-and-integrations/102-graphql.md +++ b/content/roadmaps/114-software-architect/content/110-apis-and-integrations/102-graphql.md @@ -1,5 +1,6 @@ # GraphQL + GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools. Free Content -Apollo GraphQL Tutorials \ No newline at end of file +Apollo GraphQL Tutorials diff --git a/content/roadmaps/117-flutter/content/108-working-with-apis/103-restful-apis.md b/content/roadmaps/117-flutter/content/108-working-with-apis/103-restful-apis.md index 98ee6cf8b..89298f1e9 100644 --- a/content/roadmaps/117-flutter/content/108-working-with-apis/103-restful-apis.md +++ b/content/roadmaps/117-flutter/content/108-working-with-apis/103-restful-apis.md @@ -1 +1,10 @@ -# Restful apis \ No newline at end of file +# REST + +REST, or REpresentational State Transfer, is an architectural style for providing standards between computer systems on the web, making it easier for systems to communicate with each other. + +Free Content + +What is REST? +What is a REST API? +Roy Fielding's dissertation chapter, "Representational State Transfer (REST)" +Learn REST: A RESTful Tutorial