16 个系统设计面试的概念

要在系统设计方面表现出色,最关键的方面之一是深入了解基本的系统设计概念,例如负载平衡、缓存、分区、复制、数据库和代理。

1. 域名系统 (DNS)
当您在 Web 浏览器中输入域名时,DNS 负责查找关联的 IP 地址并将您的请求定向到正确的服务器。该过程首先是您的计算机向递归解析器发送查询,然后递归解析器搜索一系列 DNS 服务器,从根服务器开始,然后是顶级域 (TLD) 服务器,最后是权威名称服务器。一旦找到 IP 地址,递归解析器会将其返回到您的计算机,从而允许您的浏览器与目标服务器建立连接并访问所需的内容。

2. 负载均衡器
负载均衡器使用不同的算法来确定如何分配传入流量。常见的算法包括:

  1. 循环:请求以循环方式顺序均匀地分布在所有可用服务器上。
  2. 最少连接:负载均衡器将请求分配给活动连接最少的服务器,并优先考虑不太繁忙的服务器。
  3. IP 哈希:对客户端的 IP 地址进行哈希处理,结果值用于确定请求应定向到哪个服务器。此方法可确保特定客户端的请求始终路由到同一服务器,从而有助于维护会话持久性。


3. API 网关
API网关的主要功能包括:

  1. 请求路由:它根据预定义的规则和配置,将来自客户端的传入 API 请求定向到适当的后端服务或微服务。
  2. 身份验证和授权: API网关可以处理用户身份验证和授权,确保只有授权的客户端才能访问服务。它可以在将请求路由到后端服务之前验证 API 密钥、令牌或其他凭据。
  3. 速率限制和节流:为了保护后端服务免受过度负载或滥用,API 网关可以根据预定义的策略强制执行速率限制或节流来自客户端的请求。
  4. 缓存:为了减少延迟和后端负载,API网关可以缓存常用的响应,将它们直接提供给客户端,而无需查询后端服务。
  5. 请求和响应转换: API网关可以修改请求和响应,例如转换数据格式、添加或删除标头或修改查询参数,以确保客户端和服务之间的兼容性。

4. CDN
DN 的工作原理如下:

  1. 当用户从网站或应用程序请求内容时,请求将被定向到最近的 CDN 服务器(也称为边缘服务器)。
  2. 如果边缘服务器缓存了所请求的内容,则它直接将内容提供给用户。由于内容传输的距离较短,因此可以减少延迟并改善用户体验。
  3. 如果内容未缓存在边缘服务器上,则 CDN 会从源服务器或其他附近的 CDN 服务器检索内容。获取内容后,它会缓存在边缘服务器上并提供给用户。
  4. 为了确保内容保持最新,CDN 定期检查源服务器是否有更改并相应更新其缓存。

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

反向代理是位于一个或多个 Web 服务器前面的服务器,充当 Web 服务器和 Internet 之间的中介。当客户端向互联网上的资源发出请求时,该请求首先发送到反向代理。然后,反向代理将请求转发到其中一台 Web 服务器,该服务器将响应返回给反向代理。然后反向代理将响应返回给客户端。


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

7. 数据分区
在数据库中,水平分区(也称为分片)涉及将表的行划分为较小的表并将它们存储在不同的服务器或数据库实例上。这样做是为了将数据库的负载分布到多个服务器上并提高性能。

另一方面,垂直分区涉及将表的列划分为单独的表。这样做是为了减少表中的列数并提高仅访问少量列的查询的性能。


8. 数据库复制
数据库复制是一种用于跨不同服务器或位置维护同一数据库的多个副本的技术。数据库复制的主要目的是提高数据可用性、冗余和容错能力,确保系统即使在硬件故障或其他问题的情况下也能继续运行。
在复制数据库设置中,一台服务器充当主(或主)数据库,而其他服务器则充当副本(或从)数据库。该过程涉及在主数据库和副本之间同步数据,因此它们都具有相同的最新信息。数据库复制具有多种优势,包括:

  1. 改进的性能:通过在多个副本之间分配读取查询,您可以减少主数据库上的负载并缩短查询响应时间。
  2. 高可用性:如果主数据库出现故障或停机,副本可以继续提供数据,确保对应用程序的访问不间断。
  3. 增强的数据保护:在不同位置拥有多个数据库副本有助于防止因硬件故障或其他灾难导致的数据丢失。
  4. 负载平衡:副本可以处理读取查询,从而实现更好的负载分配并减少主数据库的整体压力。

9. 分布式消息系统
分布式消息传递系统能够以可靠、可扩展和容错的方式在多个可能在地理上分散的应用程序、服务或组件之间交换消息。它们通过解耦发送器和接收器组件来促进通信,使它们能够独立发展和操作。分布式消息传递系统在大规模或复杂的系统中特别有用,例如微服务架构或分布式计算环境中的系统。此类系统的示例包括 Apache Kafka 和 RabbitMQ。

10.微服务
微服务是一种架构风格,其中应用程序被构造为小型、松散耦合且可独立部署的服务的集合。每个微服务负责应用程序中的特定功能或域,并通过定义良好的 API 与其他微服务进行通信。这种方法与传统的整体架构不同,在传统的整体架构中,应用程序被构建为单个紧密耦合的单元。

微服务的主要特点是:

单一职责:每个微服务都专注于特定的功能或领域,遵循单一职责原则。这使得服务更易于理解、开发和维护。
独立性:微服务可以相互独立地开发、部署和扩展。这可以提高开发过程的灵活性和敏捷性,因为团队可以同时处理不同的服务,而不会影响整个系统。
去中心化:微服务通常是去中心化的,每个服务都拥有自己的数据和业务逻辑。这鼓励关注点分离,并使团队能够做出决策并选择最适合其特定要求的技术。
通信:微服务使用 HTTP/REST、gRPC 或消息队列等轻量级协议相互通信。这促进了互操作性,并使集成新服务或替换现有服务变得更加容易。
容错性:由于微服务是独立的,一个服务出现故障并不一定会导致整个系统出现故障。这有助于提高应用程序的整体弹性。

11. NoSQL 数据库
NoSQL 数据库可分为四种主要类型:

  1. 基于文档:这些数据库以类似文档的结构存储数据,例如 JSON 或 BSON。每个文档都是独立的,可以有自己独特的结构,使它们适合处理异构数据。基于文档的 NoSQL 数据库的示例包括 MongoDB 和 Couchbase。
  2. 键值:这些数据库将数据存储为键值对,其中键充当唯一标识符,值保存关联的数据。键值数据库对于简单的读写操作非常高效,并且可以轻松地进行分区和水平扩展。键值 NoSQL 数据库的示例包括 Redis 和 Amazon DynamoDB。
  3. 列族:这些数据库将数据存储在列族中,列族是相关列的组。它们旨在处理写入繁重的工作负载,并且对于使用已知的行键和列键查询数据非常高效。列族 NoSQL 数据库的示例包括 Apache Cassandra 和 HBase。
  4. 基于图:这些数据库旨在存储和查询具有复杂关系和互连结构的数据,例如社交网络或推荐系统。图数据库使用节点、边和属性来表示和存储数据,从而更容易执行复杂的遍历和基于关系的查询。基于图形的 NoSQL 数据库的示例包括 Neo4j 和 Amazon Neptune。

12. 数据库索引
索引通常建立在数据库表的一列或多列上。最常见的索引类型是 B 树索引,它以分层树结构组织数据,允许快速搜索、插入和删除操作。还有其他类型的索引,例如位图索引和哈希索引,每种索引都有其特定的用例和优点。
虽然索引可以显着提高查询性能,但它们也有一些权衡:

  1. 存储空间:索引会消耗额外的存储空间,因为它们会与原始表数据一起创建和维护单独的数据结构。
  2. 写入性能:当在表中插入、更新或删除数据时,关联的索引也必须更新,这会减慢写入操作。

13. 分布式文件系统
分布式文件系统是存储解决方案,旨在管理和提供对跨多个服务器、节点或机器(通常分布在网络上)的文件和目录的访问。它们使用户和应用程序能够访问和操作文件,就好像它们存储在本地文件系统上一样,即使实际文件可能物理存储在多个远程服务器上。分布式文件系统通常用于大规模或分布式计算环境中,以提供容错、高可用性和改进的性能。

14. 通知系统
它们用于向用户发送通知或警报,例如电子邮件、推送通知或短信。

15. 全文搜索
全文搜索使用户能够在应用程序或网站中搜索特定单词或短语。当用户查询时,应用程序或网站会返回最相关的结果。为了快速有效地做到这一点,全文搜索依赖于倒排索引,这是一种将单词或短语映射到它们出现的文档的数据结构。此类系统的一个例子是弹性搜索。

16. 分布式协调服务
分布式协调服务是旨在以可靠、高效和容错的方式管理和协调分布式应用程序、服务或节点的活动的系统。它们有助于维护一致性、处理分布式同步以及管理分布式环境中各种组件的配置和状态。分布式协调服务在大规模或复杂的系统中特别有用,例如微服务架构、分布式计算环境或集群数据库中的系统。此类服务的示例包括 Apache ZooKeeper、etcd、Consul。