每一次点击背后:理解 Client–Server Architecture

发布: (2025年12月4日 GMT+8 13:41)
3 min read
原文: Dev.to

Source: Dev.to

Introduction

客户端‑服务器架构是现代应用开发中最基础的模型之一。

  • Client – 发起请求的用户或应用程序
  • Server – 处理请求并返回响应的机器

当用户想要访问服务器时,最简单的方法是 ping 服务器的 IP 地址。然而,IP 地址难以记忆,使得直接访问不切实际。为了解决这个问题,我们使用 域名系统(DNS)

硬件受限的服务器(例如,2 CPU 和 4 GB RAM)只能处理一定数量的请求。当流量显著增加时,用户可能会遇到延迟,甚至服务器会变得无响应。

Scaling Strategies

Vertical Scaling (Scaling Up)

增加单台服务器的物理资源,例如升级到 16 CPU 和 128 GB RAM。

Pros

  • 架构更简单(单服务器)

Cons

  • 流量低时资源浪费
  • 扩容期间需要停机,因为服务器必须重启
  • 硬件限制——存在一个最大容量,超过后无法再升级

Horizontal Scaling (Scaling Out)

复制多个配置相同的小服务器(例如,多台 2‑CPU、4‑GB‑RAM 服务器)。

Pros

  • 添加或移除服务器时无需停机
  • 成本效率更高
  • 高容错性
  • 在高峰期能够高效管理流量

Consideration

  • 每台克隆的服务器都会获得自己的 IP 地址,这就提出了一个问题:如果 DNS 只指向一个地址,如何处理多个服务器 IP?

Handling Multiple Server IPs

当存在多台服务器时,通常会在它们前面放置一个 负载均衡器。负载均衡器接收指向单一 DNS 名称的流量,然后根据选定的算法(例如,轮询、最少连接、加权分配)将请求分配到服务器 IP 池中。

Critical Design Considerations

  • Load balancing decision logic – 负载均衡器如何决定将每个请求发送到哪台服务器?
  • Session persistence – 如何在多台服务器之间保持用户会话(例如登录会话)?
  • Auto‑scaling – 当流量突然增加时,自动伸缩组是如何工作的?
  • Shared storage – 当服务器分布式部署时,应用程序如何存储共享文件?
  • Health checking – 健康检查如何确保流量永远不会被发送到故障服务器?
Back to Blog

相关文章

阅读更多 »