今天,我们将学习可扩展性🚀 如果您想知道什么是可扩展性,我们如何衡量它,以及扩展软件的方法是什么,那么这篇文章适合您。
我将以非常简单的方式解释所有概念,这篇文章的目标受众尤其是对工程学习和成长充满热情的初级工程师🚀
PS:这篇文章不包括技术实现,而是在实现它们之前你应该了解的核心概念的知识。
让我们开始吧🔓
什么是可扩展性?
首先,我们要了解什么是可扩展性。扩展系统意味着什么?
" 可扩展性是一种调整系统容量以经济高效地满足需求的能力。"
核心概念
-
可扩展性通常意味着在不影响用户体验的情况下处理更多用户、客户端、数据、事务或请求的能力。
-
重要的是要记住,可扩展性应该允许我们缩小规模和扩大规模,并且规模应该相对便宜且快速。
如何衡量可扩展性
现在我们知道了可扩展性是什么,让我们讨论如何衡量系统的可扩展性。系统的可扩展性取决于许多因素,但如果我们缩小它们的范围,我们可以考虑三个主要的衡量标准来衡量系统的能力。
- 处理数据
- 更高的并发请求
- 更高的互动率
处理数据
随着您的业务增长并变得越来越受欢迎,您将处理越来越多的数据。
如果我们以 hashnode 为例,数据每天都在增加。Hashnode 必须有效地处理更多的用户帐户和博客,以及更多的数据。
处理更多数据会给您的系统带来压力,因为需要对数据进行排序、搜索、从磁盘读取、写入磁盘以及通过网络发送。
- Facebook每天产生4 PB的数据。
- Twitter每天产生12 TB的数据。
- 截至 2021 年,活跃的 Instagram 用户超过 10 亿。
从上面的示例中,您可以衡量这些系统的规模和可扩展性。他们每天处理大量数据。
更高的并发请求
并发衡量您的系统可以同时服务的客户端数量。如果您正在构建 Web 应用程序,并发性意味着有多少用户可以同时使用您的应用程序,而不会影响他们的用户体验。
并发性很困难,因为您的服务器的中央处理单元 (CPU) 和执行线程数量有限。这更加困难,因为您可能需要同步代码的并行执行以确保数据的一致性。更高的并发意味着更多的开放连接、更多的活动线程、更多的消息同时被处理,以及更多的 CPU 上下文切换。
- Twitter在全球拥有3.965 亿用户。
- Instagram每天有5 亿活跃用户。
你能想象这些系统有多并发吗?🤯
更高的互动率
可伸缩性的第三个衡量标准是系统与用户之间的交互速率。它与并发有关,但维度略有不同。交互率衡量您的客户与您的服务器交换信息的频率。
例如,如果您正在构建一个网站,您的客户可以在几秒钟内从一个页面导航到另一个页面。交互速率可以更高或更低,与并发用户的数量无关,它更多地取决于您正在构建的应用程序的类型。与交互率相关的主要挑战是延迟。
延迟:延迟是数据从网络上的一个点传递到另一个点所需的时间。
扩展软件系统
现在我们已经了解了如何衡量可伸缩性,现在让我们讨论如何扩展软件系统以满足需求。
有两种类型的缩放:
- 垂直缩放
- 水平缩放
垂直缩放
垂直可扩展性是通过升级硬件和/或网络吞吐量来实现的。它通常是短期可扩展性的最简单解决方案,因为它不需要对您的应用程序进行架构更改。如果您使用 8GB 内存运行服务器,只需更换硬件即可轻松升级到 32GB 甚至 128GB。您不必修改应用程序的工作方式或添加任何抽象层来支持这种扩展方式。如果您将应用程序托管在虚拟服务器上,垂直扩展可能就像单击几下命令将虚拟服务器实例升级到更强大的实例一样简单。
垂直缩放的优势
有多种方法可以垂直扩展系统。他们之中有一些是:
-
通过在独立磁盘冗余阵列 (RAID) 阵列中添加更多硬盘驱动器来增加更多 I/O 容量。
-
通过切换到固态驱动器 (SSD) 来缩短 I/O 访问时间
-
通过增加 RAM 来减少 I/O 操作。
-
通过升级网络接口或安装额外的接口来提高网络吞吐量。
-
切换到具有更多处理器或更多虚拟内核的服务器。具有 12 甚至 24 线程(虚拟内核)的服务器价格实惠,足以成为合理的扩展选项。
如您所见,垂直扩展只不过是添加或改进服务器机器的资源。这是一个很好的选择,特别是对于非常小的应用程序或者如果您有能力进行硬件升级。
垂直缩放的缺点
然而,垂直缩放也有一些严重的限制。一些缺点是:
- 超过某个点,垂直可扩展性变得极其昂贵。
- 垂直缩放有硬性限制。不管你愿意花多少钱,都不可能不断地增加内存。类似的限制适用于 CPU 速度、每台服务器的内核数和硬盘驱动器速度。简而言之,在某个时候,没有可用的硬件可以支持进一步的增长。
- 操作系统设计或应用程序本身可能会阻止您垂直扩展超过某个点。
- 将应用程序驻留在单个实例上的第一个缺点是它代表了单点故障。
- 由于涉及硬件更改,因此通常会转化为停机时间。
水平缩放
水平可扩展性是通过多种方法实现的,通过添加更多服务器来增加容量。水平可扩展性被认为是可扩展性的圣杯,因为它通过购买更强大的硬件来克服与扩展相关的容量单位成本的增加。此外,在水平扩展时,您始终可以添加更多服务器 - 您永远不会达到硬限制,垂直可扩展性就是这种情况。
横向扩展的优势
以下是水平缩放的一些优点:
- 易于扩展的工具,使其易于升级。
- 更容易运行容错。
- 更好地使用较小的系统。
- 与垂直扩展相比,实施成本更便宜。
- Infinite Scale 可以使用无限数量的实例来实现无限增长。
- 水平扩展提供针对单点故障的保护。
- 高弹性,低停机时间。
水平缩放更适合大型系统。因为您的服务器的整体资源是分布式的,因此您可以在没有任何硬件限制的情况下扩展您的系统。
水平缩放的缺点
水平缩放也有一些缺点,其中一些是:
- 不止一个节点会增加维护的复杂性。
- 实施这种水平扩展时,初始成本会更高。
- 跨多台机器的数据一致性可能具有挑战性(连接需要跨服务器通信)。
- 如果机器太小,服务器可能仍会遇到硬件限制问题
构建高度可扩展的系统
让我们看看我们有哪些策略来使软件系统具有可扩展性。
负载均衡
负载平衡对于水平分布和扩展的系统至关重要。负载平衡器有助于根据需要管理服务器的负载。请记住,扩大规模很重要,但缩小规模也是可扩展性的关键组成部分。如果您的系统在负载较少时没有按比例缩小,那么您的资源就会被浪费并且成本由您承担。
负载均衡器使用一种算法将工作负载分散到服务器之间,以确保没有单个服务器不堪重负。避免性能问题是绝对必要的。
在需要的地方使用缓存
缓存是向客户返回快速响应并减少数据库命中的好方法。缓存是一个非常广泛的主题,了解您需要缓存的位置以及何时需要它非常重要。缓存也有很多策略。但总的来说,它是扩展软件系统的一个高度使用的组件。
异步处理
它指的是分离成离散步骤的过程,不需要等待前一个步骤完成后再进行处理。例如,可以向用户显示“已发送!” 在电子邮件仍在技术上处理时通知。
异步处理消除了一些影响大型软件性能的瓶颈。
限制对有限资源的并发访问
不要重复努力。如果多个请求要求从同一资源进行相同的计算,则让第一个请求完成并使用该结果。这增加了速度,同时减少了系统的压力。
使用可扩展的数据库
您应该使用适合您的应用程序需求的数据库,这一点非常重要。NoSQL 数据库往往比 SQL 更具可扩展性。SQL 确实可以很好地扩展读取操作,但是在写入操作方面,它与旨在强制执行 ACID 原则的限制相冲突。
扩展 NoSQL 需要较少的努力,因此如果不考虑 ACID 合规性,NoSQL 数据库可能是正确的选择。但另一方面,如果你想使用 SQL 数据库,也有很多策略可以扩展它们。
维护
在许多软件系统中,可维护成本远高于开发成本。因此,请密切关注构建可维护的产品。为自动化测试和维护设置软件,这样当它增长时,维护它的工作就不会失控。
结论
可扩展性通常意味着在不影响用户体验的情况下处理更多用户、客户端、数据、事务或请求的能力。
重要的是要记住,可扩展性应该允许我们缩小规模和扩大规模,并且规模应该相对便宜且快速。
垂直缩放与水平缩放不一定是非此即彼的选择。根据您的需要做出决定。首先拆分应用程序中负载最高的部分。
密切关注维护成本。
文章来源:https://rehansattar.dev/scalability-for-junior-engineers
网友评论