кварцевый кластер что такое
Русские Блоги
Принцип работы и конфигурация кварцевого кластера
1. Основной принцип планирования задач Quartz
(1) Мощные функции планирования, такие как поддержка различных методов планирования, могут удовлетворить различные обычные и особые потребности;
(2) гибкие прикладные методы, такие как поддержка нескольких комбинаций задач и планирования, а также поддержка нескольких методов хранения данных планирования;
(3) Распределенные и кластерные возможности, Terracotta сделала дальнейшие улучшения на основе оригинальных функций после приобретения. Эта статья дополнит эту часть.
1.1 Кварцевые элементы сердечника
TriggerЭто элемент, используемый для определения времени планирования, то есть, согласно какому правилу времени выполнять задачи. Кварц в основном предоставляет три типа триггеров: SimpleTrigger, CronTirgger, DateIntervalTrigger и NthIncludedDayTrigger. Эти четыре триггера могут удовлетворить большинство потребностей корпоративных приложений.
JobИспользуется для представления запланированных задач. Существует два основных типа рабочих мест: лица без гражданства и с состоянием. Для того же триггера задания с сохранением состояния не могут выполняться параллельно.Только после запуска задачи, которая была запущена в прошлый раз Задание имеет два основных атрибута: волатильность и долговечность, где волатильность указывает, сохраняется ли задача в хранилище базы данных, а долговечность указывает, сохраняется ли задача, когда нет связи триггера. И то и другое, когда значение истинно, когда задача сохраняется или сохраняется. Задание может быть связано с несколькими триггерами, но триггер может быть связан только с заданием.
SchedulerСоздано фабрикой планировщика: DirectSchedulerFactory или StdSchedulerFactory. Второй тип фабрики StdSchedulerFactory используется чаще, потому что DirectSchedulerFactory не удобен в использовании, и для него необходимо сделать много подробных настроек ручного кодирования. Существует три основных типа планировщика: RemoteMBeanScheduler, RemoteScheduler и StdScheduler.
Взаимосвязь между кварцевыми основными элементами показана на рисунке 1.1:
Рисунок 1.1 Диаграмма отношений основных элементов
1.2 Кварцевая нить
В Quartz существует два типа потоков: потоки планировщика и потоки выполнения задач, где потоки выполнения задач обычно используют пул потоков для поддержки группы потоков.
Рисунок 1.2 Вид кварцевой нити
Планировщик имеет два основных потока планирования: поток, который выполняет регулярное планирование, и поток, который выполняет пропущенный триггер. Традиционный поток планирования опрашивает все сохраненные триггеры.Если есть триггер, который должен быть запущен, то есть достигается время для следующего триггера, свободный поток получается из пула потоков выполнения задачи и выполняется задача, связанная с триггером. Поток пропуска зажигания сканирует все триггеры, чтобы увидеть, есть ли пропущенные триггеры, и если это так, они обрабатываются отдельно в соответствии со стратегией пропуска зажигания (fire now OR wait for the next fire)。
1.3 Хранение данных кварцевых заданий
Кварцевые триггеры и задания должны быть сохранены перед использованием. В Quartz есть два метода хранения: RAMJobStore, JobStoreSupport, где RAMJobStore предназначен для хранения триггера и задания в памяти, а JobStoreSupport основан на jdbc для хранения триггера и задания в базе данных. Скорость доступа к RAMJobStore очень высокая, но поскольку его данные будут потеряны после остановки системы, поэтому в приложении кластера необходимо использовать JobStoreSupport.
2. Кварцевый кластерный принцип
2.1 Кварцевая кластерная архитектура
Каждый узел в кластере Quartz является независимым приложением Quartz, которое управляет другими узлами. Это означает, что вы должны запускать или останавливать каждый узел отдельно. В кластере Quartz независимый узел Quartz не связывается с другим узлом или узлом управления, но воспринимает другое приложение Quartz через ту же таблицу базы данных, как показано на рисунке 2.1.
Рисунок 2.1. Кварцевая кластерная архитектура
2.2 Таблицы базы данных кварцевых кластеров
Поскольку кластер Quartz зависит от базы данных, сначала необходимо создать таблицы базы данных Quartz.Пакет выпуска Quartz включает в себя сценарии SQL для всех поддерживаемых платформ баз данных. Эти сценарии SQL хранятся в каталоге / docs / dbTables. Используемая здесь версия Quartz 1.8.4 имеет в общей сложности 12 таблиц. Количество таблиц может отличаться в разных версиях. База данных mysql, используйте tables_mysql.sql для создания таблиц базы данных. Все таблицы показаны на рисунке 2.2, а краткое введение в эти таблицы показано на рисунке 2.3.
Рисунок 2.2 Таблица Quartz 1.8.4, сгенерированная в базе данных mysql
Рисунок 2.3. Введение в Quartz Data Sheet
2.2.1 Таблица состояний планировщика (QRTZ_SCHEDULER_STATE)
Описание:Информация об экземпляре узла в кластере. Кварц периодически считывает информацию в этой таблице, чтобы определить текущее состояние каждого экземпляра в кластере.
instance_name:Имя, настроенное в org.quartz.scheduler.instanceId в файле конфигурации. Если установлено значение AUTO, кварц сгенерирует имя на основе имени физической машины и текущего времени.
last_checkin_time:Время последней регистрации
checkin_interval:Интервал регистрации
2.2.2 Таблица ассоциации триггеров и задач (qrtz_fired_triggers)
Хранит информацию о состоянии, относящуюся к сработавшему триггеру, и информацию о выполнении соответствующего задания.
2.2.3 Таблица информации о триггере (qrtz_triggers)
trigger_name:Название триггера, имя может быть настроено пользователем, без каких-либо обязательных требований
trigger_group:Имя группы, к которой принадлежит триггер
job_name:Внешний ключ для имени_проекта таблицы qrtz_job_details
job_group:Внешний ключ таблицы Qrtz_job_details для job_group
trigger_state:Текущее состояние триггера установлено в ACQUIRED, если установлено в WAITING, задание не будет запускаться
trigger_cron:Тип триггера, используйте выражение cron
2.2.4 Таблица сведений о задании (qrtz_job_details)
Описание:Сохраните детали работы, эта таблица требует инициализации пользователя в соответствии с реальной ситуацией.
job_name:Имя задания в кластере, имя может быть настроено пользователем без каких-либо обязательных требований.
job_group:Имя группы, к которой принадлежит задание в кластере. Пользователь может настроить это имя по своему усмотрению, и нет никаких обязательных требований.
job_class_name:Полное имя пакета класса реализации задания в кластере. Кварц находит класс задания согласно этому пути к пути к классу.
is_durable:Чтобы сохранить, установите этот атрибут на 1, кварц сохранит работу в базе данных
job_data:Поле BLOB-объектов, в котором хранятся постоянные объекты заданий.
2.2.5 Таблица информации о полномочиях (qrtz_locks)
Описание: в tables_oracle.sql есть соответствующая инициализация dml, как показано на рисунке 2.4.
Рисунок 2.4 Информация об инициализации в таблице информации о разрешениях Quartz
2.3 Процесс запуска Quartz Scheduler в кластере
2.4 Обнаружение неисправных узлов планировщика
Когда экземпляр планировщика выполняет регистрацию, он проверяет, есть ли другие экземпляры планировщика, которые не были зарегистрированы, когда они прибывают в ожидаемое время. Это определяется путем проверки того, является ли значение записи планировщика в столбце LAST_CHEDK_TIME в таблице SCHEDULER_STATE более ранним, чем org.quartz.jobStore.clusterCheckinInterval. Если один или несколько узлов не зарегистрировались к запланированному времени, работающий планировщик предполагает, что произошел сбой.
2.5 Восстановление задания из сбойного экземпляра
3. Кварцевый экземпляр (Кварц + Весна)
3.1 Spring не совместим с кварцем
Spring больше не поддерживает Quartz с 2.0.2. В частности, когда Quartz + Spring создает экземпляр Quartz Task в базе данных, он выдаст: Сериализуемая ошибка:
Метод MethodInvoking класса MethodInvokingJobDetailFactoryBean не поддерживает сериализацию, поэтому при сериализации QUARTZ TASK в базу данных вы получите ошибку.
Сначала решите проблему с MethodInvokingJobDetailFactoryBean. Не изменяя исходный код Spring, вы можете избежать использования этого класса и напрямую вызывать JobDetail. Но используя реализацию JobDetail, вам нужно реализовать логику MothodInvoking самостоятельно. Вы можете использовать свойства JobClass и JobDataAsMap JobDetail, чтобы настроить Factory (Manager) для достижения той же цели. Например, новый MyDetailQuartzJobBean был создан в этом примере для реализации этой функции.
3.2 MyDetailQuartzJobBean.java file
3.3 Реальный класс реализации Job
В классе Test он просто реализует функцию печати текущего времени системы.
3.4 Настройте файл quartz.xml
3.5 Тест
Код и конфигурация ServerA и ServerB одинаковы. Сначала запустите ServerA, а затем ServerB. Когда сервер выключен, ServerB обнаружит его отключение и примет на себя работу, выполняемую на ServerA, чтобы продолжить выполнение.
4. Кварцевый кластер (отдельный Кварц)
Хотя мы реализовали конфигурацию кластера Spring + Quartz, не рекомендуется использовать этот метод из-за проблемы совместимости между Spring и Quartz. В этом разделе мы реализовали кластер, настроенный только на основе Quartz, который является простым и стабильным по сравнению с подходом Spring + Quartz.
4.1 Инженерная структура
Для реализации функции кластера мы используем только Quartz, структура кода и необходимые сторонние jar-пакеты показаны на рисунке 3.1. Среди них версия Mysql: 5.1.52, версия драйвера Mysql: mysql-connector-java-5.1.5-bin.jar (для 5.1.52 рекомендуется использовать этот драйвер версии, поскольку в Quartz имеется ошибка, которая делает его совместимым с некоторыми драйверами Mysql Не работает должным образом в сочетании).
Рисунок 4.1 Структура проекта кварцевого кластера и необходимые сторонние jar-пакеты
4.2 Файл конфигурации quartz.properties
Имя файла по умолчанию quartz.properties, активируйте функцию кластера, установив для свойства «org.quartz.jobStore.isClustered» значение «true». Каждый экземпляр в кластере должен иметь уникальный «идентификатор экземпляра» (атрибут «org.quartz.scheduler.instanceId»), но он должен иметь то же «имя экземпляра планировщика» («org.quartz.scheduler.instanceName»). ), что означает, что каждый экземпляр в кластере должен использовать один и тот же файл конфигурации quartz.properties. За исключением следующего, содержимое файла конфигурации должно быть одинаковым:
Размер пула потоков.
B. Различное значение атрибута «org.quartz.scheduler.instanceId» (просто установлено «AUTO»).
4.3 ClusterExample.java file
4.4 SimpleRecoveryJob.java
4.5 Результат операции
Конфигурация и код на сервере A и сервере B абсолютно одинаковы. Метод выполнения: Запустите ClusterExample.java на любом хосте, добавьте задачу в расписание и просмотрите результат выполнения:
Запустите ServerA, результат показан на рисунке 4.2.
Рисунок 4.2 ServerA результаты выполнения 1
После запуска ServerB выходные данные ServerA и ServerB показаны на рисунках 4.3 и 4.4.
Рисунок 4.3 Результаты работы сервера A 2
Рисунок 4.4 Результаты работы ServerB 1
Как видно из рисунков 4.3 и 4.4, после включения ServerB система автоматически определяет ответственный баланс, а ServerB принимает на себя Job1. После выключения ServerA результат работы ServerB показан на рисунке 4.5.
Рисунок 4.5 Результаты работы ServerB 2
Как видно из рисунка 4.5, ServerB может обнаружить потерю ServerA, взять на себя задачу Job2, за которую он отвечает, и повторно выполнить Job2, которую необходимо выполнить в течение этого ненормального времени, от потери ServerA до обнаружения Server.
5. Вопросы, требующие внимания
5.1 Проблемы с синхронизацией времени
Кварцу на самом деле все равно, запускаете ли вы узлы на одной или разных машинах. Когда кластер размещен на разных машинах, он называется горизонтальным кластером. Когда узел работает на том же компьютере, он называется вертикальным кластером. Для вертикальных кластеров существует единственная точка отказа. Это неприемлемо для приложений высокой доступности, потому что после сбоя компьютера все узлы завершаются. Для горизонтальных кластеров существует проблема синхронизации времени.
5.2. Конкурсные работы на соревнованиях узлов
Поскольку Quartz использует алгоритм случайной балансировки нагрузки, задание выполняется различными экземплярами случайным образом. Официальный сайт Quartz отметил, что в настоящее время нет способа назначить (закрепить) задание конкретному узлу в кластере.
5.3 Проблема получения списка заданий из кластера
В настоящее время, если вы не обращаетесь к базе данных напрямую, нет простого способа получить список всех выполняемых в кластере заданий. Запрос экземпляра планировщика только получит список заданий, запущенных на этом экземпляре. Официальный веб-сайт Quartz предполагает, что вы можете получить всю информацию о работе из соответствующей таблицы, написав код JDBC для доступа к базе данных.
Русские Блоги
Кварцевый кластер принцип и приложение конфигурации
1, основной принцип реализации кварцевого планирования задач
(1) мощная функция планирования, такая как поддержка богатых и разнообразных методов планирования, может удовлетворить различные обычные и особые потребности;
(2) Гибкое приложение, такое как множество комбинаций задач и планирования, поддерживая несколько методов хранения данных для планирования данных;
(3) Распределенные и кластерные возможности, терракота была дополнительно расширена на основе оригинальной функции. Эта статья будет изложена здесь.
1.1 кварцевые элементы ядра
TriggerЭто элемент, используемый для определения запланированного времени, то есть, когда выполняется какие-либо правила времени. Кварц в основном обеспечивает четыре типа триггера: Simpletreger, Crontirgger, DateIntervartrigger и nthincludeddaytrigger. Эти четыре триггеры могут удовлетворить большую часть потребностей предпринимательских приложений.
JobИспользуется для представления запланированной задачи. Есть два основных типа работы: без гражданства и государства. Для того же триггера состояния не может быть выполнена параллельно. После выполнения последней запускаемой задачи можно выполнить следующее исполнение. Работа в основном имеет два свойства: волатильность и долговечность, где волатильность указывает, сохраняется ли задача в хранилище базы данных, а долговечность указывает, сохраняется ли задача, когда нет ассоциации Trigger. Оба задача сохраняются или сохраняются, когда значение верно. Работа может быть связана с нескольким триггером, но триггер может связываться только на работу.
SchedulerСозданный на заводе планировщика: DirectsChedulerFactory или STDSCheDulerFactory. Второе растение STDSCHEDULERFATORY является все больше, потому что DirectsChedulerFactory недостаточно удобно, чтобы сделать много подробных настроек ручного кодирования. Планировщик имеет три основных типа: RemoteMeansCheduler, Remotescheduler и STDSCHeduler.
Отношения между элементами кварцевых сердечников показаны на рисунке 1.1:
Рисунок 1.1 Диаграмма основных элементов
1,2 кварцевой резьбы
В кварце есть два типа нитей, планирования планировщиков и задач выполняют потоки, где потоки выполнения задач обычно используют пул резьбы для поддержания набора потоков.
Рисунок 1.2 Вид кварцевого потока
Ниты планирования планировщиков имеют два: выполняющие регулярные запланированные потоки и выполняет потоки MisfiredGrigger. Регулярный запланированный опрос потока всех триггер, если есть триггер, который срабатывает, то есть следующий триггер достигнут, затем получает простую нить из пула резьбы выполнения задач, выполняет задачу, связанную с триггером. The DiveSfire Direct состоит в том, чтобы отсканировать весь триггер, проверять, есть ли неправильный процесс, если таковые имеются, в соответствии с политикой Misfire,fire now OR wait for the next fire)。
1.3 Кварцевые данные для хранения данных
Надгрок и задание в кварце должны быть сохранены до того, как они могут быть использованы. В квартаре есть два хранимых метода: Ramjobstore, Jobstoresuport, где Ramjobstore хранится в памяти, в то время как JDBC для хранения JDBC будет хранить триггер и работу в базу данных. Ramjobstore очень быстро, но поскольку все данные теряются после того, как система будет остановлена, JobStouseUsport должен использоваться в приложении кластера.
2, принцип кварцевого кластера
2.1 кварцевая кластерная архитектура
Рисунок 2.2 Кварцевая кластерная архитектура
2.2 Квальцевый кластер, связанный с таблицей базы данных
Поскольку кварцевый кластер полагается на базу данных, вы должны сначала создать таблицу базы данных кварцевых баз данных, а пакет выпуска кварца включает в себя все сценарии SQL всех поддерживаемых платформ базы данных. Эти сценарии SQL хранятся в каталоге / Docs / Docs / docs. Кварцевый 1.8.4, в общей сложности 12 таблиц, разные версии и количество таблиц могут быть разными. База данных mysql, и таблица базы данных создана с таблицами_mysql.sql. Все таблицы показаны на рисунке 2.2, как показано на рисунке 2.3.
Рисунок 2.2 Кварцевый 1.8.4 Сгенерирован в базе данных MySQL
Рисунок 2.3 Введение кварцевых данных
2.2.1 Таблица состояния планировщика (qrtz_scheduler_state)
Описание:Информация об экземпляре узла в кластере кварцевое время считывает информацию таблицы для определения текущего состояния каждого экземпляра в кластере.
instance_name:Имя org.quartz.scheduler.instanceId в файле конфигурации, если установлено значение AUTO, кварцем генерирует имя в соответствии с физическим именем и текущим временем.
last_checkin_time:Последняя регистрация заезда
checkin_interval:Интервал введения
2.2.2 Таблица ассоциации триггера и задач (QRTZ_FIRED_TRIGERS)
Информация о состоянии хранения, связанная с запущенным триггером, а также с информацией о выполнении соответствующей работы.
2.2.3 Информационная таблица триггера (QRTZ_TRIGERS)
trigger_name:Имя триггера, имя пользователя может настроить, без принудительного спроса
trigger_group:Имя группы триггера, имя пользователя свободно настроить, без принудительного спроса
job_name:QRTZ_JOB_DETAILS Таблица Job_Name внешний ключ
job_group:Qrtz_job_details Таблица внешнего ключа job_group
trigger_state:Состояние текущего триггера установлено для приобретения, если установлено в ожидании, задание не запускает
trigger_cron:Тип триггера, используйте выражения CRON
2.2.4 Таблица данных задач (QRTZ_JOB_DETAILS)
Описание:Сохранить детали работы, таблица должна инициализировать в соответствии с фактической ситуацией
job_name:Название работы в кластере, имя пользователя может настроить, без принудительного спроса.
job_group:Название группы работы в кластере, имя пользователя свободно настраивается, без принудительного спроса.
job_class_name:Полное имя пакета класса реализации задания в кластере, кварц основана на этом пути к классу, чтобы найти класс работы.
is_durable:Будь то сохраняется, установите это свойство на 1, кварц будет работать в базу данных
job_data:Поле BLOB хранит постоянный объект работы.
2.2.5 Информационная таблица разрешений (qrtz_locks)
Примечание. Существует соответствующая DML инициализация в таблицах_Oracle.SQL, как показано на рисунке 2.4.
Рисунок 2. Информация инициализации в таблице информации о разрешении в кварце
2.3 Процесс запуска кварцевого планировщика в кластере
2.4 Обнаружение отказа узла планировщика
Когда экземпляр планировщика проверяется, он увидит, есть ли другие экземпляры планировщиков, которые не были проверены в ожидаемое время. Это определяется путем проверки того, записывается ли планировщик в столбце Last_Chedk_Time, определяется ранее, чем org.quartz.jobstore.clusterCheckInterval. Если один или несколько узлов не были проверены в заранее определенном времени, то планировщик предполагается, что он (мы) не удался.
2.5 Восстановление задания из экземпляра неисправности
Когда экземпляр Sheduler не удается при выполнении задания, можно получить эту работу повторно запускаться другим нормальным экземпляром графика. Чтобы реализовать это поведение, атрибут восстановления задания, сконфигурированный к объекту JobDetail, должен быть установлен на true (Job.setrequestsRecovery (True). Если восстановленное свойство установлено значение false (по умолчанию на false), когда планировщик не выполняет задание, он не будет работать снова; он запускается другим экземпляром планировщика в следующем времени запуска. После того, как экземпляр планировщика не удается, его можно обнаружить, обнаруживая интервал регистрации каждого планировщика (т.е. org.quartz.jobstore.clusterCheckInterval в 2.3).
3, пример кластера кварца (кварц + пружина)
3.1 Весна не совместима с помощью кварцевой проблемы
Весна больше не будет поддерживать кварц от 2.0.2. Конкретная производительность Когда кварц + пружины информирует задачу кварца в базу данных, она генерирует: сериализационная ошибка:
Методиновой метод в этом методинеВингингингентичном классе не поддерживается, поэтому он будет брошен при сериализации сериализации Кварца.
Сначала решите проблему с методиномVokingJobdeteailFactoryBean, везде, где вездеходный код источника не изменяется, вы можете избежать использования этого класса непосредственно для вызова JobDetail. Но используйте реализации Jobdetail, вам необходимо реализовать логику MTHODINVOXING, вы можете использовать Jobdetail, и свойства Jobdetail и свойства JobDataSataMaS, от определения фабрики (менеджера) для достижения той же цели. Например, в этом примере создан новый mydetailquartzjobbean, созданный в этом примере для реализации этой функции.
3.2 mydetailquartzjobbean.java file.
3.3 реальная реализация работы
В тестовых классах просто просто реализуйте функциональность текущего времени системы печати.
3.4 Настройка файлов Quartz.xml
3.5 тест
Servera, Code Serverb, Code Code, настроен точно, запустите Servera, запустите ServerB, после завершения сервера, ServerB отслеживает его и снимает работу на Servera, продолжить.
4, пример кварцевого кластера (один кварц)
Хотя мы реализовали конфигурацию кластеров пружины + кварц, этот метод не рекомендуется из-за совместимости весной и кварцевым. В этом разделе мы реализовали кластер, настроенный отдельно с кварцевым, простым и стабильным относительно пружины + кварца.
4.1 Техническая структура
Мы используем один кварц, чтобы реализовать свою кластерную функцию, структуру кода и сторонние банки JAR, показанные на рисунке 3.1. Среди них, MySQL Version: 5.1.52, версия MySQL Drive: MySQL-разъем-Java-5.1.5-Bin.jar (на 5.1.52, рекомендуется использовать эту версию привода, потому что кварц существует, чтобы сделать его Езжай с некоторыми драйверами MySQL невозможно нормально работать при комбинировании).
Рисунок 4.1 Кварцевая кластерная конструкция и требуется сторонняя банка