
系统设计面试在设计上是非结构化的。
在这些访谈中,您需要解决一个没有标准解决方案的开放式设计问题。
因此,回答系统设计面试问题的两个最大挑战是:
- 要知道从哪里开始。
- 要知道您是否已经谈到了系统的所有重要部分。
为了简化这个过程,我提出了一个 系统设计主模板 ,上面图表示任何系统设计一部分的主要组件以及这些组件如何相互交互。
以下是对这些组件的简要描述:
1.域名系统(DNS)
DNS 是一个分层分布式系统,用于将人类可读的域名(例如 www.example.com)转换为 IP 地址(例如 192.168.1.1),计算机使用这些地址在 Internet 或专用网络上相互识别。DNS 的主要目的是通过使用有意义且易于记忆的域名而不是必须记住数字 IP 地址,使用户更容易访问网站和其他网络资源。
2.负载均衡器
负载 均衡器 是一种网络设备,可在多个后端服务器或服务之间分配传入的网络流量,以提高系统的性能和可用性。负载平衡器通常位于客户端和服务器之间,并使用各种算法在可用服务器之间分配传入请求,从而最大限度地提高性能并确保没有单个服务器不堪重负。这可以提高系统的整体可靠性和响应能力,因为它允许更均匀地分配工作负载并使系统能够处理更多的请求。
3.API网关
API 网关 (AG) 是一个服务器,充当一组微服务的单一入口点。AG 接收客户端请求,将它们转发到适当的微服务,然后将服务器的响应返回给客户端。AG负责路由、鉴权、限速等任务。
4.CDN
内容分发网络 (CDN) 是一个分布式服务器网络,部署在世界各地的多个位置。这些服务器旨在根据用户的地理位置向用户提供 Web 内容,例如图像、视频和其他静态文件。CDB 的主要目的是通过将 Web 内容缓存在离请求它的用户较近的服务器上来提高 Web 内容的性能和可用性。

内容分发网络
5. 正向代理与反向代理
转发 代理 ,也称为“代理服务器”或简称为“代理”,是位于一台或多台客户端计算机前面的服务器,充当客户端和 Internet 之间的中介。当客户端机器向 Internet 上的资源发出请求时,该请求首先被发送到转发代理。然后,转发代理代表客户端将请求转发到 Internet,并将响应返回给客户端。
反向 代理 是位于一个或多个 Web 服务器之前的服务器,充当 Web 服务器和 Internet 之间的中介。当客户端向 Internet 上的资源发出请求时,该请求首先被发送到反向代理。然后反向代理将请求转发到其中一个 Web 服务器,该服务器将响应返回给反向代理。然后反向代理将响应返回给客户端。

正向代理与反向代理
6.缓存
缓存是位于应用程序和原始数据源(例如数据库、文件系统或远程 Web 服务)之间的高速存储层。当应用程序请求数据时,首先在缓存中检查数据。如果在缓存中找到数据,则将其返回给应用程序。如果在缓存中找不到数据,则从其原始来源检索数据,将其存储在缓存中以备将来使用,然后返回给应用程序。在分布式系统中, 缓存 可以在多个地方完成,例如,客户端、DNS、CDN、负载均衡器、API 网关、服务器、数据库等。

缓存在什么地方
7.数据分区
在数据库中, 水平分区 ,也称为 分片 ,涉及将表的行分成更小的表并将它们存储在不同的服务器或数据库实例上。这样做是为了在多个服务器之间分配数据库的负载并提高性能。
另一方面, 垂直分区 涉及将表的列划分为单独的表。这样做是为了减少表中的列数并提高仅访问少量列的查询的性能。

数据分区
8.分片
它是一种用于通过在多个服务器或分片之间水平分区 数据来扩展数据库的技术。 分片 的目标是将数据和工作负载分布在多个服务器上,以便每个服务器可以处理总体数据和工作负载的较小部分。这有助于提高数据库的性能和可扩展性,因为每台服务器在处理较少数据时可以更有效地处理查询和更新。
基于范围的分片: 在这种方法中,数据根据键值(例如用户 ID 或时间戳)进行分区,并且数据根据键值的范围分布在各个分片中。例如,1-1000 范围内的所有用户 ID 可能存储在一个分片上,而 1001-2000 范围内的用户 ID 可能存储在另一个分片上。
基于散列的分片: 在这种方法中,散列函数用于根据键值在分片之间分布数据。例如,用户 ID 为 123 的所有数据可能存储在一个分片上,而用户 ID 为 456 的数据可能存储在另一个分片上。
基于目录的分片: 在这种方法中,中央目录用于将键值映射到存储数据的特定分片。该目录可用于确定一条数据属于哪个分片,并且可以从适当的分片中检索数据。
自定义分片: 在某些情况下,可能需要实施特定于数据库和使用它的应用程序的需要和要求的自定义分片策略。这可能涉及不同分片方法的组合或完全独特的方法。

数据库分片
9. 数据库复制
数据库复制是将数据从一个数据库复制和同步到一个或多个其他数据库的过程。这通常用于需要相同数据的多个副本以确保数据可用性、容错性和可扩展性的分布式系统。以下是前三种典型的数据库复制策略:

复制策略
10.分布式消息系统
分布式消息传递系统支持以可靠、可扩展和容错的方式在多个可能在地理上分散的应用程序、服务或组件之间交换消息。它们通过解耦发送方和接收方组件来促进通信,使它们能够独立发展和运行。分布式消息系统在大规模或复杂系统*特中**别有用,例如微服务架构或分布式计算环境中的系统。此类系统的示例有 Apache Kafka 和 RabbitMQ。
11.分布式文件系统
分布式文件系统是存储解决方案,旨在管理和提供对通常分布在网络上的多个服务器、节点或机器的文件和目录的访问。它们使用户和应用程序能够像存储在本地文件系统上一样访问和操作文件,即使实际文件可能物理存储在多个远程服务器上。分布式文件系统通常用于大规模或分布式计算环境,以提供容错、高可用性和改进的性能。
12.通知系统
这些用于向用户发送通知或警报,例如电子邮件、推送通知或短信。
13. 全文搜索
全文搜索使用户能够在应用程序或网站中搜索特定的单词或短语。当用户查询时,应用程序或网站会返回最相关的结果。为了快速有效地执行此操作,全文搜索依赖于倒排索引,这是一种将单词或短语映射到它们出现的文档的数据结构。此类系统的一个示例是 Elastic Search。
14.数据仓库
数据仓库是结构化和历史数据的大型集中存储库,用于组织内的报告、分析和决策制定。它收集、存储和管理来自各种来源的数据,例如交易数据库、外部数据源和应用程序系统,并以有助于高效查询和报告的方式组织数据。
数据仓库旨在支持对大量数据的高效检索和分析,使组织能够获得洞察力并做出数据驱动的决策。它们通常以高度结构化的格式存储数据,通常使用模式设计(例如星形或雪花模式)来优化查询性能。
15.分布式协调服务
分布式协调服务是旨在以可靠、高效和容错的方式管理和协调分布式应用程序、服务或节点的活动的系统。它们有助于维护一致性、处理分布式同步以及管理分布式环境中各种组件的配置和状态。分布式协调服务在大规模或复杂系统*特中**别有用,例如微服务架构、分布式计算环境或集群数据库中的系统。此类服务的示例有 Apache ZooKeeper、etcd、Consul。
结论
本文介绍了一个系统设计的主模板以及每一模块的简要说明,系统对您有所帮助。
原文:https://medium.com/gitconnected/system-design-master-template-how-to-answer-any-system-design-interview-question-ee5dc332acd5