弹性伸缩在云计算领域的简述
弹性伸缩又称自动伸缩,是云计算场景下一种常见的方法,弹性伸缩可以根据服务器上的负载、按一定的规则、进行弹性的扩缩容服务器。
弹性伸缩在不同场景下的含义:
对于服务运行在自建机房的公司,弹性伸缩通常意味着允许一些服务器在低负载时进入睡眠状态,从而节省电费(以及用于冷却机器的水费和水费)。
对于使用在托管在云上的机房的公司而言,自动扩展可能意味着更低的费用,因为大多数云提供商都基于总使用量而不是最大容量进行收费。
即使对于不能在任何给定时间减少运行或支付的总计算能力的公司,它们也可以在低流量时降低服务器的负载。
弹性伸缩解决方案还可以用来替换异常状态的实例,从而在一定程度上防止硬件,网络和应用程序故障。
在生产工作负载经常变化且不可预测的情况下,弹性伸缩可以提供更长的正常运行时间和更高的可用性。
引用自:https://zh.wikipedia.org/wiki/%E5%BC%B9%E6%80%A7%E4%BC%B8%E7%BC%A9
弹性伸缩的三大关键要素 1. 基于什么特征和属性弹性伸缩,顾名思义某种机制能够让某些对象进行弹性的扩容和缩容。在云计算和容器相关领域也有较多的关于弹性伸缩的能力,有基于系统负载进行弹性扩缩容的,有基于业务日志进行弹性扩缩容的,也有基于资源预申请进行弹性扩缩容的。最常用的主要有以下记录:
基于系统负载指标扩缩容对象
使用场景:当您的应用程序承担更多负载时,往往需要更多的 CPU 和内存资源,这时您可以设置一个 CPU 和内存利用率的指标,系统会自动设置副本数以动态承担不同的负载情况,防止资源利用率过低的资源浪费或负载过高时应用程序无法承担。
限制:有时应用的负载变高但 CPU 和内存的利用率并没有很高,这时基于系统负载指标扩缩容是无效的。并且具体使用哪一种系统负载指标,以及利用率的阈值设定都是比较需要经验的。
基于业务日志扩缩容对象
使用场景:业务的日志有专门记录和存储,并且可以通过日志分析得到当前应用的实际负载情况,这时可以根据业务的日志自动扩缩容。
限制:需要拥有日志存储和分析工具;日志信息量普遍很大,基于日志的弹性扩缩容易误判、漏判。
基于资源请求扩缩容对象
使用场景:当有些应用不适合水平扩缩容时,此时可以通过调整对资源的请求量来实现扩缩容。相较方式1是扩容副本数实现水平扩缩容,此时扩容的是容器对资源的请求量,属于垂直扩缩容。
限制:当前这种方式需要重建容器,可能会引发服务的中断;并且垂直扩容依赖当前容器运行的节点容量大小,如果节点本身没有剩余资源,也无法实现垂直扩容。
基于事件扩缩容对象
使用场景:例如当您的业务需要处理 Kafka 消息队列中的任务时,Kafka 中每多一条 topic,需要生成一个新的副本来处理这个 topic;或者数据库每多一条任务数据,会自动生成一个新的副本来承载这个任务。
限制:完全依赖事件的触发,但事件本身处理时长有长有段,负载程度有高有低,完全相同的副本无法灵活应对。
当然还可以用其他的特征和属性进行扩缩容对象,这里也未全部枚举,具体业务使用弹性伸缩,按需选择不同的特征和属性,特征和属性则是弹性伸缩的基础。
基于上述的特征和属性获得了数据之后,那么就需要一定的策略和判断规则。 总结来说就是:
上述的特征和属性在什么情况和边界下或进行扩容、扩多少、扩什么对象、怎么个扩法?
上述的特征和属性在什么情况和边界下或进行缩容、缩多少、缩什么对象、怎么个缩法?
举个 kubernetes Cluster AutoScaler 的例子:
在腾讯云容器服务里节点的缩容策略:
CA(Cluster Autoscaler)监测到利用率(取 CPU 利用率和 MEM 利用率的最大值)低于设定的节点。计算利用率时,可以设置 Daemonset 类型不计入 Pod 占用资源。
CA 判断集群的状态是否可以触发缩容,需要满足如下要求:
节点空闲时长要求(默认10分钟)。
集群扩容缓冲时间要求(默认10分钟)。
CA 判断该节点是否符合缩容条件。您可以按需设置以下不缩容条件(满足条件的节点不会被 CA 缩容):
含有本地存储的节点。
含有 Kube-system namespace 下非 DaemonSet 管理的 Pod 的节点。说明:
CA 驱逐节点上的 Pod 后释放/关机节点(不会处理包年包月节点)。
完全空闲节点可并发缩容(可设置最大并发缩容数)。
非完全空闲节点逐个缩容。