什么是横向扩展和纵向扩展?

ab0ad36999507935ea8f6a884ce81966.gif

现代应用程序不断变化,随着新要求的发展而发展,并且存在于对资源的不同需求的环境中。扩展应用程序可以根据资源需求适当调整其大小,以确保客户满意并降低基础设施成本。

如果您不知道如何有效地扩展,您不仅会损害您的应用程序,还会给您的运营团队带来不必要的压力。手动尝试确定何时扩大或扩大规模非常困难。如果您购买更多基础设施来适应高峰流量,那么当负载不是高峰时,您可能会超支。如果您以平均负载为目标,流量高峰将影响您的应用程序性能,并且当流量下降时,这些资源将被闲置。

什么是纵向扩展与横向扩展

横向扩展(「Scale-out」)或水平缩放与纵向扩展(「Scale-up」)或垂直缩放形成对比。

扩展云资源的想法可能很直观。随着您的云工作负载发生变化,可能需要增加基础架构以支持增加的负载,或者在需求低时减少基础架构可能是有意义的。“向上或向外”部分可能不太直观。横向扩展是并行添加更多等效功能组件以分散负载。这将从两个负载平衡的 Web 服务器实例变为三个实例。相比之下,扩大规模是使组件更大或更快以处理更大的负载。这会将您的应用程序移动到具有 2 个 CPU 的虚拟服务器 (VM) 到具有 3 个 CPU 的虚拟服务器。缩减则相反。

两个比喻

火车动力

传统火车和动车。传统的存储Scale-up架构的存储就好像传统的火车一样,当后面的磁盘越挂越多的时候,控制器性能以及背板带宽却不能相应提升,因此传统存储在磁盘容量扩容到一定程度时候,往往性能下降。

集群存储就好像新一代的动车组火车一样,当火车车厢增加的时候,前面的火车头动力也随之增加,因此不会发生性能瓶颈。

所谓动车组的设计理念和传统火车设计理念的最大区别在于传统火车主要动力来自于火车头(就像传统模块化阵列的两个控制器),而动车组则不一样,除了车头配有动力装置外,每一节车厢都配有动力推动装置。集群存储大多都是由一个个节点(X86 服务器)组成,每一个节点添加进去后,不仅能够添加容量,还能够添加整个存储器的整体处理能力。

鱼缸启示

其实我认为Scale-out和Scale-up的概念可以用一个简单的例子来解释。

不知您有没有养过鱼? 当你只有六七条鱼的时候,一个小型鱼缸就够了;可是过一段时间新生了三十多条小鱼,这个小缸显然不够大了。

如果用Scale-up解决方案,那么你就需要去买一个大缸,把所有沙啊、水草啊、布景啊、加热棒、温度计都从小缸里拿出来,重新布置到大缸。这个工程可不简单哦,不是十分钟八分钟能搞得定的,尤其水草,纠在一起很难分开(不过这跟迁移数据的工程复杂度比起来实在是毛毛雨啦,不值一提)。

那么现在换个思路,用Scale-out方案,就相当于是你在这个小缸旁边接了一个同样的小缸,两个缸联通。鱼可以自动分散到两个缸,你也就省掉了上面提到的那一系列挪沙、水草、布景等的折腾了。

回到存储架构。用户在采购之初很难准确预测未来数据增长的速度和总量。用户往往不得不采购比自己目前实际需求容量更大的存储,这就导致两个问题,一是预算的浪费,很多存储空间都是为未来数据增长采购的,花了10TB的钱,但是可能只利用上了5TB,另5TB的资金都白白放在那里。另一个问题是,随着时间推移,数据增长,数据量超过了10TB。

按照过去Scale-up的理念,解决方案就是购买更大容量的存储,那么难免面临数据迁移的问题,用户必须停机迁移数据,意味着服务的中断。而Scale-out架构解决了这个矛盾。用户按需采购存储,一旦容量不够了,再购置一台接到原有存储上就可以了。

举个例子

常见的存储设备扩展案例,下图展示了scale-out存储方案的架构。在图中,系统只能通过增加具有完整功能的节点进行扩展,但一个scale-out系统可以有很多节点,而且节点之间的内部物理互联距离也可以很远。

3a18aaf6ede4a0d173b55221ab668abe.png

Scale-up,即纵向扩展架构。从下面的拓扑图我们可见,纵向扩展是利用现有的存储系统,通过不断增加存储容量来满足数据增长的需求。

ef001aead3823fad375d359376c76132.png

Scale-upscale-out 并非不能融合在一起,很多存储系统就可以同时实现纵向扩展和横向扩展,下面的示意图就展示了这种方案。

8af94bfe82ee4c584a984e4221f523dc.png

究竟选择scale-up还是scale-out架构,主要考虑以下因素:

成本Scale-up架构只有容量升级的成本,不会增加控制器或基础设施的开销。如果我们主要衡量每GB存储的单位价格,scale-up的扩展方式无疑更便宜一些
容量两种解决方案都可以满足容量需求,但scale-up架构也许会有些限制,主要取决于单个系统最大支持多少个磁盘数量和多大的容量
性能Scale-out架构在性能上具有扩展潜力,在多个存储控制器下,IOPS处理能力和吞吐带宽都可以聚合。虽然节点之间的通信会引发延迟,但那是部署时的细节问题
管理Scale-up架构本身就是以单一系统的方式来进行管理的。而Scale-out架构通常有聚合管理的能力,但每个厂商提供的产品可能会有所不同
复杂性Scale-up架构的存储相对简单,而scale-out架构的系统会更复杂一些,毕竟每个节点都需要管理
可用性多个节点可以提供更好的可用性,假使有一个部件故障或失效,系统也不至于整体宕机。这一点与具体的实施方案也有关系

在选择scale-up还是scale-out的时候,我们要考虑大量的因素。而结果往往取决于哪个厂商有比其他人更好的整体方案、实施能力和技术优势。但我们最好从了解最基本的信息起步,了解这两种技术及其之间的差别。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ChatGPT: BASE是指基本可用、软状态和最终一致性的缩写。基本可用指系统在出现故障或部分失效时仍能保证基本的可用性;软状态指系统中的数据可能存在中间状态,而这些中间状态不会影响系统的整体可用性;最终一致性指系统中的所有副本最终会达到一致的状态。 ACID模型是指原子性、一致性、隔离性和持久性。原子性指一个事务中的所有操作要么全部执行成功,要么全部失败;一致性指事务执行前后,数据库中的数据必须保持一致;隔离性指多个事务并发执行时,彼此之间是隔离的,互不干扰;持久性指事务一旦提交,对数据库中的数据的修改就是永久性的。 数据库的规则和约束条件包括主键、外键、唯一约束、非空约束等。NoSQL不能实现完整性约束是因为其设计初衷是为了高可用性和高扩展性,而完整性约束会影响其性能和扩展性。 关系型数据库横向扩展纵向扩展难以实现是因为横向扩展需要对数据进行分片,而分片会导致数据之间的关系变得复杂;纵向扩展则需要增加硬件资源,但是硬件资源的增加是有限度的。 记录查询是指根据记录的主键查询数据,范围查询是指根据记录的某个范围查询数据。NoSQL在复杂查询方面不如数据库是因为其设计初衷是为了高可用性和高扩展性,而复杂查询会影响其性能和扩展性。 NoSQL使用MapReduce来加速查询是因为MapReduce可以将数据分成多个部分并行处理,从而提高查询的效率。 数据一致性和可用性之间存在一定的矛盾关系,提高一致性会降低可用性,提高可用性会降低一致性。 SQL标准是指关系型数据库的标准化语言,包括数据定义语言(DDL)、数据操作语言(DML)和数据控制语言(DCL)等。 规范应用程序接口可以通过制定标准的接口规范、文档和示例代码等方式来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值