- vừa được xem lúc

Blog#238: 🛠️16 System Design Concepts I Wish I Knew Before the Interview💡

0 0 19

Người đăng: NGUYỄN ANH TUẤN

Theo Viblo Asia

238

Hi, I'm Tuan, a Full-stack Web Developer from Tokyo 😊. Follow my blog to not miss out on useful and interesting articles in the future.

1. Domain Name System (DNS)

1.1 What is DNS?

The Domain Name System (DNS) is an essential component of the internet infrastructure. It is a decentralized and hierarchical naming system responsible for translating human-readable domain names, such as www.example.com, into machine-readable IP addresses, like 192.0.2.1. This translation enables seamless communication between computers, devices, and services over the internet.

1.2 How DNS Works

  • DNS Query: When a user enters a URL into their browser, the browser sends a DNS query to a DNS resolver, typically provided by an Internet Service Provider (ISP).
  • Root Server: If the resolver doesn't have the information cached, it forwards the query to a DNS root server, which points the resolver to the appropriate Top-Level Domain (TLD) server.
  • TLD Server: The TLD server directs the resolver to the authoritative name server responsible for the domain in question.
  • Authoritative Name Server: The authoritative name server provides the resolver with the corresponding IP address.
  • Response: The resolver returns the IP address to the browser, which then establishes a connection with the destination server.

2. Load Balancer

2.1 What is a Load Balancer?

A load balancer is a device or software that distributes incoming network traffic across multiple servers, ensuring that no single server is overwhelmed with too much traffic. By doing so, it improves the overall performance, availability, and reliability of applications and services.

2.2 Types of Load Balancing

  • Round Robin: Requests are distributed evenly across all servers in a cyclical manner.
  • Least Connections: Requests are directed to the server with the fewest active connections.
  • IP Hash: Requests are allocated based on a hash of the client's IP address, ensuring consistency for the user.

3. API Gateway

3.1 What is an API Gateway?

An API Gateway is a server that acts as an intermediary between clients and microservices. It manages, secures, and routes API requests to the appropriate microservices, abstracting the underlying complexity of the system.

3.2 Features of API Gateways

  • Centralized security: Authentication and authorization can be managed in one place, streamlining security measures.
  • Rate limiting: Control the number of requests a client can make within a specified timeframe, mitigating the risk of overloading services.
  • Request transformation: Modify requests and responses to match the requirements of different clients and services, facilitating efficient communication.

4. Content Delivery Network (CDN)

4.1 What is a CDN?

A Content Delivery Network (CDN) is a distributed network of servers that delivers web content to users based on their geographic location. By serving content from servers closer to the user, CDNs reduce latency and improve the overall user experience.

4.2 How CDNs Work

  • Caching: CDNs cache static content (e.g., images, stylesheets) at multiple edge locations around the world.
  • Edge server selection: When a user requests content, the CDN selects the edge server closest to the user to serve the cached content.
  • Fallback: If the edge server does not have the requested content, it retrieves it from the origin server, caches it, and delivers it to the user.

5. Forward Proxy vs. Reverse Proxy

5.1 Forward Proxy

A forward proxy is a server that sits between clients and the internet, forwarding client requests to the destination server. Clients can useforward proxies to bypass network restrictions, improve security, or save bandwidth by caching content.

5.2 Reverse Proxy

A reverse proxy is a server that sits between the internet and backend servers, forwarding client requests to the appropriate server. Reverse proxies can be used to balance load, improve security, and cache content for faster delivery.

6. Caching

6.1 What is Caching?

Caching is a technique used to store and serve frequently accessed data more efficiently. By storing a copy of data in a location closer to the user, caching reduces the time it takes to access that data, improving performance and reducing the load on backend systems.

6.2 Types of Caching

  • In-memory caching: Storing data in the server's RAM for fast access. Examples include Redis and Memcached.
  • Content Delivery Network (CDN) caching: Storing copies of static content at various CDN edge servers for faster delivery to users.
  • Database caching: Implementing caching mechanisms within databases to optimize query performance.

7. Data Partitioning

7.1 What is Data Partitioning?

Data partitioning is a technique used to divide a large dataset into smaller, more manageable chunks, which can be stored across multiple nodes in a distributed system. This improves performance, scalability, and fault tolerance.

7.2 Types of Data Partitioning

  • Horizontal partitioning (sharding): Dividing a dataset into partitions based on a specific attribute, such as user ID or geographic location.
  • Vertical partitioning: Separating a dataset into partitions based on different columns or attributes.
  • Consistent hashing: A partitioning method that distributes data evenly across nodes while minimizing data movement during node additions or removals.

8. Database Replication

8.1 What is Database Replication?

Database replication is the process of copying and maintaining database objects, such as tables and indexes, in multiple locations to improve data availability, performance, and fault tolerance.

8.2 Types of Database Replication

  • Master-Slave replication: A single master node receives write operations, while multiple slave nodes replicate the master's data and handle read operations.
  • Multi-Master replication: Multiple master nodes can receive write operations, with changes synchronized across all nodes.

9. Distributed Messaging Systems

9.1 What are Distributed Messaging Systems?

Distributed messaging systems facilitate communication between distributed components in a scalable and fault-tolerant manner. These systems enable asynchronous communication, decoupling sender and receiver components.

9.2 Examples of Distributed Messaging Systems

  • Apache Kafka: A distributed streaming platform often used for building real-time data pipelines and streaming applications.
  • RabbitMQ: A widely used open-source message broker that supports multiple messaging protocols.

10. Microservices

10.1 What are Microservices?

Microservices are a software architecture pattern where an application is composed of small, independent services that communicate via APIs. Each microservice is responsible for a specific functionality, allowing for greater flexibility, scalability, and maintainability.

10.2 Key Principles of Microservices

  • Single Responsibility: Each microservice should have a single, well-defined responsibility.
  • Loose Coupling: Microservices should be designed to minimize dependencies on other services.
  • Autonomous Deployment: Microservices should be independently deployable and upgradable.

11. NoSQL Databases

11.1 What are NoSQL Databases?

NoSQL (Not Only SQL) databases are non-relational databases designed to handle unstructured data, largee-scale data, and provide high availability and horizontal scalability. They often use flexible schema models and support various data types, such as key-value, document, column-family, and graph data.

11.2 Examples of NoSQL Databases

  • MongoDB: A popular document-based NoSQL database that stores data in JSON-like format.
  • Cassandra: A highly scalable and distributed column-family store that is designed for handling large amounts of data across many nodes.
  • Neo4j: A graph-based NoSQL database designed for storing and querying complex relationships between data entities.

12. Database Index

12.1 What is a Database Index?

A database index is a data structure that improves the speed of data retrieval operations on a database table by providing a more efficient way to look up rows based on specific column values. An index can be thought of as a reference that helps the database management system (DBMS) quickly locate the required data.

12.2 Types of Database Indexes

  • B-Tree index: The most common type of index, it organizes data in a balanced tree structure, allowing for fast search, insertion, and deletion operations.
  • Bitmap index: A compressed index type suitable for columns with a low cardinality (a small number of distinct values), such as gender or boolean values.
  • Hash index: An index type that uses a hash function to map column values to their corresponding row locations, providing fast retrieval for exact match queries.

13. Distributed File Systems

13.1 What are Distributed File Systems?

Distributed file systems are file systems that store data across multiple nodes in a network, allowing for the transparent sharing and access of files and directories among users and applications. They offer high availability, fault tolerance, and scalability.

13.2 Examples of Distributed File Systems

  • Hadoop Distributed File System (HDFS): A distributed file system designed to handle large datasets, providing high throughput access to data and fault tolerance.
  • Google File System (GFS): A proprietary distributed file system developed by Google to support its largee-scale data processing needs.

14. Notification System

14.1 What is a Notification System?

A notification system is a component within an application or service that sends notifications to users or other systems in response to specific events or triggers. These notifications can be delivered via various channels, such as email, SMS, or push notifications.

14.2 Components of a Notification System

  • Event Detection: Monitoring for specific events or triggers that warrant a notification.
  • Notification Generation: Creating the content and format of the notification based on the event.
  • Delivery: Sending the notification to the intended recipients via the appropriate channels.

15. Full-text Search

15.1 What is Full-text Search?

Full-text search is a search technique that enables users to search a large collection of documents or records based on the entire content of each document, rather than just metadata or keywords. This provides more accurate and relevant search results.

15.2 Full-text Search Implementation

  • Indexing: Analyzing and processing documents to create an inverted index, which maps terms to their occurrences within the documents.
  • Querying: Using the inverted index to efficiently search for documents containing specific terms or phrases.

16. Distributed Coordination Services

16.1 What are Distributed Coordination Services?

Distributed coordination services are systems that help manage and coordinate the various components of a distributed system, ensuring consistency, synchronization, and fault tolerance across nodes.

16.2 Examples of Distributed Coordination Services

  • Apache ZooKeeper: A popular distributed coordination service that provides a simple interface for managing configuration information, naming, synchronization, and group services in distributed applications.
  • etcd: A distributed key-value store that provides a reliable way to store configuration data and coordinate distributed systems, often used with Kubernetes for container orchestration.

Conclusion

By understanding these 16 system design concepts, you will be better prepared for system design interviews and be able to tackle complex problems that arise in real-world distributed systems. Keep in mind that each concept may have additional nuances and complexities, so further study and hands-on experience will be invaluable in mastering these essential concepts.

And Finally

As always, I hope you enjoyed this article and got something new. Thank you and see you in the next articles!

If you liked this article, please give me a like and subscribe to support me. Thank you. 😊

Ref

Bình luận

Bài viết tương tự

- vừa được xem lúc

[Bài dịch] - Thiết Kế Hệ Thống Cho Hàng Triệu Người Dùng

Thiết kế hệ thống hỗ trợ hàng triệu người dùng là một thử thách không nhỏ, nó đòi hỏi sự cải tiến liên tục và không ngừng. Ở bài viết, chúng ta sẽ xây dựng một hệ thống hỗ trợ một người dùng và dần dầ

0 0 46

- vừa được xem lúc

[System design] - Redis vs Kafka vs RabbitMQ

Khi sử dụng giao tiếp không đồng bộ trong hệ thống microservice, phổ biến nhất đó là chúng ta sẽ sử dụng một message broker. Message broker đảm bảo giao tiếp giữa các microservice một cách đáng tin cậ

0 0 56

- vừa được xem lúc

Nx Workspace - Anh Cả trong việc xây dựng frontend architecture

Chào anh em bạn hữu gần xa. Rãnh rỗi quá không biết làm gì nên chia sẻ cho anh em xíu về System Design.

0 0 100

- vừa được xem lúc

Các Thuật Toán Thường Dùng Cho Bộ Giới Hạn Truy Cập

Trong bất kỳ hệ thống nào thì một bộ giới hạn truy cập cũng là một yêu cầu cần thiết đế đáp ứng các yêu cầu về bảo mật cũng như tính an toàn hệ thống. .

0 0 25

- vừa được xem lúc

[System design] - Redis High Availibility với Sentinel và Replication

Bối cảnh. Bạn dùng redis để đệm dữ liệu cho 1 ứng dụng chat.

0 0 38

- vừa được xem lúc

[System design] - Keepalived High Availability

Đối với những mô hình dịch vụ cần đảm bảo tính sẵn sàng cao (High Availability – HA), thì việc hệ thống bị down là không thể chấp nhận được. Hiện có rất nhiều phần mềm, giải pháp để đảm bảo tính HA ch

0 0 40