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

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

垂直扩展

定义

垂直扩展(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.mzph.cn/news/862629.shtml

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

相关文章

项目管理中常见的6种度量指标,你知道吗?

在项目管理中,为了有效地监控和控制项目的进展、成本、质量等方面,我们通常会采用一系列的度量指标。这些度量指标不仅可以帮助项目经理了解项目的当前状态,还能预测未来的趋势,从而作出相应的决策。以下是六种常见的项目度量数据…

AI产品活跃用户排名出炉!文心一言APP国内第一,Kimi疯狂掉队

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 6月28日,极光大数据旗下月狐数据发布2024年5月中国生成式AI行业市场热点月度分析报告,披露了国内移动端主流生成式AI应用…

BFS:队列+树的宽搜

一、二叉树的层序遍历 . - 力扣&#xff08;LeetCode&#xff09; 该题的层序遍历和以往不同的是需要一层一层去遍历&#xff0c;每一次while循环都要知道在队列中节点的个数&#xff0c;然后用一个for循环将该层节点走完了再走下一层 class Solution { public:vector<vec…

AUTOSAR以太网之IPv4

系列文章目录 返回总目录 文章目录 系列文章目录一、IPv4报文格式二、主要函数1.IPv4_Init()2.IPv4_Receive()3.IPv4_Transmit() 一、IPv4报文格式 二、主要函数 1.IPv4_Init() 这个函数除了对模块配置进行初始化&#xff0c;如果有分包和组包使能&#xff0c;则会对一些相关…

桌面提醒工具哪个好?简单好用的便签提醒app推荐

在日常的生活和工作中&#xff0c;我们经常会遇到各种各样的事情&#xff0c;有时候可能会遗忘一些重要的事情。这个时候&#xff0c;一个简单好用的便签提醒工具就显得尤为重要了。那么&#xff0c;哪款桌面提醒工具比较好用呢&#xff1f;下面&#xff0c;就为大家推荐一款我…

ONNX模型利用CUDA加速如何正确配置好环境?

目前onnx可选的执行引擎非常多&#xff0c;覆盖了从cpu、gpu到npu&#xff0c;从Intel平台到AMD平台等。如下是onnxruntime所有的执行引擎。 [TensorrtExecutionProvider, CUDAExecutionProvider, MIGraphXExecutionProvider, ROCMExecutionProvider, OpenVINOExecutionProvide…

基于公有云部署wordpress

云平台选择 腾讯云 阿里云 华为云 项目部署 一、架构讲解 1.1、定义与组成 LNMP是Linux、Nginx、MySQL&#xff08;或MariaDB&#xff09;和PHP&#xff08;或Perl、Python&#xff09;的首字母缩写&#xff0c;代表在Linux系统下使用Nginx作为Web服务器&#xff0c;MySQL作为…

Mongodb安装与配置

Mongodb的下载 这里下载的是MongoDB 7.0.11版本的 首先进入官网&#xff1a;https://www.mongodb.com/ 点击完上面两步后&#xff0c;加载来到该页面&#xff0c;选择自己的版本、系统&#xff0c;是压缩包(zip)还是安装包(msi)。 下载好之后能&#xff0c;来到安装包哪里&a…

互联网直播/点播技术与平台创新应用:视频推拉流EasyDSS案例分析

随着互联网技术的快速发展&#xff0c;直播/点播平台已成为信息传播和娱乐的重要载体。特别是在电视购物领域&#xff0c;互联网直播/点播平台与技术的应用&#xff0c;不仅为用户带来了全新的购物体验&#xff0c;也为商家提供了更广阔的营销渠道。传统媒体再一次切实感受到了…

wavesummit2024发布飞桨3.0版本

今天网上看了wavesummit2024深度学习开发者大会,本来没有啥期待&#xff0c;结果发现飞桨竟然发布3.0版本了&#xff01; 以下是飞桨框架 3.x 的新特性&#xff1a; 动静统一自动并行&#xff1a; 为了降低大模型的编程难度&#xff0c;飞桨还优化了动静统一的半自动并行编程范…

陪诊小程序开发:寻找陪诊师更加快速,全程陪护!

陪诊行业是一个新兴行业&#xff0c;在当下市场中具有较大的发展前景。对于无法陪家人看病或者对医院不熟悉的人来说&#xff0c;陪诊师成为了刚需&#xff01;目前随着社会的发展&#xff0c;人们的生活节奏不断加快&#xff0c;陪诊市场的需求量也在不断增加&#xff0c;发展…

荣耀终端发布首个端侧AI反诈检测技术,助力用户防范网络诈骗

在今日盛大开幕的2024年上海世界移动通信大会上&#xff0c;荣耀终端以卓越的创新实力引领行业潮流&#xff0c;率先发布了手机行业中首个端侧AI反诈检测技术。该技术旨在为用户提供更加安全、可靠的网络通信体验&#xff0c;助力防范日益猖獗的网络诈骗行为。 AI-321 | 专注全…

技巧类题目

目录 技巧类题目 136 只出现一次的数字 191 位1的个数 231. 2 的幂 169 多数元素 75 颜色分类 &#xff08;双指针&#xff09; 287. 寻找重复数 136 只出现一次的数字 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均…

【Redis四】主从复制、哨兵以及Cluster集群

目录 一.主从复制、哨兵、集群的区别 二.Redis主从复制 1.作用 2.原理 3.流程 三.搭建Redis 主从复制 1.源码编译安装以及配置文件修改 1.1.修改 Redis 配置文件&#xff08;Slave节点操作&#xff09; 2.验证主从复制 2.1.在Master节点上看日志 2.2.在Master节点上…

Raylib学习-鼠标检测与GPU缓冲区使用

鼠标左键点击运行绘制 #include <raylib.h>int main() {const int screenWidth 800;const int screenHeight 450;InitWindow(screenWidth, screenHeight, "test"); // 设置帧率SetTargetFPS(150); // 设置一个画布&#xff0c;可以使用GPU进行绘制RenderText…

虚拟化技术(二)

目录 三、存储虚拟化&#xff08;一&#xff09;存储虚拟化的一般模型&#xff08;二&#xff09;存储虚拟化的实现方式&#xff08;三&#xff09;案例分析 四、网络虚拟化&#xff08;一&#xff09;核心层网络虚拟化&#xff08;二&#xff09;接入层网络虚拟化&#xff08;…

【笔记】echarts图表的缩放和鼠标滚动冲突的处理解决方案

解决方案不是很好&#xff0c;来源于github的issue&#xff0c;官方提供了&#xff0c;组合键触发缩放的功能。 https://github.com/apache/echarts/issues/5769 https://echarts.apache.org/zh/option.html#dataZoom-inside.zoomOnMouseWheel dataZoom-inside.zoomOnMouseWhe…

Linux驱动开发笔记(十二)并发与竞争

文章目录 前言一、并发与竞争的引入1.1 并发1.2 竞争1.3 解决方法 二、原子操作2.1 概念2.2 使用方法 三、自旋锁3.1 概念3.2 使用方法3.3 自旋锁死锁 四、信号量4.1 概念4.2 使用方法 五、互斥锁5.1 概念5.2 使用方法 前言 Linux的子系统我们已经大致学习完了&#xff0c;笔者…

项目测试排期的正确方法是什么?

测试排期是项目排期里面的一部分&#xff0c;所以了解项目排期对整体产品的全貌会有一个宏观的认知&#xff0c;甘特图能很好的体现项目排期&#xff0c;里面包含了参与角色和每个角色对应的排期。项目参与者和项目责任人都可以清晰的看到项目当前进展和项目耗时等。 甘特图可…

c++习题03-分卡片

目录 一&#xff0c;题目 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;题目 二&#xff0c;思路 在做题的时候一定要认真审题&#xff0c;抓住关键的点和条件&#xff0c;才能够更高效的做对题目。 上面的题目有以下关键点&#xff08;关键条件&#xff0…