图片
要在系统设计中脱颖而出,深刻理解诸如负载均衡、缓存、分区、复制、数据库和代理等基本系统设计概念至关重要。
在掌握这个主模板的基础上,我们将讨论18个重要的系统设计概念。以下是每个概念的简要描述:
域名系统(DNS)是互联网基础设施的一个基本组成部分,将用户友好的域名转换为其相应的IP地址。它充当了互联网的电话簿,允许用户通过输入易于记忆的域名而不是计算机用于识别彼此的数值IP地址(如“192.0.2.1”)来访问网站和服务。
当您在Web浏览器中输入域名时,DNS负责查找相关的IP地址并将您的请求发送到适当的服务器。这个过程从您的计算机向递归解析器发送查询开始,然后递归解析器搜索一系列DNS服务器,从根服务器开始,然后是顶级域(TLD)服务器,最终是权威域名服务器。一旦找到IP地址,递归解析器将其返回给您的计算机,允许您的浏览器与目标服务器建立连接并访问所需的内容。
负载均衡器是一种用于分发入站网络流量到多个服务器的网络设备或软件,以确保最佳资源利用、降低延迟并保持高可用性。在出现突发流量或服务器请求不均匀分布的情况下,负载均衡器在扩展应用程序和有效管理服务器工作负载方面发挥着至关重要的作用。
负载均衡器使用各种算法来确定入站流量的分发。一些常见的算法包括:
API网关是一种充当外部客户端与应用程序的内部微服务或基于API的后端服务之间中间件的服务器或服务。它是当今体
系结构的重要组件,特别是在基于微服务的系统中,它简化了通信过程,为客户端提供访问各种服务的单一入口点。
API网关的主要功能包括:
内容交付网络(CDN)是一个分布式服务器网络,用于存储和传递内容,如图像、视频、样式表和脚本,以使用户可以从地理位置更接近他们的位置访问这些内容。CDN旨在提高内容传递的性能、速度和可靠性,无论用户相对于原始服务器的位置如何。以下是CDN的运作方式:
正向代理,也称为“代理服务器”或简称“代理”,是位于一个或多个客户机之前的服务器,充当客户机和互联网之间的中介。当客户机请求互联网上的资源时,请求首先发送到正向代理。正向代理然后代表客户机将请求发送到互联网,然后将响应返回给客户机。
另一方面,反向代理是位于一个或多个Web服务器之前的服务器,充当Web服务器和互联网之间的中介。当客户端请求互联网上的资源时,请求首先发送到反向代理。反向代理然后将请求转发到其中一个Web服务器,然后将响应返回给客户端。
缓存是位于应用程序和原始数据源(如数据库、文件系统或远程Web服务)之间的高速存储层。当应用程序请求数据时,首先检查缓存。如果数据存在于缓存中,将返回给应用程序。如果在缓存中找不到数据,则从其原始来源检索数据,将其存储在缓存中以备将来使用,然后返回给应用程序。在分布式系统中,缓存可以出现在多个位置,包括客户端、DNS、CDN、负载均衡器、API网关、服务器、数据库等等。
在数据库中,水平分区,通常称为分片,涉及将表的行分成较小的表,并存储在不同的服务器或数据库实例上。这种方法用于在多个服务器之间分发数据库负载,从而提高性能。
相反,垂直分区涉及将表的列分成单独的表。这个技术旨在减少表中的列数,提高只访问有限数量列的查询性能。
数据库复制是一种用于在不同服务器或位置之间维护相同数据库的方法。数据库复制的主要目标是增加数据的可用性、冗余和容错性,以确保系统即使在硬件故障或其他问题出现时仍然可以正常运行。
在复制数据库配置中,一个服务器充当主数据库,而其他服务器则充当副本。这涉及在主数据库和副本之间同步数据,以确保它们都具有相同的最新信息。数据库复制提供了多个优点,包括:
分布式消息系统为多个可能分布在不同地理位置的应用程序、服务或组件之间交换消息提供了可靠、可扩展和容错的方式。这些系统通过解耦发送方和接收方组件,使它们能够独立开发和运行。分布式消息系统在大型或复杂系统中尤其有价值,比如微服务架构或分布式计算环境中。这些系统的示例包括Apache Kafka和RabbitMQ。
微服务代表一种架构风格,其中一个应用程序被组织成一组小型、松散耦合的、可以独立部署的服务。每个微服务负责应用程序内的特定功能或领域,并通过明确定义的API与其他微服务通信。这种方法不同于传统的单体架构,传统单体架构将应用程序构建为单一、紧密耦合的单元。
微服务的主要特点包括:
数据库是一种结构化数据的持久存储系统,用于存储、检索和管理数据。数据库在各种应用程序和系统中都有广泛的应用,从基本的数据存储到复杂的分析和报告系统。主要的数据库类型包括:
前端缓存是一种用于缓存Web应用程序的用户界面(HTML、CSS、JavaScript等)以提高性能的技术。前端缓存可以通过减少从服务器请求资源的次数、降低延迟并提供更快的用户体验来改进Web应用程序的性能。前端缓存通常采用浏览器缓存、CDN和缓存服务等多种形式。
后端缓存是一种用于缓存应用程序的数据和计算结果以提高性能的技术。它将数据存储在内存中,以便将来更快地检索。后端缓存通常用于存储数据库查询结果、API响应和计算密集型任务的结果。一些常见的后端缓存技术包括Redis和Memcached。
安全性是系统设计中至关重要的概念。它包括身份验证、授权、加密、跨站脚本(XSS)和跨站请求伪造(CSRF)防护、数据保护、网络安全等。系统设计应考虑各种威胁和安全攻击,以确保系统的数据和用户得到保护。
高可用性和容错性是系统设计的关键目标。高可用性涉及确保系统在面临故障或中断时保持可用。容错性涉及系统在出现故障或错误时能够恢复正常运行。实现高可用性和容错性通常需要使用负载均衡、故障转移、冗余和监控等技术。
事件驱动架构是一种应用程序架构,其中应用程序的不同组件通过事件进行通信。事件是应用程序中发生的特定动作或状态更改,可以触发其他组件的响应。事件驱动架构通常用于实现松散耦合的组件,以便能够更轻松地扩展和修改系统。
在系统设计中,日志和监控是关键工具,用于识别和解决性能问题、故障和安全问题。日志记录有助于跟踪系统的操作和问题,而监控则提供了实时的性能数据和警报。在分布式系统中,有效的日志和监控可以帮助工程师快速诊断问题和优化系统。
测试是系统设计和开发的关键组成部分。测试策略涉及确定测试范围、创建测试计划、编写测试用例、执行测试、自动化测试、性能测试等。有效的测试策略有助于确保系统的可靠性、性能和安全性。
这18个系统设计概念涵盖了构建可伸缩、高性能、高可用性和安全的系统所需的核心知识。