查看原文
其他

16个系统设计中的核心概念(上)

学研妹 Java学研大本营 2024-01-02

介绍16个基本的系统设计概念

长按关注《Java学研大本营》

系统设计是计算机科学技术领域的重要主题。在系统设计中,对于负载均衡、缓存、分区、复制、数据库和代理等基本设计概念的深入理解是十分重要和必要的。这些概念是系统设计的关键要素,对于设计高质量的系统和应对各种挑战至关重要。通过掌握理解这些基本思想,对于提升设计水平和获取更好的设计成果非常有帮助。

本文介绍16个基本的系统设计概念。

1 域名系统(DNS,Domain Name System )

域名系统(DNS)是互联网基础架构的核心组成部分,将人类友好的域名转换为相应的IP地址。它的功能类似于互联网的电话簿,允许用户通过键入易于记忆的域名(如www.designgurus.io)而不是计算机用于相互识别的数字IP地址(如“192.0.2.1”)来访问网站和服务。

当在网络浏览器中输入一个域名时,DNS负责查找相关的IP地址并将您的请求引导到正确的服务器。该过程始于您的计算机向递归解析器发送查询请求,然后递归解析器搜索一系列的DNS服务器,从根服务器开始,然后是顶级域(TLD)服务器,最后是权威名称服务器。一旦找到IP地址,递归解析器将其返回给您的计算机,使您的浏览器能够与目标服务器建立连接并访问所需的内容。

2 负载均衡器(Load Balancer)

负载均衡器是一种网络设备或软件,用于将传入的网络流量分配到多个服务器,以确保资源的最佳利用、降低延迟并保持高可用性。它在扩展应用程序和有效管理服务器工作负载方面发挥着至关重要的作用,特别是在流量突增或请求在服务器之间分布不均的情况下。

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

  • 轮询:请求按照顺序循环地均匀分布到所有可用服务器上。

  • 最少连接:负载均衡器将请求分配给活动连接最少的服务器,优先选择负载较轻的服务器。

  • IP 哈希:客户端的 IP 地址经过哈希计算,得到的值用于确定请求应该发送到哪个服务器。这种方法可以确保特定客户端的请求始终被路由到同一台服务器上,有助于维持会话持久性。

3 API 网关(API Gateway)

API 网关是一个服务器或服务,充当外部客户端与应用程序内部微服务或基于 API 的后端服务之间的中间人。它是现代架构中的关键组件,特别适用于基于微服务的系统,可以简化通信过程,并为客户端提供访问各种服务的单一入口点。

API 网关的主要功能包括:

  • 请求路由:根据预定义的规则和配置,将来自客户端的 API 请求定向到适当的后端服务或微服务。

  • 身份验证和授权:API 网关可以处理用户的身份验证和授权,确保只有经过授权的客户端可以访问服务。它可以验证 API 密钥、令牌或其他凭据,然后将请求路由到后端服务。

  • 速率限制和流量控制:为了保护后端服务免受过载或滥用,API 网关可以根据预定义的策略强制执行速率限制或对来自客户端的请求进行流量控制。

  • 缓存:为了降低延迟和后端负载,API 网关可以缓存频繁使用的响应,直接提供给客户端,而无需查询后端服务。

  • 请求和响应转换:API 网关可以修改请求和响应,例如转换数据格式、添加或删除标头,或修改查询参数,以确保客户端与服务之间的兼容性。

4 内容分发网络(CDN,Content Delivery Network)

内容分发网络(CDN)是由分布在全球各地的服务器组成的网络,用于存储和传递内容,如图片、视频、样式表和脚本,以从地理上更接近用户的位置提供服务。CDN旨在改善内容传递到最终用户的性能、速度和可靠性,无论用户与源服务器的位置关系如何。

CDN的工作原理如下:

  • 当用户请求网站或应用程序的内容时,请求会被定向到最近的CDN服务器,也称为边缘服务器。

  • 如果边缘服务器已经缓存了所请求的内容,它会直接向用户提供内容。这样可以减少延迟并改善用户体验,因为内容传输的距离更短。

  • 如果边缘服务器上没有缓存所请求的内容,CDN会从源服务器或其他附近的CDN服务器检索内容。一旦获取到内容,它会被缓存在边缘服务器上并提供给用户。

  • 为了确保内容保持最新,CDN会定期检查源服务器是否有变更,并相应地更新缓存。

5 正向代理与反向代理(Forward Proxy vs. Reverse Proxy)

正向代理,也称为“代理服务器”或简称为“代理”,是位于一个或多个客户机前面的服务器,充当客户机与互联网之间的中间人。当客户机请求互联网上的资源时,请求首先发送到正向代理。正向代理会代表客户机将请求转发到互联网,并将响应返回给客户机。

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

6 缓存(Caching)

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

7 数据分区(Data Partitioning)

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

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

8 数据库复制(Database Replication)

数据库复制是一种技术,用于在不同的服务器或位置上维护同一数据库的多个副本。数据库复制的主要目的是提高数据的可用性、冗余性和容错性,确保系统在硬件故障或其他问题的情况下继续运行。

在复制数据库的设置中,一个服务器充当主数据库(或主库),而其他服务器则充当副本(或从库)。该过程涉及在主数据库和副本之间同步数据,以使它们都具有相同的最新信息。数据库复制提供了多个优点,包括:

  • 提高性能:通过在多个副本之间分布读查询,可以减轻主数据库的负载并提高查询响应时间。

  • 高可用性:在主数据库发生故障或停机的情况下,副本可以继续提供数据,确保应用程序的不间断访问。

  • 增强数据保护:在不同位置拥有数据库的多个副本有助于防止由于硬件故障或其他灾难导致的数据丢失。

  • 负载均衡:副本可以处理读查询,从而实现更好的负载分配,减轻主数据库的总体压力。

推荐书单

《3D图形系统设计与实现》

《3D图形系统设计与实现》详细阐述了与3D图形系统设计与实现相关的基本解决方案,主要包括对象和图形设备、交互式图形界面、几何体、颜色、数字图像、3D场景描述、三维几何体模型、建模技术、层次结构和体系结构对象、视见相机转换、视见的表面剪裁、光栅化、可见表面计算、局部光照模型、全局光照、贴图技术、着色机制,以及三维图形系统等内容。此外,《3D图形系统设计与实现》还提供了相应的示例,以帮助读者进一步理解相关方案的实现过程。   《3D图形系统设计与实现》适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。

购买链接:https://item.jd.com/12644925.html


精彩回顾

系统设计必会,如何编写REST API文档

12个系统设计中必知必会的微服务模式(上)

12个系统设计中必知必会的微服务模式(下)

8个要点,彻底比较IntelliJ IDEA专业版和社区版

超简单,在IntelliJ IDEA中使用JUnit和Mockito进行单元测试

长按关注《Java学研大本营》
长按访问【IT今日热榜】,发现每日技术热点
继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存