1. 云上资源管理面临的挑战
云上资源管理之所以面临诸多挑战,不是因为云上资源管理使用不便,而是因为云上资源管理提供了丰富的功能,而如何使业务场景更好地使用云上资源进行管理,才是真正的云上资源管理所面临挑战的原因。云上资源管理面临的挑战有3个方面,如下图:
弹性问题,如何给予自身的业务场景构建资源弹性的能力,如当业务负债突增时,如何快速创建资源场景,是选择手动创建资源还是自动创建资源?或者不创建资源直接影响业务性能?这体现出弹性资源管理的能力差异。
可用性问题,如何构建可用的系统来满足业务稳定性需求,如当多机房部署资源的场景下,如何进行容灾管理,是进行单机房部署,还是多机房部署,还是手动维护多机房部署。或是更进一步自动进行多机房部署。当某个机房出现问题时,能够通过其他的机房来恢复业务的稳定性。这些都是对云上资源管理可用性的考验。
成本问题,如何在保障业务可用性的同时进一步降低资源成本,是按日常最大负载的资源用量进行资源部署,长时间维持资源,还是按照资源的高低峰来进行部署以降低资源的成本,或者相同的资源、相同的规格,使用不同的付费方式来降低成本等等。
由上可知,相同的业务场景,通过不同的资源管理手段可以取得比较明显的差异。在部分场景下可以实现可用性能提升,成本降低70%,这在之后的案例中会提到。
2. 如何实现高弹性、高可用、低成本资源管理
2.1 高弹性、高可用、低成本资源管理之间的关系
高弹性是一种资源管理手段,它是通过资源弹性实现资源的高可用和低成本的目标,是一种手段;高可用是资源管理的核心目标,通过资源的高可用来保障业务的稳定性,而保障业务的稳定性永远是最核心的;低成本是资源管理的次要目标,它是在保障资源可用性、业务稳定性的前提下避免资源的浪费。
综上,高弹性是实现高可用、低成本的方式。因此,要通过实现高弹性来解决高可用、低成本的问题。
2.2 如何利用弹伸缩服务实现业务的高弹性
2.2.1 弹性能力
① 弹性能力的定义:弹性能力主要是解决某个业务场景下如何实现资源与业务负载波动匹配的能力,主要分为两类,一类是水平弹性,是指通过横向扩容实例的方式来解决资源负载的问题;另一类是垂直弹性,是指通过垂直扩缩的方式解决资源负载的问题。如2C4G,垂直弹性会变成4C8G,通过提升规格的规模来保证业务的稳定性。本节课主要讲解通过水平弹性的方式达到高弹性能力。
② 弹性能力的业务价值:弹性业务能力主要有三个业务价值,首先是高可用,其次是省成本,第三个是高效,通过下面两幅图即可简单说明弹性能力的业务价值。
上图表示的是传统模式下的资源管理,在不具备弹性能力时,黑色的曲线表示业务的负载是动态变化的,绿色的曲线表示业务资源部署量。
观察第一条波峰曲线,日常情况下资源部署是按照略大于日常高峰期的资源量进行部署,即无论是低峰期或是高峰期,都按照最大资规模格部署,则会导致资源浪费;
观察第二个波峰曲线,一旦业务负载突增,日常的规模不能满足业务资源需求时,则会导致资源不足影响业务的稳定性,影响可用性;
观察第三个波峰曲线,一旦出现负载变化时,就需要人为介入。若人为介入,则需要人为扩容资源保证业务的稳定性,在高峰期突增之后,再人为进行资源的释放,而人为介入需要一定的成本,且效率和正确性也无法得到保障。
第二幅图表示弹性模式,黑色曲线表示业务负载,绿色曲线表示资源部署用量。理想影响情况下,弹性模式资源的部署量随业务负载变化。当业务负载增高时,部署的资源动态增加,保证业务的可用性,当业务负载降低时,资源的部署量也会动态减少,以此节约资源的成本。
这是弹性模式下的理想曲线,整个过程都是自动化实现的,无需人为介入,效率更高,同时相较于传统模式,其明显提高了突增场景下的业务可用性,此外,资源是动态扩缩的,在低峰期可以节省成本,在人为介入后,自动化弹性能够更高效地提供资源。
2.2.2 实现业务弹性需要面临的挑战
如果要通过自有的实例扩缩接口来实现弹性深造能力,应解决问题如下:
① 弹性速度:弹性速度是指弹性扩容资源提供资源速度,如当业务负载高峰期时,需要紧急扩容10台机器运行,但实际情况下能否立刻扩容相应的机器满足业务需求,弹性的速度直接关系到种洪峰流量场景下的业务稳定性。
② 弹性成功率:弹性成功率主要是指日常的弹性扩缩任务成功的概率,稳定的弹性成功率是保证业务核心稳定、连续的关键因素。
③ 弹性效率:弹性效率主要是指当弹性进行大规模资源交付时,能否进行快速的交付,其直接关系到大规模交付场景下的业务可用性。如离线计算场景下资源不能快速大规模资源交付,会严重影响离线计算速度。
④ 弹性的准确性:最理想的情况(理想曲线)下,能够准确地随业务负载动态变化。但如果要实现较高的弹性准确性,首先需要精确的识别负载,进而精确地控制弹性扩缩,难度很大,如要保证资源采集的实时性、准确性,再进行扩缩,且要保证相应的速度,以此保证弹性的准确性。要实现高可用的弹性能力非常困难,关于四个挑战的具体的内容,此处不详细展开。
2.2.3 业务弹性化改造
即通过阿里云弹性伸缩服务实现资源的弹性化管理。
① 弹性服务产品:弹性伸缩(Elastic Scaling Service),简称ESS,也称为Auto Scaling,是指根据业务负载需求和策略自动调整计算能力(即实例数量)的服务,动态调整资源实例数。它是横向弹性扩容的产品,可以指定实例的类型,目前弹性伸缩服务支持ECS场景和ECI场景。弹性伸缩不仅适合业务量不断波动的应用程序,同时也适合业务量稳定的应用程序。因为其本身提供了高可用的资源管理能力,及时不是动态扩缩,也有高可用场景。
② 工作原理:弹性伸缩服务通过伸缩组对资源进行分组,如下图所示:
伸缩组对资源进行分组之后,业务可以基于自己的服务特性、服务维度进行划分,如a服务划分在一个伸缩组,b服务划分在另一个伸缩组,伸缩组之间是彼此隔离,独立进行各自的调度。实例添加到伸缩组之后,弹性伸缩服务自动将实例统一进行监控指标的采集和聚合,提供负载计算的能力。通过不同的伸缩模式来进行动态扩缩。一般包括五种:
- 基于监控指标动态扩缩:为CPU规定一定的区间控制扩容和缩容。
- 自定义模式:即仅反馈给伸缩组扩容多少实例,或者释放多少实例,一般适用于高级的自动调度的服务,如K8S的和cluster-autoscaler,ESS服务为其提供了阿里云的provider。
- 定时模式:主要适用于负载周期性变化的场景,在高峰期来临之前可以定时扩容,在高峰期过后定时缩容。
- 健康模式:适用于业务稳定的应用程序,一旦检测到某个实例状态异常,即会释放该异常实例,并将之替换,以保证实例数健康,进而保证服务的稳定性。
- 固定数量模式:指定了伸缩组维持多少实际数,如某个实例被释放,伸缩组会自动扩容来保持伸缩组实例数相同。
当扩容时,弹性伸缩服务通过伸缩配置进行实例扩容信息的制定。伸缩配置中保存了与实例相关的基本信息,如使用何种镜像、可用区等。当确定伸缩配置后,即可创建实例并自动添加到伸缩组,因为弹性伸缩服务支持云产品联动,当实例添加到伸缩组之后,可以自动将实例注册到关联的负载均衡、RDS白名单,实现云产品之间的结合,保证云产品联动的场景下的弹性伸缩服务的能力建设。
2.3 利用弹伸缩服务实现业务的高弹性
结合前面学习的实现业务弹性需要面临的挑战,即要实现高弹性需要解决的问题,包括弹性速度、弹性成功率、弹性效率和弹性准确率。通过对比ESS的弹性扩缩与手动管理实现弹性扩缩之间的差异,可以得出ESS实现高弹性能力的优势显著。
① 弹性速度:ESS提供了秒级弹性,这得益于秒级创建的ESI/ECS实例,同时ESS内置了事件驱动模型,当实例创建成功后,ESS会自动感知进行后续的操作流程,尽快地为实例提供服务。如注册到RDS或SLB。
② 弹性成功率:ESS的弹性成功率高达99.9%,因为ESS支持多规格、多可用区的组合,即一个伸缩组可以配置多个规格、多个可用区,当某个规格或者某个区资源不足时,会自动跳过该规格和可用区,进一步保证业务的扩容成功率。当对扩容成功率有要求时可以通过这种方式解决。同时,ESS也支持内部与库存服务联动的模式,库存服务会基于多个规格、多可用区进行推荐,避免扩容时选择规格库存不足的场景提高种成功率。
③ 弹性效率:ESS能够实现60秒内完成千台资源交付,其实现逻辑是通过对单次扩容的大批量资源进行拆分,然后并发进行扩容。因为一般情况下,一次实例扩容有数量限制,通过拆分并发进行批量交付的加速。另外这也得益于ESS弹性成功率的保障,避免了扩容失败后再次尝试扩容的不必要的耗时。
⑤ 弹性准确率:ESS提供了高准确率保障,其内部集成了云监控,可以提供稳定的监控数据和告警。另外ESS本身也提供了多种模式精确匹配业务负载的场景能力,可以基于自己的应用场景选择不同的模式进行匹配,如稳定性要求高并有周期规律场景,则可以通过定时和动态的模式进行匹配,尽可能地保证弹性资源的创建与业务的负载匹配。
2.4 弹性资源的发布部署管理
通过ESS建立弹性能力之后就能够解决很大一部分场景的弹性资源管理问题,但对于有些需要对弹性资源进行发布部署管理的场景,还需要解决弹性资源的发布部署的问题。
① 弹性资源发布部署管理问题:弹性资源发布部署主要有两个问题,第一个问题是发布部署的实例是动态变化的,应如何进行统一的发布部署;第二个问题是如果版本更新后,未来弹性扩容的实例如何使用最新的版本。
② 弹性资源发布部署管理方式:主要包括两种方式,一般情况下是镜像和包。
- 镜像:泛指VM镜像和容器镜像,镜像发布场景流程基本相同,首先进行镜像的构建,通过镜像对所有的弹性实例进行滚动升级,更新镜像信息使得未来扩容的实例使用最新的镜像。
- 包:发布方式主要是五个流程,首先进行软件包构建和上传,然后进行弹性实例的包发布的滚动升级,更新弹性资源关联的包信息,接下来创建未来弹性扩容的实例,进行包的部署,使得弹性扩容的实例使用最新的包。
③ ESS支持的发布部署方式:主要提供四种管理方式。
- ESS控制台:目前支持镜像和包两种方式,操作相对比较简单,它的缺点在于用户需要自行构建镜像或软件包的构建和上传,仅对后续步骤进行管理
- OSS管理:相较于第一种方式,他额外支持控制台操作和API操作。控制台的管理方式与第一种相同,都需要用户自己构建镜像和软件包。
- 云效流水线发布:使用云效产品,其流水线功能可以进行CI/CD流程的定义,实现从源码到镜像构建、包构建上传的完整流程,可以管理整个流程。目前仅支持ECI镜像发布部署及ECS包发布部署。
- Jenkins发布部署:提供了Jenkins插件,适用于本地进行软件包的构件,进行管理发布部署的方式。优点在于可以实现在自己的环境下进行整体的弹性资源的滚动发布部署管理。缺点在于目前仅支持ECS软件包的方式,暂不支持镜像方式。
具备弹性能力和发布部署能力之后,基本上就可以实现整个完整的资源的弹性管理。
更多精彩内容,欢迎观看: