Говоря о кварце задач распределенного хронометража

задняя часть

предисловие

В последнее время в связи с необходимостью проекта компании по выбору распределенного фреймворка задач по времени, из-за ограниченности ресурсов (человеческих ресурсов, времени) в основном рассматриваются некоторые решения с открытым исходным кодом, среди которых сравниваются три фреймворка: кварц, эластичная работа, xxl -работа и т. д. Потому что elastic-job и xxl-job фактически реализованы на базе кварца. Поэтому необходимо иметь определенное представление о кварце. Поэтому я недавно прочитал много документов и блогов, связанных с кварцем, и написал несколько демонстраций для проверки. Эта статья в основном является кратким изложением недавней работы, кратким введением в кварц, структуру планирования задач с распределенным временем.

содержание

  • Что такое кварц, в чем его особенности?
  • Введение в концепции и элементы кварцевого сердечника
  • Введение в общие элементы конфигурации кварца
  • Кварцевый кластер Введение

1. Что такое кварц и каковы его характеристики?

quartz 是一个开源的分布式调度库,它基于java实现。
> 它有着强大的调度功能,支持丰富多样的调度方式,比如简单调度,基于cron表达式的调度等等。
> 支持调度任务的多种持久化方式。比如支持内存存储,数据库存储,Terracotta server 存储。
> 支持分布式和集群能力。
> 采用JDBCJobStore方式存储时,针对事务的处理方式支持全局事务(和业务服务共享同一个事务)和局部事务(quarzt 单独管理自己的事务)
> 基于plugin机制以及listener机制支持灵活的扩展。

2. Введение концепций и элементов кварцевого сердечника:

  • Работа: рабочее задание. Он предоставляет интерфейс только с одним методом void execute (контекст JobExecutionContext), разработчик реализует этот интерфейс для определения выполняемой задачи, а класс JobExecutionContext предоставляет различную информацию о контексте планирования. Информация о времени выполнения задания хранится в экземпляре JobDataMap.

  • JobDetail: экземпляр задачи задания. Quartz воссоздает экземпляр задания каждый раз, когда выполняет задание, поэтому он не принимает экземпляр задания напрямую. Вместо этого он принимает класс реализации задания, чтобы его можно было создать во время выполнения с помощью механизма отражения newInstance. ().Иов. Следовательно, необходимо использовать класс для описания класса реализации задания и другой связанной статической информации, такой как имя задания, описание, связанные прослушиватели и другая информация, и JobDetail берет на себя эту роль.

  • Триггер: триггер, используемый для описания правила триггера времени, которое запускает выполнение задания. В основном есть два подкласса SimpleTrigger и CronTrigger. Когда его нужно запустить только один раз или выполнить через фиксированный интервал времени, SimpleTrigger является наиболее подходящим выбором; в то время как CronTrigger может определять схемы планирования для различных сложных временных правил с помощью выражений Cron: например, выполнение в 9:00 каждое утро, в понедельник, Среда, пятница в 17:00 и т.д.

  • Календарь: Календарь, представляющий набор определенных моментов времени.Триггер может быть связан с несколькими календарями, чтобы исключить или включить определенные моменты времени. Предположим, мы запланировали выполнение задачи каждый понедельник в 10:00, но если есть официальный праздник, задача не будет выполняться, В это время нам нужно использовать Календарь на основе триггерного механизма для исключения фиксированной точки .

  • Планировщик: Планировщик, представляющий собой независимый запущенный контейнер Quartz. Триггер и JobDetail могут быть зарегистрированы в Планировщике. Оба имеют свою собственную группу и имя в Планировщике. Группа и имя являются основой для Планировщика, чтобы найти объект в контейнере. Триггер Группа и имя JobDetail должно быть уникальным, а группа и имя JobDetail также должны быть уникальными (но могут совпадать с группой и именем Trigger, потому что это разные типы). Scheduler определяет ряд методов интерфейса, обеспечивающих внешний доступ и управление Trigger и JobDetail в контейнере по группе и имени.

      Scheduler可以将Trigger绑定到某一JobDetail中,这样当Trigger触发时,对应的Job就被执行。一个Job可以对应多个Trigger,但一个Trigger只能对应一个Job。
    

3. Знакомство с общими элементами конфигурации кварца

Файл конфигурации кварца по умолчанию — кварц.properties, который содержит множество элементов конфигурации, таких как конфигурация, связанная с планировщиком, конфигурация транзакции, прослушиватель, конфигурация подключаемого модуля, конфигурация, связанная с rmi, конфигурация, связанная с кластером, и так далее. Для получения подробной информации о настройке обратитесь к официальной документации:woohoo.quartz-scheduler.org/document ATI…

4. Введение в кластер курац

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

Quartz по умолчанию предоставляет 11 таблиц базы данных:

  • QRTZ_CALENDARS: хранить информацию календаря Quartz

  • QRTZ_CRON_TRIGGERS: хранит триггеры Cron, включая выражения Cron и информацию о часовом поясе.

  • QRTZ_FIRED_TRIGGERS: сохраняет информацию о состоянии, относящуюся к сработавшему триггеру, и информацию о выполнении связанного задания.

  • QRTZ_PAUSED_TRIGGER_GRPS: сохраняет информацию о приостановленной группе триггеров.

  • QRTZ_SCHEDULER_STATE: хранить небольшой объем информации о состоянии планировщика и других экземпляров планировщика.

  • QRTZ_LOCKS: Сохраненная информация о пессимистической блокировке программы.

  • QRTZ_JOB_DETAILS: сохраняет сведения о каждом настроенном задании.

  • Qrtz_simple_triggers: хранит простые триггеры, включая повторения, интервал и количество касаний

  • TRIGGER QRTZ_BLOG_TRIGGERS хранится в виде типа BLOB

  • QRTZ_TRIGGERS хранит информацию о настроенных триггерах.

  • QRTZ_SIMPROP_TRIGGERS: Сохраняет связанные простые триггеры.

    要注意的是quartz集群间的相互感知是通过数据库表(QRTZ_SCHEDULER_STATE)实现的。对于水平集群,存在着时间同步问题。节点用时间戳来通知其他实例它自己的最后检入时间。假如节点的时钟被设置为将来的时间,那么运行中的Scheduler将再也意识不到那个结点已经宕掉了。另一方面,如果某个节点的时钟被设置为过去的时间,也许另一节点就会认定那个节点已宕掉并试图接过它的Job重运行。
    

резюме

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