Colección de citas famosas - Colección de poesías - Descripción general de elastic-job para tareas programadas

Descripción general de elastic-job para tareas programadas

El siguiente ejemplo cubre muy bien los tres elementos básicos más importantes de Quartz:

El ejemplo es HelloQuartz. ¿Por qué está diseñado como JobDetail + Job en lugar de usar Job directamente? Esto se debe a que las tareas pueden ejecutarse simultáneamente. Si el Programador usa Job directamente, habrá un problema de acceso simultáneo a la misma instancia de Job. En el método JobDetail & Job, cada vez que se ejecuta el programador, se creará una nueva instancia de Job basada en JobDetail, de modo que se pueda evitar el problema del acceso concurrente.

Defina la clase Job como la clase HelloQuartz, que es donde reside la verdadera lógica de ejecución.

Dangdang encapsula cuarzo sobre la base de cuarzo, y los correspondientes son

1. Cree una clase de implementación de org.quartz.Job e implemente su propia lógica empresarial.

public final class LiteJob implements Job {}

2. Defina un JobDetail y haga referencia a esta clase de implementación.

3.Programador programador.

Los siguientes ejemplos ilustran cómo utilizar Dangdang:

Establezca parámetros de fragmentación, defina la clase de configuración del trabajo, el plan de ejecución y otras configuraciones

Defina la clase de trabajo

significa una implementación simple sin ningún tipo de encapsulación. Es necesario implementar la interfaz SimpleJob. Esta interfaz solo proporciona un método único para anular y este método se ejecutará periódicamente. Es similar a la interfaz nativa de Quartz, pero proporciona funciones como expansión y contracción elástica y fragmentación.

El tipo Dataflow se utiliza para procesar flujos de datos y necesita implementar la interfaz DataflowJob. Esta interfaz proporciona dos métodos de anulación, que se utilizan para recuperar (fetchData) y procesar (processData) datos.

Trabajo de transmisión: implica dos conceptos: fragmentación y procesamiento por lotes

Es decir, en los dos métodos reescritos anteriormente

fetchData se usa para buscar, como Hay un campo en las canciones que se capturarán en la base de datos que identifica a qué fragmento pertenece la tarea, es decir, en qué fragmento se ejecutará. Si hay dos fragmentos, se representan con los números de fragmento 0 y 1. Hay 1000 canciones para capturar, 500 están marcadas como 0 y 500 están marcadas como 1. Luego, pasaremos la información de la canción como parámetro de contexto al método de búsqueda. Se pueden limitar 500 canciones a 100. Cada vez que se encuentran 100 canciones para procesar, esto se denomina procesamiento por lotes. Una tarea se divide en 2 partes, cada una de las cuales es la película. dividido en 5 lotes basados ​​en un lote de 100 canciones.

ProcessData procesa 100 canciones cada vez en lotes, de las cuales 100 canciones se tratan como una subcosa. Si una de las canciones genera una excepción o falla de alguna manera, se considerará que la ejecución de. este lote falló la próxima vez. Todos los datos de la tarea en este lote se ejecutarán nuevamente.

El atributo event_trace_rdb_url del seguimiento de eventos corresponde a que la biblioteca crea automáticamente dos tablas, JOB_EXECUTION_LOG y JOB_STATUS_TRACE_LOG, así como varios índices.

JOB_EXECUTION_LOG registra el historial de ejecución de cada trabajo. Se divide en dos pasos:

Cuando el trabajo comienza a ejecutarse, los datos se insertan en la base de datos. Todos los campos excepto Failure_cause y complete_time no están vacíos.

Actualice los datos a la base de datos cuando el trabajo complete la ejecución y actualice is_success, complete_time y Failure_cause (si falla la ejecución del trabajo).

JOB_STATUS_TRACE_LOG registra la tabla de seguimiento de cambios de estado del trabajo. El ciclo de vida y el seguimiento de los cambios en el estado del trabajo se pueden consultar a través del task_id de cada ejecución de trabajo.

Al configurar múltiples escuchas de tareas, puede realizar métodos de escucha antes y después de la ejecución de la tarea. Hay dos tipos de escuchas: ejecutadas en cada nodo de trabajo y ejecutadas en un solo nodo en un escenario distribuido.

Si el trabajo procesa archivos en el servidor de trabajos y los elimina una vez completado el procesamiento, considere utilizar cada nodo para realizar la tarea de limpieza. Este tipo de tarea es simple de implementar y no es necesario considerar si la tarea distribuida global está completa. Intente utilizar este tipo de oyente.

Pasos:

Definir el oyente

Pasar el oyente como parámetro a JobScheduler

Si el trabajo procesa datos de la base de datos, solo Solo Se necesita un nodo para completar la tarea de limpieza de datos.

Este tipo de procesamiento de tareas es complejo y requiere la sincronización del estado de los trabajos en un entorno distribuido. Se proporcionan configuraciones de tiempo de espera para evitar interbloqueos causados ​​por la desincronización del trabajo.

Pasos:

Definir el oyente

Pasar el oyente como parámetro a JobScheduler

Ruta completa:

io.elasticjob.lite.api.strategy.impl.AverageAllocationJobShardingStrategy

Descripción de la estrategia:

La estrategia de fragmentación basada en el algoritmo de asignación promedio también es la estrategia de fragmentación predeterminada.

Si el fragmento no es divisible, los fragmentos adicionales que no se pueden dividir se agregarán al servidor con el número de secuencia más pequeño. Por ejemplo:

Si hay 3 servidores divididos en 9 shards, los shards asignados a cada servidor son: 1=, 2=, 3=

Si hay 3 servidores, divididos en 8 sectores, entonces los sectores asignados a cada servidor son: 1=, 2=, 3=

Si hay 3 servidores y se dividen en 10 sectores, los sectores asignados a cada servidor Sí: 1=, 2=, 3=

Ruta completa:

io.elasticjob.lite.api.strategy.impl.OdevitySortByNameJobShardingStrategy

Descripción de la estrategia:

Determine la estrategia de fragmentación del algoritmo de orden ascendente y descendente de IP en función de los números pares e impares del valor hash del nombre del trabajo.

Si el valor hash del nombre del trabajo es un número impar, la IP está en orden ascendente.

Si el valor hash del nombre del trabajo es un número par, las IP están en orden descendente.

Se utiliza para distribuir uniformemente la carga entre diferentes trabajos y diferentes servidores.

Ruta completa:

io.elasticjob.lite.api.strategy.impl.RotateServerByNameJobShardingStrategy

Descripción de la estrategia:

Según el nombre del trabajo La estrategia de fragmentación para rotar la lista de servidores con el valor hash.

Descomprima elastic-job-lite-console-${version}.tar.gz y ejecute binstart.sh. Abra el navegador y visite http://localhost:8899/ para acceder a la consola. 8899 es el número de puerto predeterminado. Puede ingresar -p para personalizar el número de puerto a través del script de inicio.

elastic-job-lite-console-${version}.tar.gz se puede compilar y obtener mediante mvn install.

Iniciar sesión

Se proporcionan dos cuentas, administrador e invitado. El administrador tiene todos los derechos de operación y el invitado solo tiene derechos de visualización. El nombre de usuario y la contraseña predeterminados del administrador son root/root, y el nombre de usuario y la contraseña del invitado son guest/guest. Los nombres de usuario y las contraseñas del administrador y del invitado se pueden modificar a través de confauth.properties.

Lista de funciones

Control de seguridad de inicio de sesión

Centro de registro, gestión de fuentes de datos de seguimiento de eventos

Modificación rápida de la configuración del trabajo

Ver el estado de las dimensiones del trabajo y del servidor

Operación deshabilitar el trabajo, habilitar, detener y eliminar el ciclo de vida

Consulta de seguimiento de eventos

Observaciones:

Utilice JDK1.7 y superior

Utilice Zookeeper 3.4.6 y superior

Utilice Maven 3.0.4 y superior

El centro de registro crea un nodo de nombre de trabajo en el espacio de nombres definido para distinguir diferentes trabajos. Por lo tanto, una vez que se crea un trabajo, el nombre del trabajo no se puede modificar. Si se modifica el nombre, se considerará como un trabajo nuevo. El nodo de nombre del trabajo contiene cuatro subnodos de datos, a saber, configuración, instancias, fragmentación, servidores y líder.

nodo de configuración

información de configuración del trabajo, almacenada en formato JSON

nodo de instancias

información de la instancia de ejecución del trabajo, el nodo secundario es el trabajo actual La clave principal de la instancia en ejecución. La clave principal de una instancia de ejecución de trabajo consta de la dirección IP y el PID del servidor que ejecuta el trabajo. Las claves principales de las instancias de ejecución de trabajos son nodos temporales, que se registran cuando la instancia de trabajo se conecta y se borran automáticamente cuando se desconecta. El registro monitorea los cambios en estos nodos para coordinar la fragmentación y la alta disponibilidad de trabajos distribuidos. Puede escribir TRIGGER en el nodo de instancia que ejecuta el trabajo para indicar que la instancia se ejecutará inmediatamente.

Nodo de fragmentación

Información de fragmentación del trabajo, el subnodo es el número de serie del elemento del fragmento, comenzando desde cero hasta el número total de fragmentos menos uno. Los nodos secundarios del número de serie del elemento fragmentado almacenan información detallada. Los subnodos debajo de cada elemento del fragmento se utilizan para controlar y registrar el estado de ejecución del fragmento. Descripción de detalles del nodo:

nodo de servidores

información del servidor de trabajos, el subnodo es la dirección IP del servidor de trabajos. DISABLED se puede escribir en el nodo de dirección IP para indicar que el servidor está deshabilitado. Bajo la nueva arquitectura nativa de la nube, el nodo de servidores está muy debilitado y solo contiene la función de controlar si el servidor se puede desactivar. Para implementar el núcleo del trabajo de manera más pura, la función de los servidores puede eliminarse en el futuro y la capacidad de controlar si los servidores están deshabilitados debe delegarse al sistema de implementación automatizada.

nodo líder

La información del nodo maestro del servidor de trabajos se divide en tres subnodos: elección, fragmentación y conmutación por error. Se utiliza para la elección del nodo maestro, el procesamiento de fragmentación y conmutación por error, respectivamente.

El nodo líder es un nodo interno. Si no está interesado en los principios del marco laboral, no necesita prestar atención a este nodo.

Soy "Ling Yejun". Gracias a todos los amigos por sus me gusta, colecciones y comentarios. Nos vemos en el próximo número.