Add content for system design

pull/2907/head
Kamran Ahmed 2 years ago
parent 51a543f013
commit 1dac6caa56
  1. 9
      content/roadmaps/103-computer-science/content/116-system-design/100-horizontal-vs-vertical-scaling.md
  2. 7
      content/roadmaps/103-computer-science/content/116-system-design/101-clustering.md
  3. 8
      content/roadmaps/103-computer-science/content/116-system-design/101-load-balancing.md
  4. 9
      content/roadmaps/103-computer-science/content/116-system-design/102-caching.md
  5. 8
      content/roadmaps/103-computer-science/content/116-system-design/103-cdn.md
  6. 8
      content/roadmaps/103-computer-science/content/116-system-design/104-proxy.md
  7. 8
      content/roadmaps/103-computer-science/content/116-system-design/105-cap-theorem.md
  8. 9
      content/roadmaps/103-computer-science/content/116-system-design/106-queues.md
  9. 7
      content/roadmaps/103-computer-science/content/116-system-design/107-architectural-styles.md
  10. 11
      content/roadmaps/103-computer-science/content/116-system-design/108-rest.md
  11. 7
      content/roadmaps/103-computer-science/content/116-system-design/109-graphql.md
  12. 14
      content/roadmaps/103-computer-science/content/116-system-design/110-grpc.md
  13. 9
      content/roadmaps/103-computer-science/content/116-system-design/111-cloud-design-patterns.md
  14. 8
      content/roadmaps/103-computer-science/content/116-system-design/112-long-polling.md
  15. 7
      content/roadmaps/103-computer-science/content/116-system-design/113-short-polling.md
  16. 7
      content/roadmaps/103-computer-science/content/116-system-design/114-web-sockets.md
  17. 8
      content/roadmaps/103-computer-science/content/116-system-design/115-sse.md
  18. 11
      content/roadmaps/103-computer-science/content/116-system-design/readme.md
  19. 3
      content/roadmaps/114-software-architect/content/110-apis-and-integrations/102-graphql.md
  20. 11
      content/roadmaps/117-flutter/content/108-working-with-apis/103-restful-apis.md

@ -1 +1,8 @@
# Horizontal vs vertical scaling # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.section.io/blog/scaling-horizontally-vs-vertically/'>Scaling Horizontally vs. Scaling Vertically</BadgeLink>
<BadgeLink colorScheme='red' badgeText='Watch' href='https://www.youtube.com/watch?v=xpDnVSmNFX0'>System Design Basics: Horizontal vs. Vertical Scaling</BadgeLink>
<BadgeLink colorScheme='red' badgeText='Watch' href='https://www.youtube.com/watch?v=R99R-SNbo9g'>Vertical vs. Horizontal Scaling for Database Servers</BadgeLink>

@ -1 +1,6 @@
# Clustering # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://dev.to/karanpratapsingh/system-design-clustering-3726'>System Design: Clustering</BadgeLink>

@ -1 +1,7 @@
# Load balancing # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='red' badgeText='Watch' href='https://www.youtube.com/watch?v=galcDRNd5Ow'>Load Balancers 101</BadgeLink>
<BadgeLink colorScheme='red' badgeText='Watc' href='https://www.youtube.com/watch?v=gGLophKzJs8'>What is Load Balancing?</BadgeLink>

@ -1 +1,8 @@
# Caching # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#caching'>System Design - Caching</BadgeLink>
<BadgeLink colorScheme='red' badgeText='Watch' href='https://www.youtube.com/watch?v=joifNgoXXFk'>What is Caching | System Design Basics</BadgeLink>

@ -1 +1,7 @@
# Cdn # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#content-delivery-network-cdn'>Content Delivery Network (CDN) - System Design</BadgeLink>
<BadgeLink colorScheme='red' badgeText='Watch' href='https://www.youtube.com/watch?v=6DXEPcXKQNY'>Content Delivery Networks</BadgeLink>

@ -1 +1,7 @@
# Proxy # 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).
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#proxy'>Proxy - System Design</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://roadmap.sh/guides/proxy-servers'>Proxy Servers</BadgeLink>

@ -1 +1,7 @@
# Cap theorem # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='red' badgeText='Watch' href='https://www.youtube.com/watch?v=_RbsFXWRZ10'>What is CAP Theorem?</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://en.wikipedia.org/wiki/CAP_theorem'>CAP Theorem - Wikipedia</BadgeLink>

@ -1 +1,8 @@
# Queues # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo#message-queues'>Message Queues - System Design</BadgeLink>
<BadgeLink colorScheme='red' badgeText='Watch' href='https://www.youtube.com/watch?v=xErwDaOc-Gs'>What is a Message Queue?</BadgeLink>
<BadgeLink colorScheme='red' badgeText='Watch' href='https://www.youtube.com/watch?v=oUJbuFMyBDk'>What is a Message Queue and Where is it used?</BadgeLink>

@ -1 +1,6 @@
# Architectural styles # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://en.wikipedia.org/wiki/List_of_software_architecture_styles_and_patterns'>List of software architecture styles and patterns</BadgeLink>

@ -1 +1,10 @@
# Rest # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.codecademy.com/article/what-is-rest'>What is REST?</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.redhat.com/en/topics/api/what-is-a-rest-api'>What is a REST API?</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm'>Roy Fielding's dissertation chapter, "Representational State Transfer (REST)"</BadgeLink>
<BadgeLink colorScheme='green' badgeText='Course' href='https://restapitutorial.com/'>Learn REST: A RESTful Tutorial</BadgeLink>

@ -1 +1,6 @@
# Graphql # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.apollographql.com/tutorials/'>Apollo GraphQL Tutorials</BadgeLink>

@ -1 +1,13 @@
# Grpc # 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
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='blue' badgeText='Official Website' href='https://grpc.io/'>gRPC Website</BadgeLink>
<BadgeLink colorScheme='blue' badgeText='Official Website' href='https://grpc.io/docs/what-is-grpc/introduction/'>gRPC Introduction</BadgeLink>
<BadgeLink colorScheme='blue' badgeText='Official Website' href='https://grpc.io/docs/what-is-grpc/core-concepts/'>gRPC Core Concepts</BadgeLink>
<BadgeLink badgeText='Watch' href='https://youtu.be/XRXTsQwyZSU'>Stephane Maarek - gRPC Introduction</BadgeLink>

@ -1 +1,8 @@
# Cloud design patterns # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://learn.microsoft.com/en-us/azure/architecture/patterns/'>Cloud Design Patterns</BadgeLink>

@ -1 +1,7 @@
# Long polling # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://javascript.info/long-polling'>Long polling</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://stackoverflow.com/questions/11077857/what-are-long-polling-websockets-server-sent-events-sse-and-comet'>What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet?</BadgeLink>

@ -1 +1,6 @@
# Short polling # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://stackoverflow.com/questions/11077857/what-are-long-polling-websockets-server-sent-events-sse-and-comet'>What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet?</BadgeLink>

@ -1 +1,6 @@
# Web sockets # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.geeksforgeeks.org/what-is-web-socket-and-how-it-is-different-from-the-http/'>What is web socket and how it is different from the HTTP?</BadgeLink>

@ -1 +1,7 @@
# Sse # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://medium.com/yemeksepeti-teknoloji/what-is-server-sent-events-sse-and-how-to-implement-it-904938bffd73'>What is Server-Sent Events (SSE) and how to implement it?</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events'>Using server-sent events</BadgeLink>

@ -1 +1,10 @@
# System design # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://github.com/donnemartin/system-design-primer'>System Design Primer</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://dev.to/karanpratapsingh/system-design-the-complete-course-10fo'>System Design: The complete course</BadgeLink>
<BadgeLink colorScheme='red' badgeText='Watch' href='https://www.youtube.com/watch?v=Y-Gl4HEyeUQ'>System Design 101</BadgeLink>
<BadgeLink colorScheme='red' badgeText='Watch' href='https://www.youtube.com/watch?v=a2rcgzludDU'>Scaling the Unscalable</BadgeLink>
<BadgeLink colorScheme='red' badgeText='Watch' href='https://www.youtube.com/watch?v=YkGHxOg9d3M'>System design interview: Scale to 1 million users</BadgeLink>

@ -1,5 +1,6 @@
# GraphQL # 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. 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle> <ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.apollographql.com/tutorials/'>Apollo GraphQL Tutorials</BadgeLink> <BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.apollographql.com/tutorials/'>Apollo GraphQL Tutorials</BadgeLink>

@ -1 +1,10 @@
# Restful apis # 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.
<ResourceGroupTitle>Free Content</ResourceGroupTitle>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.codecademy.com/article/what-is-rest'>What is REST?</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.redhat.com/en/topics/api/what-is-a-rest-api'>What is a REST API?</BadgeLink>
<BadgeLink colorScheme='yellow' badgeText='Read' href='https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm'>Roy Fielding's dissertation chapter, "Representational State Transfer (REST)"</BadgeLink>
<BadgeLink colorScheme='green' badgeText='Course' href='https://restapitutorial.com/'>Learn REST: A RESTful Tutorial</BadgeLink>

Loading…
Cancel
Save