Вопрос или проблема
Мы ищем возможность развернуть микросервисы, которые будут работать в облаке (облако на данный момент неизвестно).
Микросервисы должны быть масштабируемыми, и поэтому мы думаем о реализации их с использованием стека контейнеров.
Я ищу программное обеспечение (предпочтительно с открытым исходным кодом), которое будет работать в облаке и управлять этими микросервисами, предоставляя возможность добавлять или удалять узлы из каждого микросервиса при необходимости.
Кроме того, поскольку каждый микросервис будет реализован с использованием стека контейнеров, нам нужно распределять задачи между узлами и иметь актуальный статус каждой задачи.
Мы должны иметь возможность предоставлять статус этих задач – успешен он или произошла ошибка.
Нам нужен механизм повторной попытки для задач.
Нам нужна отказоустойчивость – в случае сбоя узла, выполняющего задачу, задача должна быть подхвачена другим узлом.
Также нам нужна возможность планирования задач, что означает, что на основе некоторого расписания задача будет создана и отправлена на один из узлов микросервиса,
но выполнение каждой итерации может зависеть от статуса предыдущей итерации.
Я рассмотрел много фреймворков, но запутался, потому что все они, похоже, подходят под мои требования (Mesos, Kubernetes, Ignite и другие).
Что вы порекомендуете, учитывая все эти требования (или некоторые из этих требований), и может ли решение быть принято независимо от облака, на котором работает кластер, или некоторые облака предоставляют эти возможности самостоятельно, и тогда нет смысла разделять решение?
Это короткий ответ основан на моих текущих знаниях основных облачных провайдеров.
Я предполагаю, что вы собираетесь развертывать в AWS, GCP или Azure.
Я знаю, что на Azure и GCP есть автоматическое развертывание для Apache Mesos.
Для Kubernetes GKE (Google Container Engine) фактически является кластером Kubernetes. Если ваш кластер небольшой (<= 5 узлов), то дополнительных затрат на мастер не будет.
Скоро Azure также предоставит быстрый установщик для K8s.
Я не знаю, предоставляет ли AWS такие простые установки, но поскольку это один из наиболее используемых облачных провайдеров, есть множество примеров для настройки кластера.
Что касается другого требования: “Также нам нужна возможность планирования задач, что означает, что на основе некоторого расписания задача будет создана и отправлена на один из узлов микросервиса, но выполнение каждой итерации может зависеть от статуса предыдущей итерации.”
В Mesos у вас есть Chronos для планирования задач, но он охватывает только часть запуска. То, что вам нужно, не будет покрыто менеджером кластера, но должно быть решено с помощью такого фреймворка, как Spring Batch, например.
Ответ или решение
При выборе программного обеспечения для управления кластерами и планирования задач в контексте развертывания микросервисов в облаке необходимо учитывать несколько ключевых аспектов, изложенных в вашем запросе. Мы рассмотрим такие решения, как Kubernetes и Apache Mesos, а также альтернативные инструменты.
1. Оценка требований
Среди основных требований, представленных вами, можно выделить:
- Масштабируемость: возможность добавления или удаления узлов для каждого микросервиса.
- Распределение задач: распределение заданий между узлами с актуализацией статуса выполнения.
- Обработка ошибок: механизмы возврата в случае неудачного выполнения задач и обеспечение отказоустойчивости.
- Планирование задач: возможность создания задач по расписанию с учетом зависимости между итерациями.
2. Рассмотрение инструментов
Kubernetes
Kubernetes является одним из самых популярных решений для контейнеризации и управления микросервисами. Его преимущества включают:
- Масштабируемость: Kubernetes позволяет автоматически добавлять или удалять узлы, что отлично подходит для динамически изменяющихся нагрузок.
- Управление состоянием: обеспечивается автоматическое перезапуск задач на новом узле в случае сбоя.
- Интеграция с другими инструментами: рядом дополнительных инструментов (например, Helm для управления пакетами) можно легко реализовать функционал планирования и распределения задач. Для планирования задач к Kubernetes можно использовать такие решения, как CronJobs и внешние планировщики.
Apache Mesos
Apache Mesos также предоставляет надежные функции для управления кластером:
- Гибкость: поддерживает множество фреймворков для управления ресурсами и запуском контейнеров.
- Chronos: хороший инструмент для планирования, но, как вы отметили, он ограничен лишь запуском задач. Для более комплексного решения можно рассмотреть использование Marathon вместе с Chronos или интеграцию с Spring Batch для управления зависимостями и состоянием задач.
Другие решения
Некоторые другие open-source решения, которые стоит рассмотреть:
- Nomad от HashiCorp: простой в использовании планировщик заданий, который может быть полезен в малых и средних кластерах.
- Argo Workflows для Kubernetes: подходящее решение для управления заданиями и выполнением сложных последовательностей.
3. Экосистема облачных провайдеров
В зависимости от выбранного облачного провайдера (AWS, GCP, Azure), могут быть встроенные возможности для развертывания и управления кластерами. Например:
- AWS предлагает EKS (Elastic Kubernetes Service), с легкостью обеспечивающий запуск и управление кластерами Kubernetes.
- GCP предоставляет готовый к использованию сервис GKE (Google Kubernetes Engine), который также позволяет без дополнительной оплаты использовать небольшие кластеры.
- Azure предлагает интеграцию с Kubernetes и другие полезные инструменты для управления контейнерами.
4. Рекомендация
Для вашего проекта я рекомендую начать с Kubernetes, учитывая его широкие возможности и поддержку со стороны облачных провайдеров. Он действительно универсален и способен адаптироваться к вашим требованиям. Вместе с помощью дополнительных инструментов (например, Argo Workflows для управления задачами и Spring Batch для обработки зависимостей) вы можете создать мощное решение для управления микросервисами.
Заключение
Выбор подходящего инструмента для управления кластерами и планирования задач является критически важным для успешного развертывания микросервисов. Убедитесь, что ваше решение учитывает потребности в масштабируемости, отказоустойчивости и интеграции с инструментами планирования. Наличие облачной платформы, как GCP, AWS или Azure, также должно повлиять на ваш выбор на основании их встроенных возможностей.