AWS Spot实例作业完成时长及中断相关技术问题咨询
AWS Spot 实例相关问题解答
1. 中断率的准确定义是什么?
AWS给出的Spot实例预期中断率是基于过去7天的历史统计数据,核心定义是:特定实例类型在特定可用区中,连续运行满24小时的情况下,被AWS回收中断的概率。
你提到的“使用时长越长中断概率越高”是对的,这个固定数值α是24小时维度的基准概率。比如α=5%,意思是过去7天里,该实例类型在这个可用区中,每100台连续运行24小时的Spot实例,平均有5台会被中断。
如果要计算运行n小时的中断概率,可以用近似公式:中断概率 = 1 - (1 - α)^(n/24)。比如运行1小时的中断概率大约是5%/24≈0.21%,运行12小时的中断概率约为1 - (0.95)^0.5≈2.53%,完全符合“时长越长概率越高”的规律。
2. 实例被中断后能否自动重新请求同可用区同类型Spot实例?获取新实例的时长是多少?
- 可以实现自动重新请求:通过EC2 Auto Scaling组或Spot Fleet就能配置自动恢复。比如在Auto Scaling组里指定Spot实例类型和目标可用区,当实例被中断后,组会自动提交同规格的Spot实例请求,无需手动干预。
- 获取新实例的平均时长:通常在几秒到2-3分钟之间,具体取决于当前Spot市场的供需情况——如果该实例类型在目标可用区有充足闲置容量,启动速度和按需实例差不多;如果供需紧张,可能需要更久,甚至暂时无法获取。
- 中断率和获取新实例的时长没有直接关联:中断率是过去的中断概率统计,而获取实例的时长是当前市场的实时可用度,两者逻辑独立,没法通过α估算这个时长。
3. 如何估算使用同可用区同类型Spot实例完成作业的总时长?
因为你的作业会频繁保存状态,中断后可以从最近的 checkpoint 恢复,我们可以用概率模型做近似估算:
假设:
- 按需实例完成作业时长为
t分钟,转换成小时为t_h = t/60 - 24小时中断率为
α - 每次中断后,启动新实例+恢复作业状态的耗时为
r分钟(这个数值需要你根据自己的作业启动、状态加载流程预估)
步骤:
- 计算单次运行
t_h小时不被中断的概率:P = (1 - α)^(t_h/24) - 预期的运行次数(包括中断后重试):
E(次数) = 1/P - 总预期时长 = 所有运行的作业时长总和 + 所有重试的恢复时长总和
公式为:总时长 ≈ (E(次数) * t) + ((E(次数) - 1) * r)
如果恢复时长r远小于t(比如作业启动+恢复只需要1-2分钟,而t是几十分钟以上),可以简化为:总时长 ≈ t / P
举个例子:t=60分钟(1小时),α=5%,r=2分钟
- P = (0.95)^(1/24) ≈ 0.9979
- E(次数) ≈ 1/0.9979 ≈ 1.0021
- 总时长 ≈ (1.002160) + (0.00212) ≈ 60.13分钟,几乎和按需时长差不多
如果t=240分钟(4小时),α=5%:
- P = (0.95)^(4/24) ≈ 0.9915
- E(次数) ≈ 1.0086
- 总时长 ≈ (1.0086240) + (0.00862) ≈ 242.1分钟,比按需多2分钟左右
注意:这只是基于历史中断率的理论估算,实际总时长可能因为Spot市场波动(比如突发的容量需求导致中断率上升)、恢复时长变化等因素有所偏差。
内容的提问来源于stack exchange,提问作者Fish_n_Chips
相关产品推荐
相关产品推荐

