什么是可扩展性-如何设计一个扩展性强的系统 二
上一篇中我们讨论了什么是系统设计的可扩展性以及有哪些手段 juejin.cn/post/732971...
SPOF是什么,如何处理SPOF?
为了使高效的系统能够通过复制参数进行扩展,其中在服务器上存储了多个副本,可以很好地处理 SPOF,这里我们需要学习下面列出的 2 个概念,它们可以帮助我们实现高效的可扩展系统,甚至跨大型分布式系统架构师。
- 负载均衡
- 缓存
现在让我们将负载均衡扩展到更高阶的深度,然后进行缓存,以完什么是负载均衡?
负载均衡是一种在分布式系统中的所有节点之间有效分配应用程序或网络流量的技术。负载均衡器是用于确保负载平衡的工具。
负载均衡器的工作原理全理解更高阶的可扩展性,如下所示
负载均衡器角色
- 每个节点接收同等份额的工作负载。
- 应跟踪哪些节点不可用或未使用。
- 有效地管理/分配工作,确保按时完成。
- 应进行分配以最大限度地提高速度并使用所有可用容量。
- 负载均衡器必须保证高扩展、高吞吐量和高可用性
让我们也明确一下使用负载均衡器的理想条件应该是什么。它们如下:
- 当应用程序具有多个实例或服务器时,负载均衡器可用于负载管理。
- 应用程序流量被分配到多个服务器或节点。
- 负载均衡器对于在大流量环境中保持可扩展性、可用性和延迟至关重要。
负载平衡的好处
- 优化: 在大流量环境中,负载均衡器有助于更好地利用资源并减少响应时间,从而优化系统。
- 改进的用户体验: 负载均衡器有助于降低延迟并提高可用性,从而实现平稳且无错误的用户请求。
- 防止停机: 通过跟踪不工作的服务器并正确分配流量,负载均衡器可以提供安全性并避免停机,这也可以提高收入和生产力。
- 灵活性: 为了确保效率,负载均衡器可以在发生故障时重新路由流量并进行服务器维护。
- 可扩展性: 负载均衡器可以使用真实或虚拟服务器来提供响应,当 Web 应用程序的流量突然激增时,不会出现任何中断。
现在,极客们一定想知道是否存在与负载平衡相关的陷阱。
负载均衡面临的挑战
由于我们已经讨论了开发系统时的 SPOF 约束。负载均衡器故障或崩溃可能会导致整个系统暂停、暂时不可用,从而影响用户体验。如果负载平衡器发生故障,客户端和服务器的通信将会中断。我们可以利用冗余来解决这个问题。系统中可以存在有源负载平衡器和无源负载平衡器。如果主动负载均衡器发生故障,被动负载均衡器可以接替主动负载均衡器。
为了更好地理解,我们将深入研究如下负载均衡算法:
负载均衡算法
为了在各个节点或服务器上有效分配负载,可以使用各种算法。应根据负载均衡器必须使用的应用程序类型来选择算法。
下面列出了一些负载均衡算法:
- 循环算法
- 加权轮询算法
- IP哈希算法
- 最少连接算法
- 最短响应时间
现在我们已经掌握了负载均衡的相关知识,可以深入研究缓存了。
什么是缓存?
缓存是通常由高速数据存储层临时缓存的数据的一部分,与直接从其原始存储位置访问数据相比,允许更快地满足对该数据的后续请求。
缓存 是一个过程,我们可以通过生成静态数据的本地实例来重用已经快速访问或计算的数据,缓存减少了读取调用、API 调用和网络 I/O 调用的数量。
缓存类型:
缓存基本上分为以下三种类型:
-
本地缓存:
在内存中当缓存必须保存在本地内存中时,它用于单个系统。它也称为 L1 缓存。
- 示例:Memcache
-
外部缓存:
在多个系统内也称为分布式缓存。它也称为 L2 缓存。
- 当缓存必须由多个系统共享时,就会使用它。因此,我们以分布式方式存储缓存,所有服务器都可以访问。
- 示例:Redis
-
专用缓存: 是一种特殊类型的内存,是为了提高上述本地和外部缓存的性能而开发的。它也称为 L3 缓存。
缓存如何工作?
存储在缓存中的信息通常保存在提供快速访问的硬件中,例如 RAM(随机存取存储器),但它也可以由软件组件使用。主要目标是通过避免与下面较慢的存储层接触来提高数据检索性能。
注意: 缓存的应用有:
- CDN(内容分发网络)
- 应用服务器缓存
缓存的好处
- 提高应用程序的性能
- 降低数据库费用
- 减轻后端负载
- 可靠的结果
- 摆脱数据库中的热点
- 提高读取率 (IOPS)
缓存的缺点
- 高速缓冲存储器成本昂贵并且空间有限。
- 当信息存储在缓存中时,页面变得很大。
- 有时,由于缓存未更新,因此未显示更新的信息。
缓存的应用
- 缓存有助于减少延迟并提高许多读取密集型应用程序工作负载(包括游戏、媒体共享、社交网络和问答门户)的 IOPS。
- 缓存数据的示例包括数据库搜索、计算上具有挑战性的计算、API 调用和响应以及 HTML、JavaScript 和图像文件等 Web 工件。
- 更改数据集的计算密集型应用程序(例如高性能计算的推荐引擎和模拟)受益于充当缓存的内存数据层。
- 在这些应用程序中,必须可能包含数百个节点的服务器集群实时检索大量数据集。由于底层硬件的速度,许多程序在基于磁盘的存储中操作这些数据的能力受到严重限制。
缓存策略
缓存模式是设计人员用来将缓存包含到系统中的方法。直写式和缓存侧是两种常见的技术:
- 绕写
- 直写式
- 回写
缓存数据策略
缓存的数据策略决定了从完整缓存中删除项目的顺序。这样做是为了清理一些空间,以便可以添加更多条目。这些策略如下:
- LRU(最近最少使用)
- LFU(最不常用)
- FIFO(先进先出)
- LIFO(后进先出)