系统设计中的垂直扩展和水平扩展,该如何选择?

news2024/10/7 16:22:26

在系统设计时,我们需要预估系统的容量,但是,随着系统流量的增大,我们会通过扩容来应对流量,常见的扩容方式是垂直扩展和水平扩展,因此,这本文章,我们将深入探讨这两种扩展策略的优缺点以及该如何选择?

垂直扩展

定义

垂直扩展(Vertical Scaling),也称为纵向扩展或向上扩展(Scale Up),是指通过增加单个服务器的资源来提高系统性能和处理能力。具体来说,垂直扩展涉及到增加服务器的 CPU、内存、存储等硬件资源,使其能够处理更多的负载和更高的工作量。

如下图,展示了 CPU、内存、存储的扩展:

vertical-scaling.png

  • 升级 CPU:将服务器的处理器更换为功能更强大的处理器。
  • 增加 RAM:添加更多内存以处理更大的数据集并减少对较慢存储的依赖。
  • 增强存储:切换到更快的存储(如 SSD)或增加整体存储容量。

比如:CPU: 4核 内存: 16GB 存储: 500GB 升级成 CPU: 16核 内存: 64GB 存储: 2TB

优点

整理了一份面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题

需要全套面试笔记的【点击此处即可】即可免费获取

垂直扩展的优点主要包含以下几点:

  • 简单:垂直扩展的实现相对简单,因为它不需要更改应用程序体系结构。
  • 更低的延迟:由于所有资源都位于一台机器上,因此垂直扩展可以消除对服务器间通信的需求,从而降低延迟。
  • 降低软件成本:在初始阶段,垂直扩展可能比水平扩展更具成本效益,尤其是在处理需求适度增长时。
  • 无需重大代码更改:通常几乎不需要对应用程序的代码库进行调整。

缺点

垂直扩展的缺点主要包含以下几点:

  • 硬件限制:单台服务器的硬件资源有上限,最终会达到物理扩展的极限。
  • 单点故障:由于所有资源都在一台服务器上,任何硬件故障都可能使整个系统瘫痪。
  • 停机时间:升级硬件通常需要使服务器脱机,这可能是一个明显的缺点。
  • 成本增加:随着规模的扩展,具有强大 CPU和大量 RAM的高端服务器可能会变得非常昂贵。

水平扩展

定义

水平扩展(Horizontal Scaling),也称为横向扩展或向外扩展(Scale Out),是指通过增加更多的服务器或节点来提高系统性能和处理能力,而不是通过增加单个服务器的硬件资源来提升性能。水平扩展通常用于分布式系统和云计算环境中,通过增加服务器数量来分散负载,从而提高系统的整体处理能力和可靠性。

如下图,展示了水平扩展:

horizontal-scaling.png

优点

水平扩展的优点主要包含以下几点:

  • 近乎无限的可扩展性:只要您的架构支持,您就可以继续添加节点,从而能够处理更大的负载。
  • 改进的容错能力:一个节点的故障不会导致整个系统瘫痪,从而最大限度地减少停机时间。
  • 成本效益:水平扩展可能更具成本效益,因为它使用商用硬件而不是昂贵的高端服务器。

缺点

水平扩展的缺点主要包含以下几点:

  • 复杂性:将应用程序分布在多个服务器上会带来数据一致性、负载平衡和服务器间通信方面的复杂性。
  • 延迟增加:与单台计算机相比,服务器之间的通信可能会引入额外的延迟。
  • 成本:由于基础设施的复杂性,初始设置和维护成本可能会更高。
  • 应用程序兼容性:应用程序的代码可能需要调整才能在分布式环境中有效工作。

如何选择?

考虑因素

在垂直扩展和水平扩展之间做出选择时,我们通常需要考虑以下事项:

  • 成本:分析初始硬件成本与长期运营费用。
  • 工作负载:分析应用程序是受 CPU限制、内存受限,还是其他因素限制?
  • 复杂性:在进行扩展时,需要考虑扩展的复杂度,是否牵涉到应用程序代码的改动等?
  • 未来增长:扩展预计会达到多大的规模?

何时选择垂直扩展

一般来说,垂直扩展非常适合以下方案:

  • 有限的可扩展性:增长预测有限的中小型应用程序,您的需求可以通过硬件升级轻松满足。
  • 遗留应用程序:当组件之间存在紧密耦合时,很难在多个服务器之间分发。
  • 低延迟:当低延迟是一项关键要求,并且服务器间通信开销是不可接受的。
  • 成本敏感型项目:当预算不允许复杂的基础设施,并且横向扩展的成本超过收益时,例如在昂贵的软件许可证的情况下。

何时选择水平扩展

一般来说,水平扩展非常适合以下情况:

  • 快速增长:当经历快速增长并需要处理不断增长的流量的能力时。
  • 高可用性需求:当应用程序需要高可用性和节点故障复原能力时。
  • 易于分发:当应用程序可以轻松地分布在多个服务器上而无需进行重大修改时。
  • 微服务体系结构:当应用程序围绕微服务进行设计时,微服务自然适合水平扩展。
  • 成本效益:当成本效益是优先事项时,首选使用商品硬件。

总结

本文分析了垂直扩展和水平扩展以及他们的优缺点和使用场景,垂直扩展更加关注的是机器硬件配置的提升,而水平扩展关注更多的是机器数量,在系统设计中,这是最常见的 2种扩展方式。

垂直扩展和水平扩展,如何选择?在很大程度上取决于应用程序的特定需求、预期的增长规模、预算以及正常运行时间对业务的重要性,不过,在实际情况下,通常都会使用两者的组合来优化系统性能和成本效益。

通过本文,我们需要掌握在系统流量增加时,如何通过扩展来应对流量,同时也需要掌握在系统流量不高时,如何动态缩减以减少成本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1873613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux网络协议 笔记

环境配置 使用ifconfig命令设置网卡的IP地址和掩码 ifconfig eth0 192.168.xxx.xxx netmask 255.255.255.0 设置默认路由。 route add default gw 192.168.xxx.xxx 程序编译 GCC 编译命令 gcc hello.c -o hello gcc -o hello hello.c 执行生成的可执行文件 ./hello gc…

索引:通往高效查询的桥梁(五)

引言 上一章,我们探索了SQL的基础知识,从DDL、DML到DQL,掌握了构建和操作数据库的基本技能。现在,我们将目光转向数据库性能的核心——索引。索引,犹如图书馆中的目录系统,极大地加速了数据检索过程&#…

Django —— 用户名和密码配置

创建项目ProjectA: django-admin startproject ProjectA cd进入ProjectA文件夹运行项目: python manage.py runserver 0.0.0.0:8000 Starting development server at http://0.0.0.0:8000/Quit the server with CTRL-BREAK. 访问http://localhost:80…

IO-Link软件开发流程

目录 了解IO-Link协议: 确定物理连接方式: 编写驱动程序: 测试通信: 集成与应用: 优化与迭代: 文档编写与用户支持: IO-Link产品的开发流程主要包括以下几个步骤 了解IO-Link协议&#x…

TIOBE 6月榜单出炉!编程语言地位大洗牌,谁才是王?

C历史上首次超越C!!! TIOBE 公布了 2024 年 6 月编程语言的排行榜:https://www.tiobe.com/tiobe-index/ 排行榜 以下列出的语言代表了第51至第100名。由于它们之间的差异相对较小,编程语言仅以字母顺序列出。 ABC, A…

.net 8 集成 MinIO文件存储服务,实现bucket管理,以及文件对象的基本操作

一、准备工作 1、本地部署MinIO服务 2、创建MinIO的Access Key 3、创建.net 项目 4、下载MinIO sdk 5、相关文档 二、编写MinIO工具类 三、管理存储桶 1、MyBucket类 (1)判断bucket是否存在 (2)新建bucket &#xff08…

一键解决外勤难题,精细化管理轻松get!

行程打卡是企业总部和分店、销售管理与销售、行政与员工保持信息对称的重要方式,也是区域负责人、督导和行政日常重要的工作之一。 行程打卡不仅承载着确保品牌运营的标准性和一致性的目标,同时也是为了收集行程各阶段存在的问题和不足,对后续…

Win11 搭建 Java 开发环境(JDK)

Win11 搭建 Java 开发环境(JDK) 前言步骤1、下载 JDK2、安装 JDK3、配置环境变量(我设置的顺序可不是随便的哟~)3-1、设置 JAVA_HOME_11和 JAVA_HOME3-2、设置 PATH3-3、设置 CLASS_HOME备注1、可以不必再手动配置 CLASSPATH2、恢复 jre 文件夹(有没有 jre 文件夹其实不影…

实体零售连锁企业如何通过物流接口实现数智化转型升级?

在电子商务浪潮的持续冲击下,传统的实体零售行业面临着巨大的挑战。为了在线上线下融合的新零售时代保持竞争力,众多实体零售企业积极寻求数字化转型的突破。 某中国零售连锁百强企业近年来致力于打造自有品牌的线上销售体系,自2021年8月起接…

双减期末考试成绩怎么公布?

考试一直是衡量学生学习成果的重要手段。不过,随着"双减"政策的实施,我们就不得不重新审视传统的成绩公布方式。期末考试成绩,这个曾经让无数学生心跳加速的数字,如今该如何以一种更加合理、公正的方式呈现给学生和家长…

第1章 物联网模式简介---物联网概述

物联网模式简介 物联网(IoT)在最近几年获得了巨大的吸引力,该领域在未来几年将呈指数级增长。这一增长将跨越所有主要领域/垂直行业,包括消费者、家庭、制造业、健康、旅游和运输。这本书将为那些想了解基本物联网模式以及如何混…

【知识学习】Unity3D中GPU Instance的概念及使用方法示例

在Unity3D中,GPU Instancing是一种优化技术,它允许开发者在不增加Draw Call(绘制调用)的情况下,通过GPU绘制多个具有相同Mesh和Material但可能具有不同变换(位置、旋转、缩放)的对象实例。 GPU…

linux中 nginx+tomcat 部署方式 tomcat挂掉设置自动启动

在Linux环境下,要实现当Tomcat挂掉后自动重启,可以通过编写Shell脚本结合cron定时任务或者使用系统守护进程(如Systemd、Upstart或SysVinit)来完成。 使用Shell脚本和cron定时任务 编写检查并重启Tomcat的Shell脚本:首…

1976 ssm 营地管理系统开发mysql数据库web结构java编程计算机网页源码Myeclipse项目

一、源码特点 ssm 营地管理系统是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开…

【管理咨询宝藏137】RB大型卡车集团供应链体系优化设计方案中期汇报

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏137】RB大型卡车集团供应链体系优化设计方案中期汇报 【格式】PDF版本 【关键词】罗兰贝格、供应链管理、运营提升 【核心观点】 - 甲方采取销售…

Parallels Toolbox for mac(pd工具箱) 6.0.2激活版

Parallels Toolbox 是由 Parallels 公司开发的一款实用工具集合软件,它主要面向使用 Parallels Desktop 的用户,提供了许多方便用户在 macOS 和 Windows 之间进行切换和管理的工具。Parallels Desktop 是一款流行的虚拟化软件,允许用户在 mac…

c++ 设计模式 的课本范例(上)

( 0 ) 这里补充面向对象设计的几个原则: 开闭原则 OCP : 面向增补开放,面向代码修改关闭。其实反映到代码设计上就是类的继承,通过继承与多态,可以不修改原代码,又增加新的类似的功能。 依赖倒置原则 Depen…

golang 获取系统的主机 CPU 内存 磁盘等信息

golang 获取系统的主机 CPU 内存 磁盘等信息 要求 需要go1.18或更高版本 官方地址:https://github.com/shirou/gopsutil 使用 #下载包 go get github.com/shirou/gopsutil/v3/cpu go get github.com/shirou/gopsutil/v3/disk go get github.com/shirou/gopsuti…

C语言指针速成下篇

c语言的指针下篇终于迎来了收尾&#xff0c;那么废话不多说&#xff0c;我们直接进入正题 指针访问数组 # include <stdio.h> int main () { int arr[ 10 ] { 0 }; // 输⼊ int i 0 ; int sz sizeof (arr)/ sizeof (arr[ 0 ]); // 输⼊ int * p arr //这…