想象一下你刚刚推出一个网络应用程序。
一开始,一切都很简单。
您有一个后端服务器,一个数据库,以及几个用户.
你的申请很有效 然后有些东西会改变。 100个用户变成1000个,1000个变成10,000个,10,000个变成10万个.
突然,你的服务器使用更多的CPU和内存,响应时间不断增加,请求开始失败.
你面对一个基本的系统设计问题: 你怎么让你的系统处理更多的交通?
这就是缩放的地方。
有两种基本方法: 垂直放大- 水平放大- 缩放 理解差异是系统设计中最早的重要概念之一.
什么是缩放?
在软件系统中,规模化是随着系统工作量增加而提高能力的能力.
这种工作量可能意味着: 更多的用户 更多的请求 更多的数据 更多的同时连接 更多的背景工作 更高的高峰期流量 假设您的服务器目前可以处理每秒1,000个请求 。
如果您的应用程序增长并开始接收每秒5,000个请求,您需要额外的容量.
您有两个广泛的选择: 使现有的服务器更强大 。
或:多添加服务器.
这就是纵向和横向尺度的根本区别.
1.
纵向放大 -- -- 扩大纵向放大意味着增加现有机器的资源。
与其增加更多的服务器,不如让目前的服务器更强大.
例如: 在 你升级它: 之后 应用架构没有根本改变.
你只是给了现有的机器更多的资源。
正因为如此,纵向缩放往往是在应用初期提高能力的最简单的方式。
为什么垂直放大是吸引人 想象一下你在运行一个小应用程序 您的服务器已达到 80% 的 CPU 利用率 。
您可以立即引入: 多个服务器 A 负荷平衡分配会话 服务发现 额外监测 更多部署复杂度 但是,这可能没有必要。
相反,更新机器可能会解决问题。
纵向放大的优点 简单易行,实施最小的建筑改变 方便操作的机器 少用,可以快速增加能力 对于小型或中等规模的应用来说,简单化可能是一个主要优势.
垂直缩放的问题 问题是单机有限度.
你可以不断提高CPU,RAM,存储和网络容量,但最终会到达一个硬件,平台,或成本边界.
更重要的是,你的系统可能仍然严重依赖一台机器。
考虑: 如果服务器失败会怎样?
你的整个申请可能都找不到 这引入了另一个重要的系统设计概念:一个单一的失败点.
垂直缩放可以提高容量,但简单地使一款机器更大并不能自动提供冗余.
这种区分很重要:扩大和提供是相互关联的,但它们不是一回事。
2.
横向扩大——横向扩大采用不同的办法。
与其让一个服务器变大,不如添加更多的服务器或实例.
例如: 成为前:现在可以将请求分布在多个服务器上.
如果流量增加,您可以添加额外实例: 这就是为什么横向缩放也被称为缩放.
为什么水平缩放改变架构 乍一看,水平缩放看起来很简单:"只要添加更多的服务器".
但添加机器引入了完全不同的一类问题.
现在您的应用程序必须处理: 网络通信 负载平衡共享状态会话管理 服务器失败 数据一致性 监测多个实例的部署 你从想一台机器转向想一个分布式系统。
这就是系统设计变得有趣得多的地方.
负载平衡器的作用 如果您有多个服务器