英文 | https://levelup.gitconnected.com/16-system-design-concepts-i-wish-i-knew-before-the-interview-b8586e40a73b
要在关于系统设计的面试中脱颖而出,最关键的方面之一是深入理解基本的系统设计概念,例如,负载平衡、缓存、分区、复制、数据库和代理。
根据我自己的经验,我确定了 16 个关键概念,它们可以帮助你提高解决系统设计问题的能力。
这些概念的范围从理解 API 网关的复杂性和掌握负载平衡技术到掌握 CDN 的重要性和理解缓存在现代分布式系统中的作用。阅读完本文时,你将全面了解这些基本思想,并有信心在下一次面试中应用它们。
系统设计面试本质上是非结构化的。在面试过程中,很难跟踪事情并确保你已经触及设计的所有基本方面。
为了简化这个过程,我开发了一个系统设计主模板,可以帮助你回答任何系统设计面试问题,深入了解任何系统设计中可能涉及的关键组件。
请牢记这个主模板,我们将讨论 16 个基本系统设计概念。
现在我们开始吧。
1.域名系统(DNS)
域名系统 (DNS) 是互联网基础设施的基本组成部分,可将人类友好的域名转换为相应的 IP 地址。
它的功能类似于 Internet 电话簿,允许用户通过键入易于记忆的域名(例如 www.google.com)而不是计算机用来相互识别的数字 IP 地址(例如“192.168.2.1”)来访问网站和服务。
当你在 Web 浏览器中输入域名时,DNS 负责查找关联的 IP 地址并将你的请求定向到正确的服务器。
该过程从你的计算机向递归解析器发送查询开始,然后搜索一系列 DNS 服务器,从根服务器开始,然后是顶级域 (TLD) 服务器,最后是权威名称服务器。
找到 IP 地址后,递归解析器会将其返回到你的计算机,让你的浏览器与目标服务器建立连接并访问所需的内容。
2.负载均衡器
负载均衡器是一种网络设备或软件,可在多个服务器之间分配传入的网络流量,以确保最佳的资源利用率、减少延迟并保持高可用性。
它在扩展应用程序和有效管理服务器工作负载方面起着至关重要的作用,尤其是在流量突然激增或服务器之间请求分布不均的情况下。
负载均衡器使用不同的算法来确定如何分配传入流量。
常见的算法包括:
3.API网关
API 网关是一种服务器或服务,充当外部客户端与应用程序的内部微服务或基于 API 的后端服务之间的中介。它是现代架构中的一个重要组件,尤其是在基于微服务的系统中,它简化了通信过程并为客户端提供了访问各种服务的单一入口点。
API网关的主要功能包括:
4.CDN
内容分发网络 (CDN) 是一种分布式服务器网络,用于存储图像、视频、样式表和脚本等内容并将其分发给地理位置较近的用户。CDN 旨在提高向最终用户交付内容的性能、速度和可靠性,无论他们相对于原始服务器的位置如何。
CDN 的工作原理如下:
5. 正向代理与反向代理
转发代理,也称为“代理服务器”或简称为“代理”,是位于一台或多台客户端计算机前面并充当客户端和 Internet 之间的中介的服务器。
当客户端机器向 Internet 上的资源发出请求时,该请求首先被发送到转发代理。然后,转发代理代表客户端将请求转发到 Internet,并将响应返回给客户端。
反向代理是位于一个或多个 Web 服务器之前的服务器,充当 Web 服务器和 Internet 之间的中介。
当客户端向 Internet 上的资源发出请求时,该请求首先被发送到反向代理。
然后反向代理将请求转发到其中一个 Web 服务器,该服务器将响应返回给反向代理。然后反向代理将响应返回给客户端。
6.缓存
缓存是位于应用程序和原始数据源(例如数据库、文件系统或远程 Web 服务)之间的高速存储层。
当应用程序请求数据时,首先在缓存中检查数据。如果在缓存中找到数据,则将其返回给应用程序。
如果在缓存中找不到数据,则从其原始来源检索数据,将其存储在缓存中以备将来使用,然后返回给应用程序。
在分布式系统中,缓存可以在多个地方完成,例如,客户端、DNS、CDN、负载均衡器、API 网关、服务器、数据库等。
7.数据分区
在数据库中,水平分区(也称为分片)涉及将表的行划分为更小的表并将它们存储在不同的服务器或数据库实例上。这样做是为了在多个服务器之间分配数据库的负载并提高性能。
另一方面,垂直分区涉及将表的列划分为单独的表。这样做是为了减少表中的列数并提高仅访问少量列的查询的性能。
8. 数据库复制
数据库复制是一种用于跨不同服务器或位置维护同一数据库的多个副本的技术。
数据库复制的主要目的是提高数据可用性、冗余性和容错性,确保系统即使在硬件故障或其他问题的情况下也能继续运行。
在复制数据库设置中,一台服务器充当主(或主)数据库,而其他服务器充当副本(或从属)。该过程涉及在主数据库和副本之间同步数据,因此它们都具有相同的最新信息。
数据库复制有几个好处,包括:
9.分布式消息系统
分布式消息传递系统支持以可靠、可扩展和容错的方式在多个可能在地理上分散的应用程序、服务或组件之间交换消息。
它们通过解耦发送方和接收方组件来促进通信,使它们能够独立发展和运行。分布式消息系统在大规模或复杂系统中特别有用,例如微服务架构或分布式计算环境中的系统。此类系统的示例有 Apache Kafka 和 RabbitMQ。
10.微服务
微服务是一种架构风格,其中应用程序被构造为小型、松散耦合且可独立部署的服务的集合。
每个微服务负责应用程序中的特定功能或域,并通过定义明确的 API 与其他微服务进行通信。
这种方法与传统的单体架构不同,在传统单体架构中,应用程序被构建为一个紧密耦合的单元。
微服务的主要特点是:
11. NoSQL 数据库
NoSQL 数据库或“Not Only SQL”数据库是非关系数据库,旨在存储、管理和检索非结构化或半结构化数据。
它们为依赖结构化数据和预定义模式的传统关系数据库提供了替代方案。NoSQL 数据库因其灵活性、可扩展性和处理大量数据的能力而变得流行,使它们非常适合现代应用程序、大数据处理和实时分析。
NoSQL 数据库可以分为四种主要类型:
12.数据库索引
数据库索引是提高数据库查询操作速度和效率的数据结构。它们的工作方式类似于书中的索引,允许数据库管理系统 (DBMS) 快速定位与特定值或值集关联的数据,而无需搜索表中的每一行。
通过为所需数据提供更直接的路径,索引可以显着减少从数据库检索信息所需的时间。
索引通常建立在数据库表的一个或多个列上。最常见的索引类型是 B 树索引,它以分层树结构组织数据,允许快速搜索、插入和删除操作。
还有其他类型的索引,例如位图索引和哈希索引,每种索引都有其特定的用例和优势。
虽然索引可以显着提高查询性能,但它们也有一些折衷:
13.分布式文件系统
分布式文件系统是存储解决方案,旨在管理和提供对通常分布在网络上的多个服务器、节点或机器的文件和目录的访问。
它们使用户和应用程序能够像存储在本地文件系统上一样访问和操作文件,即使实际文件可能物理存储在多个远程服务器上。
分布式文件系统通常用于大规模或分布式计算环境,以提供容错、高可用性和改进的性能。
14.通知系统
这些用于向用户发送通知或警报,例如电子邮件、推送通知或短信。
15. 全文搜索
全文搜索使用户能够在应用程序或网站中搜索特定的单词或短语。当用户查询时,应用程序或网站会返回最相关的结果。
为了快速有效地执行此操作,全文搜索依赖于倒排索引,这是一种将单词或短语映射到它们出现的文档的数据结构。
此类系统的一个示例是 Elastic Search。
16.分布式协调服务
分布式协调服务是旨在以可靠、高效和容错的方式管理和协调分布式应用程序、服务或节点的活动的系统。
它们有助于维护一致性、处理分布式同步以及管理分布式环境中各种组件的配置和状态。
分布式协调服务在大规模或复杂系统中特别有用,例如微服务架构、分布式计算环境或集群数据库中的系统。
此类服务的示例有 Apache ZooKeeper、etcd、Consul。
结论
通过使用上述系统设计概念和模板,最大限度地提高系统设计面试的机会。
希望今天这篇文章内容对你有所帮助,感谢你的阅读。