В этой статье в основном представлена платформа распределенного планирования задач XXL-JOB (версия v2.1.0), включая функциональные характеристики, принципы реализации, преимущества и недостатки, сравнение аналогичных платформ и т. д.
основное введение
При разработке проекта распределенное планирование задач часто требуется в следующих сценариях:
- Когда задачи нескольких экземпляров одной и той же службы являются взаимоисключающими, требуется унифицированная координация.
- Выполнение запланированных задач должно поддерживать высокую доступность, мониторинг работы и обслуживания, а также аварийную сигнализацию.
- Необходимо единообразно управлять и отслеживать работу запланированных задач каждого сервисного узла, а также информацию об атрибутах задачи, такую как служба, к которой относится задача, и ответственное лицо.
Таким образом, XXL-JOB появился на свет: XXL-JOB — это облегченная распределенная платформа планирования задач с открытым исходным кодом. Ее основными целями проектирования являются быстрая разработка, простота обучения, легкий вес, простое расширение и готовое использование. «XXL» — главный автор, а общественность комментарийСюй Сюэлиинициалы
С момента своего открытого исходного кода в 2015 году он был подключен к линейкам онлайн-продуктов сотен компаний, а сценарии доступа включают бизнес электронной коммерции, бизнес O2O и операции с большими данными и т. д.
Функции
Основные особенности заключаются в следующем:
-
Простой и гибкийПредоставлять веб-страницы для управления задачами, а система управления поддерживает управление пользователями и контроль полномочий; Поддержка развертывания контейнеров; Поддержка кросс-платформенного планирования задач через общий HTTP;
-
Богатые функции управления задачамиПоддержка операций CRUD от страницы к задаче; Поддерживайте задачи сценария, задачи командной строки, задачи кода Java и выполняйте их на странице; Поддерживает каскадное планирование задач и запускает выполнение подзадач после завершения выполнения родительской задачи; Поддержка установки приоритета задачи; Поддержка настройки стратегии маршрутизации указанного узла выполнения задачи, включая опрос, случайный выбор, широковещательную рассылку, аварийное переключение, занятую передачу и т. д.; Поддержка режима Cron, зависимости задач, режима интерфейса API центра планирования для запуска выполнения задач.
-
высокая производительностьЦентр планирования инициирует планирование задач на основе многопоточности в пуле потоков, а быстрые и медленные задачи изолируются и планируются на основе пула потоков, обеспечивая производительность и стабильность системы; Процесс планирования задач разработан и реализован полностью асинхронно, например, асинхронное планирование, асинхронная операция, асинхронный обратный вызов и т. д., что может эффективно снизить пики трафика для интенсивного планирования;
-
Высокая доступностьЦентр планирования задач и узлы выполнения задач развернуты в кластерах, поддерживающих динамическое расширение и аварийное переключение. Поддержка стратегии аварийного переключения маршрутизации конфигурации задач, если узел-исполнитель недоступен, он автоматически передается на другие узлы для выполнения. Поддержка контроля тайм-аута задачи, конфигурация повторных попыток при сбое Поддержка стратегии блокировки обработки задач: планирование стратегии обработки, которая слишком поздно для выполнения задачи, когда узел выполнения задачи занят, включая: стратегию сериализации, отказа и стратегии покрытия.
-
Простота контроля за работой и обслуживаниемПоддержка настройки оповещения по электронной почте о сбое задачи, зарезервированный интерфейс для поддержки SMS, оповещения DingTalk; Поддержка просмотра в режиме реального времени статистических диаграмм данных операций выполнения задач, данных мониторинга хода выполнения задач и полных журналов выполнения задач;
Системный дизайн
1 Идеи дизайна
Поведение планирования абстрагируется на общедоступную платформу «диспетчерского центра», а сама платформа не выполняет бизнес-логику».диспетчерский центр«отвечает за инициирование запросов на планирование; Задача абстрагируется в распределенные обработчики заданий, которыми управляет «исполнитель», «Актуатор«Отвечает за получение запросов на планирование и выполнение бизнес-логики в соответствующем JobHandler; Следовательно, две части «планирование» и «задача» могут быть отделены друг от друга для повышения общей стабильности и масштабируемости системы;
2 Состав системы
-
Модуль планирования (Центр планирования): отвечает за управление информацией о расписании, выдачу запросов на планирование в соответствии с конфигурацией планирования и не несет ответственности за бизнес-коды. Система планирования отделена от задач, что повышает доступность и стабильность системы, а производительность системы планирования больше не ограничивается модулем задач; поддерживает визуальное, простое и динамическое управление информацией планирования, включая создание, обновление, удаление задач. , оповещение о задаче и т. д. Все вышеперечисленные операции будут выполняться в режиме реального времени, поддерживать мониторинг результатов планирования и журналов выполнения, а также поддерживать отказоустойчивость исполнителя.
-
Исполнительный модуль (привод): отвечает за получение запросов на планирование и выполнение логики задачи. Модуль задач фокусируется на таких операциях, как выполнение задач, упрощая и повышая эффективность разработки и обслуживания, получая запросы на выполнение, запросы на завершение и запросы на регистрацию из «центра планирования».
3 Как это работает
- Исполнитель задачи автоматически регистрируется в диспетчерском центре по адресу настроенного диспетчерского центра
- При достижении условия срабатывания задачи диспетчерский центр выдает задачу
- Исполнитель выполняет задачу на основе пула потоков, помещает результат выполнения в очередь памяти и записывает журнал выполнения в файл журнала.
- Поток обратного вызова исполнителя потребляет результат выполнения в очереди памяти и активно сообщает об этом в диспетчерский центр.
- Когда пользователь просматривает журнал задач в диспетчерском центре, диспетчерский центр запрашивает исполнителя задачи, а исполнитель задачи читает файл журнала задачи и возвращает сведения журнала.
4 га дизайн
4.1 Высокая доступность диспетчерского центра
Центр планирования поддерживает многоузловое развертывание на основе блокировки строк базы данных, чтобы гарантировать, что только один узел центра планирования инициирует планирование задач одновременно, см. com.xxl.job.admin.core.thread.JobScheduleHelper#start.
Connection conn = XxlJobAdminConfig.getAdminConfig().getDataSource().getConnection();
connAutoCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
preparedStatement = conn.prepareStatement( "select * from xxl_job_lock where lock_name = 'schedule_lock' for update" );
preparedStatement.execute();
# 触发任务调度
# 事务提交
conn.commit();
4.2 Высокая доступность планирования задач
-
стратегия маршрутизации Центр планирования выбирает узел-исполнитель для выполнения задач на основе стратегии маршрутизации.XXL-JOB предоставляет следующие стратегии маршрутизации для обеспечения высокой доступности планирования задач:Занятая трансферная стратегия: Отправьте запрос пульса rpc на узел-исполнитель, чтобы проверить, занят ли он перед отправкой задачи. .route.strategy.ExecutorRouteBusyover)стратегия отработки отказа: Перед отправкой задачи отправьте запрос пульса rpc на узел-исполнитель, чтобы проверить, находится ли он в сети. .job.admin.core.route.strategy .ExecutorRouteFailover)
-
Стратегия обработки блокировки Когда в узле-исполнителе есть несколько невыполненных задач с одинаковым идентификатором задачи, задачу необходимо выбирать на основе стратегии блокировки:Серийная стратегия: стратегия по умолчанию, задачи ставятся в очередь,Отменить старую политику миссии,удалить новую политику задач(Ссылка: com.xxl.job.core.biz.impl.ExecutorBizImpl#run)
Сравнение похожих фреймворков
характеристика | quartz | elastic-job-lite | xxl-job | LTS |
---|---|---|---|---|
полагаться | MySQL, JDK | JDK, смотритель зоопарка | майскл, дкк | jdk, смотритель зоопарка, maven |
Высокая доступность | Многоузловое развертывание путем конкуренции за блокировки базы данных, чтобы гарантировать, что только один узел выполняет задачу. | Благодаря регистрации и обнаружению zookeeper серверы могут добавляться динамически. | На основе конкурирующих блокировок базы данных только один узел может выполнять задачи и поддерживать горизонтальное расширение. Вы можете вручную добавлять запланированные задачи, запускать и приостанавливать задачи, а также отслеживать | Развертывание кластера, вы можете динамически добавлять серверы. Вы можете вручную добавлять запланированные задачи, запускать и приостанавливать задачи. мониторинг |
разделение задач | × | √ | √ | √ |
интерфейс управления | × | √ | √ | √ |
Степень сложности | Простой | Простой | Простой | немного сложно |
Расширенные возможности | - | Эластичное расширение, несколько режимов работы, аварийное переключение, сбор текущего состояния, многопоточная обработка данных, идемпотентность, отказоустойчивая обработка, поддержка пространства имен Spring | Расширение эластичной емкости, широковещательная рассылка сегментов, аварийное переключение, скользящий журнал в реальном времени, GLUE (поддержка онлайн-редактирования кода, без релизов), мониторинг выполнения задач, зависимость задач, шифрование данных, оповещение по электронной почте, текущий отчет, интернационализация | Поддержка весны, весенней загрузки, бизнес-логгера, поддержки расширения SPI, отработки отказа, мониторинга узлов, поддержки диверсифицированных результатов выполнения задач, отказоустойчивости FailStore, динамического расширения. |
обновление новой версии | Нет обновлений уже пол года | 2 года без обновления | Недавно обновленный | 1 год без обновления |
использовать
Начать быстро
Как быстро начать работу, официальная документация:www.xuxueli.com/xxl-job/Он был представлен подробно и ясно, поэтому я не буду повторяться.
Меры предосторожности
- 1 Проблема с синхронизацией часовЦентру планирования и исполнителю задач требуется синхронизация времени, а ошибка времени синхронизации должна быть в пределах 3 минут, иначе будет выдано исключение. Ссылка: com.xxl.rpc.remoting.provider.XxlRpcProviderFactory#invokeService
if (System.currentTimeMillis() - xxlRpcRequest.getCreateMillisTime() > 3*60*1000) {
xxlRpcResponse.setErrorMsg("The timestamp difference between admin and executor exceeds the limit.");
return xxlRpcResponse;
}
-
2 Проблемы с часовым поясомЗадача запускается центром планирования.Когда она запускается в соответствии с выражением cron задачи, установленной в центре планирования, вам необходимо обратить внимание на часовой пояс, в котором находится машина, на которой развернут центр планирования, и настроить cron выражение в зависимости от часового пояса.
-
3 Время простоя сервиса во время выполнения задачиПосле того, как диспетчерский центр завершит назначение задачи, если исполнитель находится в процессе выполнения задачи, если служба исполнителя внезапно выйдет из строя, это вызовет проблему выполнения задачи во время выполнения диспетчерского центра, и диспетчерский центр не будет инициировать неудачная повторная попытка. Даже если для задачи установлен тайм-аут, исполнитель не работает и задача не выполняется в течение длительного времени.Интерфейс центра планирования не увидит тайм-аут задачи, потому что тайм-аут задачи определяется исполнителем и сообщается планировщику. центр.
Поэтому, если задача давно не выполнялась, можно обратить внимание, не отключается ли внезапно служба исполнителя.
-
4 Проблема корректного завершения работыИсполнитель выполняет задачи асинхронно на основе пула потоков.При перезапуске нужно обратить внимание на проблему невыполненных задач в пуле потоков.Если вам нужно изящно остановиться, вы можете изящно остановиться напрямую на основе XxlJobExecutor.destroy(). Обратите внимание, что этот метод находится в версии 2.0.2. В предыдущей версии были ошибки, которые делали невозможным корректную остановку, и только версия 2.0.2 и более поздние версии были исправлены (см.:GitHub.com/Сюэли Сюй/Спасибо...)
-
5 Проблема с неудачной повторной попыткойКогда некоторые службы узла-исполнителя недоступны, например, диск узла поврежден, но диспетчерский центр все еще находится в сети, диспетчерский центр может по-прежнему направлять на узел, который не находится в автономном режиме, на основе политики маршрутизации (включая политика аварийного переключения) и продолжают повторять попытки, постоянно терпят неудачу, что приводит к исчерпанию повторных попыток. Поэтому старайтесь не использовать фиксированные стратегии для стратегий маршрутизации, таких как исправление первого и исправление последнего.
Суммировать
XXL-JOB относительно прост для начала работы, а исходный код проекта по-прежнему относительно чист и легко читается.После обучения вы сможете глубже понять структуру распределенной системы, сетевое взаимодействие, многопоточную совместную обработку и другие знания. , рекомендуется к прочтению