0
点赞
收藏
分享

微信扫一扫

资源扩展-纵向扩展&横向扩展的应用过程及注意点


通过纵向扩展、横向扩展以及结合的模式来解决计算&存储单元不足的痛点,并整理了如何实施以及应用过程中需要注意的问题。



计算及存储资源扩展需求

由计算单元、存储单元支撑应用的运行,并非计算单元创建完成、应用部署完成就万事大吉。应用的请求在不同时间段会有不同的变化,计算单元、存储单元性能也会随之变化。根据“均衡模式”可以将应用部署在多个计算单元上,对请求分发到不同的后端计算单元上,但是如何处理变化的情况,如何增加或减少后端计算单元?是手动新建或移除计算单元还是自动执行?

解决方案

资源扩展-纵向扩展&横向扩展的应用过程及注意点_云主机

纵向扩展

使用纵向扩展,使得计算单元的配置进行增大或缩小,例如将1核1G的服务器升级成为2核4G的服务器,或从2核4G的服务器变更为1核1G的服务器。通常情况下CPU、内存变更需要服务器进行重启,此时便会影响当前运行的业务。如果云计算平台支持热升级/降级,即不重启服务器完成CPU、内存等的配置变更。网络变更往往不需要重启服务器。

纵向扩展会受到硬件资源限制,扩展范围有限。

横向扩展

可选择横向扩展,按照一定均衡算法将前端请求分发到后端计算单元上,共同承担前端请求压力。横向扩展会增加或减少计算单元,增加的资源单元上需要部署和该均衡下的其他计算单元相同的服务,往往在新增加的资源单元创建时直接使用该服务的镜像,服务启动后可以直接参与均衡和其他计算单元共同提供服务。

扩展方式又分为手动和自动处理。建议通过自动化的方式监测计算单元的平均负载、CPU等指标,在达到特定条件时自动触发横向扩展从而响应的增加或减少计算单元,实现自动伸缩。


如何实施

纵向扩展

云计算中的计算单元会有若干不同配置和性能的物理机或虚拟机,例如有1核1G、2核2G等,甚至32核64G等高配服务器,用户在创建云主机并部署应用后,随着应用变得复杂、用户请求增多,单个计算单元会遇到性能不足的情况。因此需要将低配置的服务器使用高配置的服务器,但是希望尽量小的影响运行的服务。首先需要云计算平台支持更换更好配置的服务器的操作,还要确定是否需要重启。同样计算单元配置有很多空闲时,需要降低计算单元的配置,以便节省费用。

横向扩展

访问量小、简单的系统可以直接部署在一个计算单元上,但随着访问量的增加、系统复杂度上升,计算单元压力增大,纵向扩展是一种解决办法,但纵向扩展总会遇到实际的资源限制,不可能无限制的扩展。因此使用单个计算单元不再适用。将应用或服务部署在多个计算单元上,由多个计算单元同时处理请求,但每个请求只分发给一个计算单元进行处理。和计算单元均衡模式配合使用,均衡分发单元会按照特定的均衡算法分发将请求进行分发到位于后端的计算单元上进行处理。对于进行分层的应用,例如Web端、业务端。Web端请求压力过大时可以对Web端计算单元均衡模式中进行横向扩展,增加支持的计算单元。同理业务端所在的计算单元均衡模式也同样可以进行横向扩展。

  1. 服务由资源单元A提供;
  2. 通过检测相应指标进行自动伸缩或指定定时任务在指定时刻进行自动伸缩或手动进行扩展;
  3. 如果需要减少资源,则从均衡后端计算单元中按照一定策略释放部分计算单元;
  4. 如果需要增加资源,则新创建资源单元,并加入到服务对应的后端计算单元中;
  5. 由所有这些资源单元共同为服务提供支持。

横向扩展

纵向扩展通常需要重启服务器,会造成服务中断,是用户难以接受的。配合资源均衡模式和横向扩展模式,可以实现不中断服务的服务器配置升级或降级。

  1. 首先需要创建一个资源均衡,将原有服务器加入到资源均衡中,然后再将用户的请求分发到资源均衡对外提供的IP或域名中,此时服务依然可以使用;
  2. 再使用扩展模式创建新的2核4G的服务器,加入到资源均衡中,等待新的服务器启动完成、能够正常提供服务,此时服务依然可用;
  3. 将原有需要配置变更的服务器升级或降级配置,然后重启该服务器,此时用户对该服务的请求会分发到其他正常提供服务的服务器上;
  4. 删除新创建的服务器,服务依然正常。此时均衡单元中的服务器核升级之前没有变化,但是配置却进行了升级或降级。

示例

例如,某创业公司开发社交APP,创业初期受限于资金状况选择中低配置的云主机,并且在初期能够满足用户访问压力。随着用户增加、应用的访问量增加,原有云主机配置已经不能满足需求,需要进行扩展。有纵向扩展和横向扩展两种选择,架构师选择了横向扩展。但是另一方面,原有的中低配置云主机性能CPU和内存分配不协调,且会影响云主机的IO等性能,因此架构师经过评估选择了纵向扩展和横向扩展同时进行。

  1. 首先通过横向扩展增加了N台云主机,并加入到资源负载中,应用没有中断继续提供服务;
  2. 此时选择了10台原有云主机进行配置升级,从2核4G升级到了8核16G;
  3. 重启这10台进行配置变更的云主机,资源负载中在进行健康检查时会检测到云主机不健康,会从资源负载中移除这10台正在重启的云主机,此时系统负载会稍微增大,但是不会超过原有负载。服务可以继续正常访问;
  4. 这10台云主机启动完成、可正常提供服务后,再选择10台进行配置变更。以此类推,完成所有原有云主机的配置变更;
  5. 最终原有云主机完成了配置变更,同时为了应对更大访问量的压力,也进行了横向扩展。以后在遇到系统性能压力时建议只考虑横向扩展,在纵向扩展方面已经选择了合适配置的云主机,纵向扩展一般需要重启,横向扩展同样能够减轻系统压力。

自动伸缩

进行横向扩展,常见的有以下几种方式,包括手动新建计算单元并加入到均衡器中、自动策略伸缩、定时任务自动伸缩。其中自动策略伸缩是横向扩展和自动化进行结合的效果。运行机制如下:

资源扩展-纵向扩展&横向扩展的应用过程及注意点_重启_02

  1. 控制器监测原有资源单元平均CPU;
  2. CPU达到60%时,激活扩展程序;
  3. 扩展程序根据配置好的启动模板,使用模板中指定的镜像启动计算单元;
  4. 计算单元启动完成后加入到均衡单元中,返回①继续监测;
  5. 如果CPU地域30%时,激活缩减程序;
  6. 缩减程序根据策略选择计算单元进行停止服务并释放计算单元,返回“1”继续监测。

使用时机


  • 在一些资源单元不能够满足使用要求时或一些服务不能满足使用要求时
  • 配合服务器均衡和应用实例均衡时进行横向扩展
  • 替换原有(低配置、高配置、跨可用区部署等)计算单元


注意点

镜像

镜像为应用和数据的集合,可以从计算单元生成,便于横向扩展时直接使用镜像启动计算单元,避免了每次启动计算单元都需要重新部署一套应用。但是镜像中的业务需要将会话保存在各个计算单元均可以访问的存储单元中,例如Redis、Memcached、消息队列等。

时延

进行扩展时首先需要下发指令执行扩展动作,随后引用服务镜像的计算单元启动,启动完成后加入均衡后可以提供服务。计算单元启动需要一定时间,一般在几分钟左右,一次扩展多个计算单元时并行启动,在未能提供服务之前,原有计算单元压力会继续增大,必须在系统满负荷之前完成扩展的计算单元启动。在进行扩展时需要考虑这个时间延迟,可以提前启动扩展操作。

防止抖动

例如在CPU达到60%时增加一个计算单元,在低于30%时减少一个计算单元,有可能在达到60%时增加了一个计算单元,随后CPU降低为30%,此时又会减少一个计算单元,CPU又会达到60%,一直重复执行增加计算单元、减少计算单元。此时需要增加一个冷却时间,即执行增加或减少动作后冷却时间内不会再执行增加或减少操作以避免重复执行增加、减少计算单元的操作。

其他

  • 健康检查
  • 会话保持
  • 替换不健康的计算单元
  • 计算单元无状态
  • 计算单元功能单一

应用案例

策略伸缩

对于电商系统在每天24小时的请求量分布不均匀,晚上17:00-23:00是访问高峰期,每周中周五至周日也是访问高峰期。电商应用还经常举办抢购、促销活动,都会造成访问高峰。在进行系统架构时需要考虑的就是可伸缩性,云计算提供便捷的伸缩机制,我们需要用到横向扩展模式。手动创建云主机,然后在每台云主机上手动部署应用是不可取的,我们还需要一种快捷的横向扩展方式,使用自动伸缩可以及时的扩展云主机以应对用户访问。在用户访问量较少时及时的释放云主机,以便节省费用。释放云主机时更加智能的做法是检测云主机的创建时间,云主机一般按照小时收费,因此等待云主机距离下一小时收费还有几分钟时释放更为划算。

可设置以下AS规则,在每天访问高峰期前后多创建10台云主机,不能在19:00执行任务,因为创建云主机并启动需要几分钟时间,最佳实践是提前一段时间执行伸缩任务。自动伸缩AS还支持根据CPU等因素执行伸缩任务。在下面的规则中,可以看到云主机平均CPU高于60%时自动创建2台云主机,云主机平均CPU低于30%时自动移除2台云主机,从而保证云主机 CPU负载保持在合理范围内。


任务ID

时间

任务

as-1

每天18:30

使用电商网站镜像“my-image”创建10台云主机,并加入到LB中

as-2

每天23:30

从LB中移除并释放10台云主机,优先选择最近创建的10台云主机

as-3

云主机平均CPU高于60%

自动创建2台云主机,并加入到LB中

as-4

云主机平均CPU低于30%

自动移除并释放2台云主机,优先选择最近创建的2台云主机




“云计算架构之路”专栏旨在整理和总结云计算架构上的经验及最佳实践,为更优的云计算使用方式提供参考,并希望与云计算架构师进行技术探讨。



举报

相关推荐

0 条评论