Введение в концепцию квалифицированного использования серии Elastic Job (1)

Java

Навигация по серии:

Умение пользоваться реестром и узлами серии Elastic Job (2)

Начало работы с демонстрацией Elastic Job Series (3)

Elastic-Job — это решение для распределенного планирования, состоящее из двух независимых подпроектов: Elastic-Job-Lite и Elastic-Job-Cloud.

Elastic-Job-Lite позиционируется как легкое и децентрализованное решение, предоставляет услуги координации распределенных задач в виде jar-пакетов, внешними зависимостями являются только Zookeeper.

Адрес источника проекта==>shardingsphere-elasticjob

Требования к рабочей среде

Рамка Версия
Java JDK1.7+
Zookeeper 3.4.6+
Maven 3.0.4+

Описание структуры каталогов

elastic-job
    ├──elastic-job-lite                                 lite父模块,不应直接使用
    ├      ├──elastic-job-lite-core                     Java支持模块,可直接使用
    ├      ├──elastic-job-lite-spring                   Spring命名空间支持模块,可直接使用
    ├      ├──elastic-job-lite-lifecyle                 lite作业相关操作模块,不可直接使用
    ├      ├──elastic-job-lite-console                  lite界面模块,可直接使用
    ├──elastic-job-example                              使用示例
    ├      ├──elastic-job-example-embed-zk              供示例使用的内嵌ZK模块
    ├      ├──elastic-job-example-jobs                  作业示例
    ├      ├──elastic-job-example-lite-java             基于Java的使用示例
    ├      ├──elastic-job-example-lite-spring           基于Spring的使用示例
    ├      ├──elastic-job-example-lite-springboot       基于SpringBoot的使用示例
    ├──elastic-job-doc                                  markdown生成文档的项目,使用方无需关注
    ├      ├──elastic-job-lite-doc                      lite相关文档

Функции

  • Координация распределенного планирования заданий
  • Гибкое расширение и сжатие
  • передача устаревшей работы
  • Пропущенный перезапуск выполнения задания
  • Согласованность сегментов заданий гарантирует, что один и тот же сегмент имеет только один экземпляр выполнения в распределенной среде.
  • Самодиагностика и устранение проблем, вызванных распределенной нестабильностью
  • Поддержка параллельного планирования заданий
  • Поддержка операций жизненного цикла задания
  • Богатые типы заданий
  • Интеграция с Spring и предоставление пространства имен
  • Управление платформой эксплуатации и обслуживания
  • ......

Введение в концепцию Elastic-Job

Концепция шардинга

Для распределенного выполнения задач задачу необходимо разделить на несколько независимых элементов задачи, а затем распределенный сервер выполняет один или несколько фрагментированных элементов соответственно.

Например: есть задание, которое проходит через таблицу в базе данных, и есть 2 сервера. Для быстрого выполнения задания каждый сервер должен выполнять 50% задания. Чтобы выполнить это требование, задание можно разделить на 2 слайса, и каждый сервер выполняет 1 слайс. Логика обхода данных задания должна быть следующей: сервер А просматривает данные, идентификатор которых заканчивается нечетным числом, сервер Б просматривает данные, идентификатор которых заканчивается четным числом. Если он разделен на 10 слайсов, логика задания по обходу данных должна быть следующей: элемент слайса, назначенный каждому слайсу, должен иметь ID%10, а серверу А назначаются элементы слайса 0, 1, 2, 3, 4; сервер B назначается Assigned to shard items 5, 6, 7, 8, 9, прямым результатом является то, что сервер A просматривает данные, идентификатор которых заканчивается на 0-4, а сервер B просматривает данные, идентификатор которых заканчивается на 5-9.

Отделение сегментных элементов от бизнес-процессов

Elastic-Job не предоставляет функции обработки данных напрямую, фреймворк только выделяет элементы шардов каждому работающему серверу заданий, поэтому разработчикам необходимо самостоятельно обрабатывать соответствие между элементами шардов и реальными данными.

Применимые сценарии персонализированных параметров

Персонализированный параметр — shardingItemParameter, который может соответствовать соответствующей связи с элементом сегментирования и используется для преобразования номера элемента сегментирования в более читаемый бизнес-код.

Например: разделить базу данных по региональному уровню, база данных A — это данные Пекина, база данных B — данные Шанхая, база данных C — данные Гуанчжоу. Если конфигурация основана только на элементах сегментов, разработчикам необходимо знать, что 0 означает Пекин, 1 — Шанхай, 2 — Гуанчжоу. Разумное использование персонализированных параметров может сделать код более читабельным.Если конфигурация 0=Пекин, 1=Шанхай, 2=Гуанчжоу, то значения перечисления Пекина, Шанхая и Гуанчжоу можно использовать непосредственно в коде для полной фрагментации элементы и бизнес-логика, соответствующие отношения.

Распределенное планирование

Elastic-Job-Lite не имеет узла центра планирования заданий, но программы, основанные на структуре заданий развертывания, запускают планирование по отдельности, когда достигают соответствующей временной точки.

Реестр используется только для регистрации заданий и хранения информации мониторинга. Основной узел задания используется только для обработки таких функций, как сегментирование и очистка.

Высокая доступность работы

Elastic-Job-Lite обеспечивает самый безопасный способ выполнения заданий. Установите общее количество сегментов равным 1 и используйте более 1 сервера для выполнения задания, задание будет выполняться как 1 ведущий и подчиненный.

Как только сервер, выполняющий задание, выйдет из строя, сервер, ожидающий выполнения, возьмет на себя управление при следующем запуске задания. Эффект от включения функции аварийного переключения лучше, и она может гарантировать, что машина резервного копирования немедленно начнет выполнение резервного копирования в случае сбоя задания во время выполнения текущего задания.

Максимально используйте ресурсы

Elastic-Job-Lite также обеспечивает наиболее гибкий способ максимизировать производительность выполнения заданий. Задайте количество элементов сегмента больше, чем количество серверов, желательно больше, чем количество серверов, кратное числу, и задание будет разумно использовать распределенные ресурсы и динамически выделять элементы сегмента.

Например: 3 сервера разделены на 10 слайсов, тогда результатом распределения элементов слайсов будет сервер A=0,1,2, сервер B=3,4,5, сервер C=6,7,8,9. В случае сбоя сервера C результаты присвоения элемента сегмента: сервер A=0,1,2,3,4, сервер B=5,6,7,8,9. Максимально используйте существующие ресурсы для повышения пропускной способности без потери элементов сегментов.

Общая схема архитектуры

Блок-схема запуска задания

Блок-схема выполнения работы