垂直自动扩缩会根据流处理器的资源使用情况自动调整其 层级。当您启用自动扩展时,Atlas Stream Processing 会在您定义的层级范围内扩展或缩减处理器。您无需要手动停止并重启处理器以更改其层级。
自动伸缩可帮助您处理波动的工作负载,吸收意外的流量峰值,并避免在处理器耗尽其层级资源时发生的故障。由于Atlas Stream Processing在内部管理扩展决策,因此您无需自行监控使用情况和调整处理器大小。
用例
请考虑在以下情况下启用垂直自动伸缩:
不确定的初始大小:如果无法准确估计处理器所需的层级,请从较小的层级开始,并允许自动扩展来调整层级以匹配实际负载。
流量波动或增长:如果工作负载出现自然增长或周期性峰值,自动扩展功能会在高需求期间增加资源,并在低需求期间减少资源。
操作韧性:如果容量过小的处理器在高峰事件期间出现故障,自动伸缩功能会自动提升层级,保持处理器运行。
自动伸缩的工作原理
当您为流处理器启用自动伸缩时, Atlas Stream Processing会监控处理器的 CPU 和内存使用情况,并将其与内部托管的阈值进行比较。 Atlas Stream Processing控制这些阈值以平衡响应能力和稳定性,并且您无法配置它们。
要更改处理器的层级,Atlas Stream Processing 会执行以下操作:
扩展行为
当处理器的资源使用量持续超过以下纵向扩展阈值之一时, Atlas Stream Processing会将处理器扩展到下一个更高层级:
CPU 使用率已持续 60 分钟超过 90%
内存使用率高于 80% 持续 60 分钟,或高于 90% 持续 30 秒
Atlas Stream Processing 还会在处理器内存不足时对处理器进行扩展。启用自动扩展时,出现内存不足的情况会将处理器扩展到下一个更高的层级,而不是导致处理器失败。
向上扩展可快速响应持续的资源压力,从而保护处理器可用性。
仅当下一个更层级小于或等于配置的 maxTier 时, Atlas Stream Processing才会向上扩展处理器。
缩减行为
Atlas Stream Processing 将处理器向下扩展到下一个更低层级,当处理器的 CPU 和内存使用率超过两天保持低于降级阈值时。缩小阈值是下一个更低层级的扩展阈值,减去 10% 的缓冲,这样可以防止处理器立即扩展回来。这两天的稳定期使得缩小扩展故意变慢,以防止层级之间频繁扩展。
仅当下一个较低层级大于或等于配置的 minTier 时, Atlas Stream Processing才会缩减处理器。
层级边界:minTier 和 maxTier
Atlas Stream Processing管理扩展阈值时,您可以通过以下两个设置控制处理器可扩展的层级范围:
设置 | 说明 |
|---|---|
| 处理器可以扩展到的最低层级。保证资源基线水平并设置费用下限。 |
| 处理器可以扩展到的最高层级。限制资源消耗和费用,并防止异常峰值将处理器扩展到不必要的昂贵层级。 |
如果在启用自动伸缩时未指定 或 , AtlasminTiermaxTier Stream Processing将默认使用流处理工作区配置:
如果您不指定
minTier, Atlas Stream Processing将使用流处理工作区默认层级和启动处理器的层级中较低者。当默认层级于起始层级时,使用较低的值可防止无效配置。如果您不指定
maxTier, Atlas Stream Processing将使用流处理工作区的最大层级大小。如果流处理工作区没有最大层级大小,处理器将返回错误并且不会启动。
某些管道功能需要层级。示例,使用故障转移处理器的处理器需要的层级为 SP10。将minTier 至少设置为处理器管道所需的层级。
下表显示了 minTier 和 maxTier 如何绑定扩展操作:
层级配置 | 当前层级 | 扩展操作 | 结果层 |
|---|---|---|---|
|
| 扩大规模 |
|
|
| 扩大规模 | 仍为 |
|
| 缩减 |
|
|
| 缩减 | 剩余 |
启用和配置自动缩放
您可以使用 sp.processor.start() 上的 autoscaling 选项或 mongosh 中的sp.processor.modify() 方法启用、修改和禁用流处理器的自动伸缩。 Atlas Stream Processing会保留自动伸缩配置,因此,如果在不进行更改的情况下停止并重新启动处理器,处理器会重复使用其之前的配置。
要以 Stream Processing 工作区域的默认层级和最大层级为界限启用自动扩展,请使用以下语法:
sp.processor.start({autoscaling: {enabled: true}})
要启用具有显式层级边界的自动伸缩,请指定 minTier 和 maxTier:
sp.processor.start( {autoscaling: {enabled: true, minTier: "SP2", maxTier: "SP50"}} )
要设立处理器启动的层级,同时允许处理器在不同范围内扩展,请指定 tier 和 autoscaling 选项:
sp.processor.start( {tier: "SP10", autoscaling: {enabled: true, minTier: "SP5", maxTier: "SP30"}} )
要更改现有处理器的层级范围,请停止处理器,然后使用新值修改层级。必须停止处理器,然后再修改它。Atlas Stream Processing 仅更改您提供的值:
sp.processor.modify( {autoscaling: {enabled: true, minTier: "SP2", maxTier: "SP30"}} )
要禁用自动扩展,请停止处理器并将 enabled设立为 false:
sp.processor.modify({autoscaling: {enabled: false}})
当您禁用自动扩展时, Atlas Stream Processing会将处理器的 validTier 固定到其 tier 基线。
其他行为
层级和有效层级
启用自动扩展后, Atlas Stream Processing会跟踪处理器的两个层级值:
tier: 您设置的基线层级。Atlas Stream Processing 不会通过自动缩放来改变此值。它仅在您设置新基线时改变,该基线将在您下一个启动处理器时生效。effectiveTier:只读值,显示处理器实际运行的层级。启用自动伸缩后, Atlas Stream Processing会在minTier和maxTier设立的范围内调整effectiveTier。禁用自动扩展时,effectiveTier匹配tier。
如果您在自动伸缩更改处理器的 effectiveTier 后停止该处理器,Atlas Stream Processing会在其最后一个 effectiveTier 上重新启动该处理器,而不是最初启动该处理器时所在的 tier 上。此行为可让处理器恢复之前的工作负载,而无需等待再次自动伸缩。
要查看处理器的自动伸缩配置和当前层级,请使用 sp.processor.stats() 方法。输出包括 tier 基线、只读 effectiveTier 以及带有 minTier 和 maxTier 的 autoscaling对象:
sp.processor.stats() { ok: 1, name: 'sampleProc', state: 'STARTED', tier: 'SP10', effectiveTier: 'SP10', autoscaling: { minTier: 'SP2', maxTier: 'SP50' }, stats: { ... }, ... }
层对齐
如果使用超出配置的自动伸缩范围(低于 minTier 或高于 maxTier)的 tier 值启动处理器,则处理器将返回错误并且不会启动。
maxTier 资源耗尽
如果处理器在配置的 maxTier 耗尽其资源,则Atlas Stream Processing 的行为如下:
内存耗尽:处理器出现内存不足错误。
CPU 耗尽:处理器继续运行。
如果处理器达到 maxTier 并且无法跟上其工作负载,请考虑优化您的管道逻辑或增加 maxTier。
监控自动伸缩事件
Atlas Stream Processing 记录每个向上扩展和向下扩展事件。每条记录都会识别处理器和 Stream Processing 工作区、事件是扩展还是扩展缩减、处理器移入和移出的层级以及触发事件的指标。要了解如何查看扩展事件和配置警报,请参阅 监控 Stream Processors。