弹性伸缩 #
概览 #
使用”弹性伸缩“功能,可获得以下两方面收益:
- 提高稳定性:提供一种根据服务流量负载对服务自动扩容缩容的方式,提高服务可用性
- 降本:按需实时弹性可避免资源浪费,最大程度发挥资源优势
目前弹性伸缩功能可针对单个服务配置扩缩容规则。 规则支持concurrency(并发)和RPS(每秒请求数量),可以设置单个副本的目标值,当平均单个副本达到目标值的时候就会触发扩容操作。 可以设置最大副本数和最小副本数来限制扩缩容的上下限制。
Tips
注意这里的RPS包括限流的请求但是不包括健康检查的请求
平台使用说明 #
平台功能一览 #
目前平台侧支持操作如下
- 针对单个服务进行服务扩缩容配置
- 提供扩缩容相关的遥测数据
服务扩缩容配置 #
查看已配置的服务列表

服务具体的扩缩容策略配置

关于扩缩容指标的场景说明
并发:对于请求响应慢的服务,特别是PHP服务,由于php-fpm限制,推荐使用并发类型的扩缩容配置。因为在这种情况下比较容易达到并发瓶颈。
RPS:对于请求响应比较快的服务,特别是go服务,推荐使用RPS类型的扩缩容配置。因为这种类型的服务通常存在每秒并发请求上限,但是对于同时并发数量相对敏感度差一些。
普通参数说明
| 参数 | 说明 |
|---|---|
| 扩缩容指标 | concurrency 可以理解为“并发”,即:在指定时间范围内,正在被处理的请求总数。 rps 理解为“吞吐”,即:每秒钟到达服务的请求总数,包含限流的请求数量,但是不包含健康检查的请求。 |
| 单副本目标值 | 缩放指标的目标值,不论指标是并发还是rps指标,目标值针对的都是单个pod。 以rps为例,假设单副本目标值为10,当前一共有3个副本。那么当每秒钟请求数量到达30,即平均每个副本为10即会触发扩容操作。当每秒钟请求数量小于20,那么就会触发缩容操作缩小到两个副本。 |
| 初始副本数 | 部署的服务的初始副本数。建议设置为1。此设置主要是在缩放到0时会比较有意义。因为大部分服务在启动的时候可能会执行一些耗时的操作,比如数据库迁移等。所以如果服务最小副本数为0时,初始副本数可以让服务提前进行初始化操作,减小冷启动延迟。 |
| 副本伸缩范围 | 最小值: 目前缩放到0的适配未完成。所以最小副本数最小应该为1,如果服务流量比较大,可以按照实际需要设置最小副本数。 最大值: 服务的最大副本数量,为0表示不设上限。 |
| 缩减副本延迟 | 当根据流量指标计算需要缩容时,不会立即缩容,而是等待副本缩放延迟时间再进行缩容。如果在这个过程中,流量回归到大流量状态,那么缩容操作就会被放弃。为了防止频繁的扩缩容操作,通常都不会立即缩容,以防止短间隔的突发流量到来。可以根据服务的实际情况设置服务的缩容延迟,推荐时间为5分钟到1小时(5m-1h)。 |
高级参数说明
这部分参数通常可以使用默认值不进行更改,会有一个比较通用的默认值。当你希望对自己的服务有更精细的控制的话,你可以对这部分参数进行了解,
| 参数 | 说明 |
|---|---|
| 普通窗口时间 | 使用滑动时间窗口来统计扩缩容指标值。时间越长,扩缩容越平缓。时间越小,则扩缩容越灵敏。最小值为6s,最大值为1h。建议最小值不要小于20s,想要更灵敏的反应可以通过紧急时间窗口来配置。 假设普通窗口时间为60s,扩缩容类型为rps,那么用来计算是否需要扩缩容的指标就是过去60s的平均rps。 |
| 紧急模式时间窗口 | 紧急模式在官方的场景下叫做恐慌模式(panic mode),是为了快速响应负载变化而设计的一种模式。紧急模式时间窗口是普通窗口时间的百分比。比如普通窗口时间为40s,紧急模式窗口时间设置为10,那么紧急模式时间窗口就是4s。请注意计算后的时间必须要大于2s否则可能会造成扩缩容状态丢失,如果小于1s紧急模式就不会生效。 简而言之紧急模式时间窗口更小更敏感。紧急模式不仅有自己的时间窗口,也有自己的指标。 |
| 紧急模式指标阈值 | 此阈值也是一个百分比,是单副本目标值的倍数的百分比表示。最小值为110,最大值为10000。在紧急模式的时间窗口下,当指标超过紧急模式指标阈值时,就会进入扩容状态,以更快的应对突发流量。 |
| 预扩缩容 | 当达到设定指标目标值百分比时,提前扩容,保障服务稳定性。这里设置为指标目标值的百分比。通常为了提高服务的可用性,并不是到达target才开始扩容,而是到达这个限制时就开始扩容。比如concurrency定义为10,此值为70(百分比),那么一个pod能够承载的最大并发仍然是10,但是并发达到7的时候就开始进行扩容了。 |