云端架构之计算资源弹性伸缩

在业务访问高峰期最简单有效的方式就是对云主机等计算资源进行纵向升级、横向扩展,及时应对业务高峰期。在业务高峰期之后通过对云主机进行纵向降级、横向缩容释放不再需要的计算资源,从而节省成本。纵向扩展就是对云主机的配置进行升级或降级,横向扩展是通过负载均衡将系统请求分散到多个后端服务节点中降低系统对单台云主机的压力,增加或删减云主机的数量,如图1所示。

image.png

图1 横向扩展与纵向扩展

通过负载均衡能够管理横向扩展的云主机、物理云主机等资源,不过手动扩缩容的方式会带来很高的维护成本,根据前面介绍的高可用设计原则,应尽量避免手动操作而实现自动化的响应处理机制,因此我们通过自动伸缩的方式来管理资源的扩缩容,根据CPU负载等监控指标实现资源的自动扩展或删减,保证有数量合适的资源来运行业务。一方面能够应对业务流量增加带来的业务压力;另一方面能够通过自动伸缩在业务低谷期缩减资源来减少费用支出。

云计算服务和自动化流程在很大程度上减少了人工参与的过程,底层资源不应根据个人经验进行扩展,也不能根据告警信息进行手动扩展,自动化流程可以避免人员介入导致的操作失误、响应不及时等风险,应该根据资源运行状况的监控或周期性策略进行自动化的资源扩展或缩容。云平台通过自动伸缩(Auto Scaling)的方式实时监测后端服务节点的压力指标,达到设定的策略时自动触发增加服务器的扩容动作或删减服务器的缩容动作。对于使用者来说,自动伸缩可以保证有适量的计算资源来处理业务请求。

设计模式概要信息

  • 解决问题:单个云主机等计算实例的性能不足以支撑业务请求,需要纵向升级配置或横向扩展数量,提升整体应对业务请求的能力。业务请求变化较大,对云主机等资源的需求数量有较大波动。需要减少云主机的数量以节省成本。
  • 解决方案:纵向升级或降级云主机的配置。横向增加或减少云主机的数量并采用负载均衡来统一管理访问。根据指定指标监控、事件或固定时间周期来自动执行扩容、缩容动作。
  • 使用时机:伴随着业务运行的整个周期,能够通过伸缩来应对变动的业务压力。在业务压力变动时能够持续保持最低的成本。
  • 关联模式:地域内业务高可用;流量转发及全局负载均衡。

横向扩展

使用纵向扩展的情况不是很多,有些软件需要大内存的云主机,当原有云主机的配置太低时可选择纵向升级配置,通常情况都可选用横向扩展来提升整体性能,降低云主机的压力。系统压力增大时需要更多资源,可以通过横向扩展的方式,如业务运行在10台云主机上,当业务流量翻倍时,再创建10台云主机即可。横向扩展的优先级要高于纵向扩展,横向扩展可通过更多数量的云主机来支撑业务请求,同时能避免云主机级别的故障,提升业务的可用性。

横向扩展优于纵向扩展,如图2所示。

1.所有云主机加入负载均衡的后端服务节点中,云主机的纵向扩展、横向增加或移除云主机均在后端服务节点的纳管范围内,负载均衡通过健康检查机制来检查所有云主机的健康状况。

2.每台云主机均保持无状态,需要进行计算时从Redis获取状态数据,在计算任务完成后将数据写入Redis。

3.当有故障云主机或移除云主机时,正在运行的任务状态是否会丢失呢?这里有两种情况,一种是云主机会在运行完当前任务并将状态数据写入Redis后退出后端服务节点,另外一种是直接退出,导致状态数据丢失。

4.为了避免第二种情况发生,导致任务状态紊乱,需要每台云主机的业务有重试机制,没有标记计算完成的任务可以重新计算;这时又可能出现多台云主机同时处理同一个任务的情况,需要将任务请求设计为幂等的,即多次计算相同任务不会影响最终结果。

image.png

图2 横向扩展优于纵向扩展

还有一个场景,最初创建的10台云主机的配置是1核1GB,经过一段时间的业务发展,这些云主机的配置太低了,需要把这10台云主机升级到4核8GB,这时该怎么选择?选择纵向扩展还是横向扩展?除了纵向扩展,还可选择通过横向扩展来逐步替换云主机的形式,把这10台1核1GB的云主机挂载到负载均衡后端节点上,另外创建10台4核8GB的云主机并部署相同的业务,这个阶段由20台云主机共同提供服务,然后从负载均衡后端节点中逐步移除1核1GB的云主机并释放实例,最终完成从1核1GB的云主机“升级”到4核8GB的云主机。这是一种平滑替换的方式,不需要中断业务或纵向升级配置。

自动伸缩

自动伸缩需要跟负载均衡搭配工作,自动伸缩的资源是绑定在负载均衡后端服务节点中的云主机、物理服务器等资源,自动伸缩根据后端服务节点的CPU平均负载等监控指标触发扩容或缩容事件,该事件会按照已经配置完成的资源配置模板创建新的服务器或按照移除策略来删减服务器。常见的进行横向扩展的方式包括手动新建计算单元并加入均衡器中、自动伸缩等。

自动伸缩(Auto Scaling)是通过监控云主机CPU等指标来完成扩缩容动作的,也可通过设置时间周期等形成自动伸缩策略,来实现在绑定的负载均衡后端节点中自动增加或删减云主机的机制。掌握自动伸缩需要先了解以下几个基础概念。

  • 自动伸缩实例:用于管理和配置多个伸缩任务,所有的伸缩策略、伸缩模板、伸缩记录都包含在自动伸缩实例中。
  • 触发器/伸缩策略:用来监测启动条件,包括对CPU、内存等指标的监控策略,也包括设置的周期性扩缩容规则,达到启动条件时会触发伸缩策略,执行相应动作。
  • 伸缩模板:云主机的配置模板,指定云主机的CPU、内存、镜像、系统盘、数据盘、付费方式等参数,触发扩容时按照伸缩模板的配置创建新的云主机。
  • 伸缩记录:扩容、缩容记录,用于审计自动伸缩任务的执行情况。

通过图3,我们能了解到自动伸缩的过程。

  1. 控制器持续监测资源指标和Schedule中的任务,在监控指标中,负载均衡中的云主机CPU平均负载增加到X%时启动扩容策略,平均负载减小到Y%时启动缩容策略。
  2. 通过设定的伸缩时间周期进行监测,满足时间条件时也会触发设定的伸缩策略。
  3. 支持自定义监测方式,在达到预期条件时发送事件到触发器,再执行扩缩容策略。
  4. 触发自动伸缩管理服务,按照配置模板创建N台云主机实例,并记录在伸缩记录中,将云主机实例绑定到负载均衡的后端服务节点中,并在负载均衡中对这N台云主机实例进行健康检查后开始分配请求,这时平均负载会降低;如果删除云主机,还需要考虑删除哪些云主机,删除策略包括优先删除最新创建的云主机、优先删除创建最久的云主机、随机删除等。
  5. 进行扩缩容之后,伸缩策略会更新,如云主机的平均CPU负载升高或降低、还未到下一个伸缩周期等,伸缩策略会实时更新并按照最新的伸缩策略来执行,周而复始;同时,所有的扩容、缩容操作都会记录在伸缩记录中。

image.png

图3 自动伸缩监听及响应处理机制

监测指标频繁变化或伸缩策略集中到一段时间范围内会造成在扩容和伸缩之间频繁切换的状况。例如,按照以下两条策略执行:“CPU负载大于50%,增加10台云主机”“内存负载小于20%,减少5台云主机”,在CPU负载为50%、内存负载为20%的临界值左右,会造成频繁增加10台云主机和减少5台云主机的操作,增加的10台云主机可能还没完全启动完成就被移除,系统会频繁地重新分配请求。可以通过“冷却时间”来避免此类问题,设置冷却时间,如5分钟,在5分钟内只会执行一次扩容或缩容的操作。

如果要使运行不同业务的数十类云主机自动伸缩,则需要配置数十个配置模板和镜像,在初期配置时会有一些工作量。另外伸缩过程有伸缩时延,从监测到满足扩容条件到执行扩容动作,再到资源启动完成加入均衡后提供服务,这个过程最少需要一两分钟,在能提供服务之前,原有的资源压力会继续增大,因此在扩容时需要考虑时间延迟,设置一个合理的触发阈值,并在触发扩缩容时通过事件监控进行监控与告警。

139
2
0
0
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论