Без Spot-инстансов batch-обработка в облаке обходится в 3–5 раз дороже. Клиенты часто переплачивают за on-demand ресурсы, которые простаивают между задачами. Мы, как инженеры, уже более 5 лет используем Spot/Preemptible Instances для снижения затрат на 60–80% без потери надёжности. Ниже — конкретные методы, конфигурации и готовые решения, проверенные на десятках проектов.
Какие задачи эффективнее выполнять на Spot-инстансах?
Spot-инстансы идеальны для stateless batch-задач: CI/CD воркеры (каждый билд изолирован), обработка изображений и видео (transcoding, resize), ML training с checkpoint-based подходами, парсинг и ETL-пайплайны, рендеринг, антивирусные сканы, аналитические запросы. Они не подходят для stateful баз данных (риск потери данных), web-серверов без быстрого замещения и сервисов с жёстким SLA без DR-стратегии.
Как Spot Fleet снижает вероятность прерываний?
Ключ к стабильности — Spot Fleet с несколькими типами инстансов. Если m5.xlarge недоступен, Fleet подхватит m5a.xlarge или c4.xlarge. Используем стратегию capacityOptimized — она выбирает пулы с наибольшей свободной ёмкостью, снижая вероятность прерывания. Пример конфигурации:
{
"SpotFleetRequestConfig": {
"AllocationStrategy": "capacityOptimized",
"TargetCapacity": 10,
"LaunchTemplateConfigs": [
{
"LaunchTemplateSpecification": {"LaunchTemplateId": "lt-xxx", "Version": "1"},
"Overrides": [
{"InstanceType": "m5.xlarge", "WeightedCapacity": 1},
{"InstanceType": "m5a.xlarge", "WeightedCapacity": 1},
{"InstanceType": "m4.xlarge", "WeightedCapacity": 1},
{"InstanceType": "c5.xlarge", "WeightedCapacity": 1}
]
}
]
}
}
Почему checkpointing критически важен?
Spot-инстансы могут быть остановлены в любой момент. Без checkpointing потеря прогресса делает их экономию бессмысленной. Реализация механизма сохранения состояния позволяет перезапускать задачи с последней сохранённой точки, минимизируя потери. На практике это даёт до 95% полезного времени выполнения даже при частых прерываниях.
Как правильно обработать Spot Interruption Notice?
За 2 минуты AWS отправляет metadata-событие (подробнее в документации AWS). Приложение должно опрашивать endpoint и при сигнале прерывания сохранять checkpoint. В коде ниже — реализация на Python с graceful exit:
import requests
import signal
import sys
def check_spot_interruption():
"""Вызывать каждые 5 секунд из воркера"""
try:
response = requests.get(
'http://169.254.169.254/latest/meta-data/spot/interruption-notice',
timeout=1
)
if response.status_code == 200:
return True # Прерывание ожидается
except requests.exceptions.RequestException:
pass
return False
class BatchWorker:
def process_task(self, task):
# Checkpoint каждые N элементов
for i, item in enumerate(task.items):
if i % 100 == 0 and check_spot_interruption():
self.save_checkpoint(task.id, i)
sys.exit(0) # Graceful exit, задача будет перезапущена
self.process_item(item)
task.mark_complete()
Этапы обработки прерывания:
- Опрос endpoint метаданных каждые 5 секунд.
- При получении сигнала — сохранение checkpoint (например, в S3 или Redis).
- Graceful exit с кодом 0, чтобы очередь (SQS) не считала задачу упавшей.
Также можно использовать AWS EventBridge для автоматизации: событие → Lambda → сохранение checkpoint, удаление инстанса из пула, возврат задачи в очередь.
Что такое Karpenter и как он управляет Spot-узлами?
Karpenter (AWS) автоматически выбирает тип инстанса (включая Spot) и обрабатывает прерывания: при получении уведомления он cordon и drain ноду, перепланируя поды. Пример Provisioner:
apiVersion: karpenter.sh/v1alpha5
kind: Provisioner
metadata:
name: batch-workers
spec:
requirements:
- key: "karpenter.sh/capacity-type"
operator: In
values: ["spot", "on-demand"]
- key: "node.kubernetes.io/instance-type"
operator: In
values: ["m5.xlarge", "m5a.xlarge", "m4.xlarge", "c5.xlarge"]
taints:
- key: batch
effect: NoSchedule
consolidation:
enabled: true
Сравнение стратегий: Karpenter по сравнению с ручным управлением Spot Fleet сокращает время реагирования на прерывания в 2 раза за счёт автоматического cordon и drain. Spot Fleet — простота, но требует ручного управления шаблонами. Karpenter — динамическое масштабирование и автоматическое восстановление, но сложнее в настройке. Оба дают экономию 60–80%.
| Стратегия | Управление | Обработка прерываний | Сложность настройки |
|---|---|---|---|
| Spot Fleet | Ручное (Launch Templates) | Ручное (приложение) | Низкая |
| Karpenter | Автоматическое (Provisioner) | Автоматическое (cordon/drain) | Средняя |
GCP Preemptible / Spot VMs: нюансы
GCP Preemptible: максимум 24 часа жизни, уведомление за 30 секунд. Spot VMs — без лимита 24 часов, только по availability. Создание через gcloud:
gcloud compute instances create batch-worker \
--machine-type=n2-standard-4 \
--provisioning-model=SPOT \
--instance-termination-action=STOP \
--zone=us-central1-a
Здесь тоже применяется checkpointing, но с учётом более короткого уведомления (30 секунд). Реализация аналогична AWS, но с опросом через GCP metadata server.
Что входит в настройку под ключ?
- Аудит текущих workloads и выбор подходящих
- Проектирование Spot Fleet / Provisioner с несколькими типами инстансов
- Реализация checkpointing и обработки прерываний (код на Python/Go/Java)
- Интеграция с EventBridge, Lambda, очередями (SQS, RabbitMQ)
- Настройка мониторинга (CloudWatch, Prometheus) и оповещений
- Документация и обучение команды
- Тестирование с симуляцией прерываний
- Post-launch поддержка 1 месяц
Сроки ориентировочно
| Этап | Срок |
|---|---|
| Spot Fleet / Launch Template | 1–2 дня |
| Interruption handling в приложении | 2–3 дня |
| Kubernetes Karpenter | 2–3 дня |
| Тестирование | 1 день |
| Итого | 5–9 дней |
Стоимость рассчитывается индивидуально под ваш объём и сложность. Запросить оценку — просто напишите нам. Мы гарантируем прозрачное ценообразование и фиксацию объёма работ.
Реальная экономия на цифрах
Типичная экономия составляет 60–80% по сравнению с on-demand. Надбавка за прерывания и перезапуски — 5–15% времени. На одном из проектов по ML training на p3.2xlarge экономия достигла 70%. Наши клиенты подтверждают: грамотная реализация checkpoint окупается за 1–2 месяца. Свяжитесь с нами для расчёта экономии под вашу нагрузку. Закажите аудит ваших batch-задач — наши инженеры с 5+ лет опыта и сертификациями AWS/GCP помогут снизить счёт за облако без потери производительности.







