垂直自动伸缩可根据流处理器的资源使用情况自动调整流处理器的层级。启用自动伸缩后, Atlas Stream Processing会在您定义的层级范围内向上或向下扩展处理器。您无需手动停止并重新启动处理器即可更改其层级。
自动伸缩可帮助您处理波动的工作负载,吸收意外的流量峰值,并避免在处理器耗尽其层级资源时发生的故障。由于Atlas Stream Processing在内部管理扩展决策,因此您无需自行监控使用情况和调整处理器大小。
用例
请考虑在以下情况下启用垂直自动伸缩:
不确定的初始大小:如果无法准确估计处理器所需的层级,请从较小的层级开始,并允许自动扩展来调整层级以匹配实际负载。
流量波动或增长:如果工作负载出现自然增长或周期性峰值,自动扩展功能会在高需求期间增加资源,并在低需求期间减少资源。
操作韧性:如果容量过小的处理器在高峰事件期间出现故障,自动伸缩功能会自动提升层级,保持处理器运行。
自动伸缩的工作原理
当您为流处理器启用自动伸缩时, Atlas Stream Processing会监控处理器的 CPU 和内存使用情况,并将其与内部托管的阈值进行比较。 Atlas Stream Processing控制这些阈值以平衡响应能力和稳定性,并且您无法配置它们。
要更改处理器层级, Atlas Stream Processing会执行以下操作:
扩展行为
当处理器的资源使用量持续超过以下纵向扩展阈值之一时, Atlas Stream Processing会将处理器扩展到下一个更高层级:
CPU 使用率超过 90% 已有 60 分钟
内存使用率高于 80% 持续 60 分钟,或高于 90% 持续 30 秒
如果处理器内存不足, Atlas Stream Processing还会扩展处理器。启用自动伸缩后,内存不足的情况会将处理器扩展到下一个更高层级,而不是使处理器出现故障。
向上扩展可快速响应持续的资源压力,从而保护处理器可用性。
仅当下一个更层级小于或等于配置的 maxTier 时, Atlas Stream Processing才会向上扩展处理器。
缩减行为
当处理器的 CPU 和内存使用率持续两天以上低于缩减阈值时, Atlas Stream Processing会将处理器缩减到下一个较低层级。缩减阈值是下一个较低层级的扩展阈值,减去防止处理器立即扩展的 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 如何绑定扩展操作:
层级配置 | 当前层级 | 扩展操作 | 结果层 |
|---|---|---|---|
|
| 扩大规模 |
|
|
| 扩大规模 | 仍为 |
|
| 缩减 |
|
|
| 缩减 | 仍为 |
启用和配置自动扩展
您可以使用autoscaling sp.processor.start()或sp.processor.modify() 中的mongosh 方法上的 选项来启用、修改和禁用流处理器的自动伸缩。 Atlas 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 基线。
其他行为
层级和 validTier
启用自动扩展后, 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 以及具有autoscaling minTier和 的maxTier 对象:
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会记录每个扩展和缩减事件。每条记录都标识处理器和流处理工作区、事件是向上扩展还是向下扩展、处理器移入和移出的层以及触发事件的指标。要学习;了解如何查看扩展事件和配置警报,请参阅监控流处理器。