Práctica del marco de programación de tareas programadas distribuidas
El marco de programación de tareas distribuidas es una herramienta esencial para casi todas las aplicaciones a gran escala. Este artículo presenta los antecedentes de la demanda y los puntos débiles del uso del marco de programación de tareas, y realiza una revisión del uso de. el marco de programación de tareas distribuidas de código abierto comúnmente utilizado en la industria Para explorar la práctica y analizar las ventajas y desventajas de estos marcos y pensamientos sobre su propio negocio.
1. Antecedentes comerciales
1.1 Por qué es necesario utilizar la programación de tareas programadas
(1) Escenario de procesamiento basado en el tiempo: enviar cupones cada hora, actualice los ingresos todos los días, los datos de etiquetas y los datos de público se actualizan diariamente.
(2) Procesamiento de datos por lotes: informes estadísticos por lotes de datos mensualmente, actualización del estado de SMS en lotes y los requisitos en tiempo real no son altos.
(3) Desacoplamiento de ejecución asincrónica: actualización del estado de la actividad, ejecución asincrónica de consultas fuera de línea, desacoplamiento de la lógica interna.
1.2 Requisitos de uso y puntos débiles
(1) Capacidades de alarma y monitoreo de ejecución de tareas.
(2) Las tareas se pueden configurar de forma flexible y dinámica sin necesidad de reiniciar.
(3) Negocio transparente, bajo acoplamiento, configuración optimizada y fácil desarrollo.
(4) Fácil de probar.
(5) Alta disponibilidad, sin punto único de falla.
(6) Las tareas no se pueden ejecutar repetidamente para evitar anomalías lógicas.
(7) Capacidades de procesamiento paralelo distribuido para grandes tareas.
2. Práctica y exploración de frameworks de código abierto
2.1 Temporizador nativo de Java y
SchedledExecutorService
2.1.1 Uso del temporizador
p>
Defectos del temporizador:
Debido a los defectos anteriores, intente no utilizar Timer. La idea también le indicará claramente que utilice ScheduledThreadPoolExecutor en lugar de Timer.
2.1.2 Uso de ScheduledExecutorService
ScheduledExecutorService ha reparado los defectos de Timer Primero, la implementación interna de ScheduledExecutorService es el grupo de subprocesos ScheduledThreadPool, que puede admitir la ejecución simultánea de múltiples tareas.
Si ocurre una excepción en una tarea ejecutada por un determinado hilo, también será manejada y no afectará la ejecución de otras tareas de hilo. Además, ScheduledExecutorService se basa en el retraso del intervalo de tiempo y la ejecución. no cambiará debido a cambios en la hora del sistema.
Por supuesto, ScheduledExecutorService también tiene sus propias limitaciones: solo se puede programar en función del retraso de la tarea y no puede satisfacer las necesidades de programación de calendario y tiempo absoluto.
2.2 Spring Task
2.2.1 Uso de Spring Task
Spring task es un marco liviano de tareas programadas desarrollado independientemente por Spring y no necesita depender de otros Paquete adicional, la configuración es relativamente simple.
Aquí se utiliza la configuración de anotaciones
2.2.2 Defectos de Spring Task
Spring Task en sí no admite la persistencia y no existe un modo de clúster distribuido oficial. Solo los desarrolladores pueden implementarlo manualmente en aplicaciones comerciales, que no pueden satisfacer las necesidades de visualización y configuración sencilla.
2.3 El siempre clásico Quartz
2.3.1 Introducción básica
El framework Quartz es la herramienta de programación de tareas de código abierto más famosa en el campo de Java y actualmente está Como herramienta de sincronización de facto, casi todos los marcos de tareas programadas de código abierto se basan en la programación central de Quartz.
2.3.2 Análisis de principios
Arquitectura y componentes principales
Conceptos clave
(1) Programador: programador de tareas, es la ejecución Controlador de programación de tareas. Es esencialmente un contenedor de planificación y programación que registra todos los activadores y los detalles de trabajo correspondientes. Utiliza el grupo de subprocesos como componente básico para la ejecución de tareas para mejorar la eficiencia de la ejecución de tareas.
(2) Disparador: el disparador se utiliza para definir las reglas de tiempo de la programación de tareas e indicarle al programador de tareas cuándo activar la tarea. CronTrigger es un potente disparador creado en base a expresiones cron.
(3) Calendario: una colección de puntos temporales específicos en el calendario. Un activador puede contener varios calendarios, que se pueden utilizar para excluir o incluir determinados momentos.
(4) JobDetail: es un trabajo ejecutable, que se utiliza para describir la clase de implementación del trabajo y otra información estática relacionada, como el nombre del trabajo, los oyentes y otra información relacionada.
(5) Trabajo: interfaz de ejecución de tareas, con un solo método de ejecución, que se utiliza para ejecutar lógica empresarial real.
(6) JobStore: los métodos de almacenamiento de tareas, que incluyen principalmente RAMJobStore y JDBCJobStore, se almacenan en la memoria de la JVM y tienen el riesgo de perderse y JDBCJobStore conserva la información de la tarea en la base de datos. apoya la agrupación.
2.3.3 Instrucciones prácticas
(1) Acerca del uso básico de Quartz
(2) El uso comercial debe cumplir con los requisitos de modificación dinámica y reiniciar sin pérdida, que generalmente se requiere Guardar usando la base de datos.
(3) Componentización
(4) Extensión
2.3.4 Defectos y deficiencias
(1) La información de la tarea debe ser Persistencia de la tabla de datos comerciales, junto con el negocio.
(2) La lógica de programación y la lógica de ejecución coexisten en el mismo proyecto. Cuando el rendimiento de la máquina es fijo, el negocio y la programación inevitablemente se afectarán entre sí.
(3) En el modo de clúster de cuarzo, las tareas solo se adquieren a través de bloqueos exclusivos de la base de datos y la ejecución de tareas no implementa un mecanismo de equilibrio de carga completo.
2.4 Artefacto liviano XXL-JOB
2.4.1 Introducción básica
XXL-JOB es una plataforma liviana de programación de tareas distribuidas con características principales Está basada en plataforma , fácil de implementar, rápido de desarrollar, fácil de aprender, liviano y fácil de expandir, y el código aún se actualiza continuamente.
Proporciona principalmente varios módulos funcionales, como gestión de configuración dinámica de tareas, monitoreo de tareas e informes estadísticos, y registros de programación. Admite múltiples modos operativos y estrategias de enrutamiento, y se puede fragmentar simplemente según la cantidad de. Procesamiento de datos del correspondiente grupo de máquinas ejecutoras.
2.4.2 Análisis de principios
Antes de la versión 2.1.0, el módulo de programación central se basaba en el marco de cuarzo. La versión 2.1.0 comenzó a desarrollar componentes de programación de desarrollo propio, eliminándolos. dependencias del cuarzo y tiempo de uso.
2.4.3 Instrucciones prácticas
Consulte la documentación oficial para una configuración e introducción detalladas.
Usos de demostración 2.4.3.1:
@JobHandler(value="offlineTaskJobHandler"), simplemente implemente la lógica empresarial. (Nota: esta vez se presenta Dubbo, que se presentará más adelante).
(Desliza para ver)
Ejemplo 2: tarea de transmisión de fragmentos.
(Deslizar para ver)
2.4.3.2 Integrar dubbo
(1) Introducir las dependencias del paquete jar dubbo-spring-boot-starter y business fachada.
(Deslizar para ver)
(2) El archivo de configuración se agrega a la configuración del consumidor de Dubbo (se pueden definir varios archivos de configuración según el entorno y cambiar a través del perfil).
(Desliza para ver)
(3) Simplemente inyecta la interfaz de fachada a través de @Reference en el código.
(Deslizar para ver)
(4) Agregue la anotación @EnableDubboConfiguration al programa de inicio.
(Deslizar para ver)
2.4.4 Configuración visual de tareas
Los proyectos de plataforma integrados facilitan a los desarrolladores administrar tareas y monitorear los registros de ejecución, y proporciona algunos Funciones que facilitan las pruebas.
2.4.5 Extensiones
(1) Optimización del seguimiento de tareas y reportes.
(2) Ampliación de los métodos de alarma de tareas, como agregar un centro de alarmas, proporcionar información interna y alarmas por SMS.
(3) Diferentes alarmas de monitoreo y estrategias de reintento para situaciones anormales en la ejecución interna del negocio real.
2.5 Elastic-Job de alta disponibilidad
2.5.1 Introducción básica
Elastic-Job es una solución de programación distribuida que consta de dos subsistemas independientes. proyectos Elastic-Job-Lite y Elastic-Job-Cloud.
Elastic-Job-Lite se posiciona como una solución liviana y descentralizada que proporciona servicios distribuidos de coordinación de tareas en forma de paquetes jar.
Elastic-Job-Cloud utiliza la solución Mesos Docker para proporcionar servicios adicionales como gestión de recursos, distribución de aplicaciones y aislamiento de procesos.
Desafortunadamente, no ha habido ningún registro de actualización de iteraciones durante dos años.
2.5.2 Análisis de principios
2.5.3 Instrucciones prácticas
2.5.3.1 Uso de demostración
(1) Instalar zookeeper y configurar Configuración del centro de registro, el archivo de configuración se agrega a la configuración zk del centro de registro.
(Deslizar para ver)
(Deslizar para ver)
(2) Configure la configuración de la fuente de datos y agregue la configuración de la fuente de datos al archivo de configuración.
(Deslizar para ver)
(Deslizar para ver)
(3) Configurar la configuración del evento.
(Deslizar para ver)
(4) Para facilitar la configuración flexible de diferentes eventos de activación de tareas, agregue la anotación ElasticSimpleJob.
(Deslizar para ver)
(5) Inicializar la configuración.
(Deslizar para ver)
(6) Implemente la interfaz SimpleJob, integre dubbo según el método anterior y complete la lógica empresarial.
(Desliza para ver)
2.6 Otros frameworks de código abierto
(1) Saturn: Saturn es una plataforma distribuida de programación de tareas de código abierto por Vipshop Modificado en. la base de Elastic Job.
(2) SIA-TASK: Es la plataforma de programación de tareas distribuidas de código abierto de CreditEase.
3. Comparación de ventajas y desventajas y pensamiento sobre la adaptación al escenario empresarial
Pensamiento empresarial:
4. Conclusión
No lo es especial para escenarios concurrentes Para sistemas de alta gama, la configuración e implementación de xxl-job es simple y fácil de usar, sin introducir componentes redundantes. También proporciona una consola visual, que es muy fácil de usar y es una mejor opción. Para los sistemas que esperan utilizar directamente las capacidades de los marcos distribuidos de código abierto, se recomienda realizar selecciones adecuadas según sus propias circunstancias.
Adjunto: Referencias
Arquitectura de alta disponibilidad
Cambiando la forma en que se construye Internet