Tareas diferidas en la arquitectura de microservicios

A menudo, en los proyectos, existe la necesidad de realizar tareas pendientes, como enviar correos electrónicos, empujar y otras tareas específicas inherentes al área de dominio de su aplicación. Las dificultades comienzan cuando un crontab normal ya no es suficiente, cuando el procesamiento por lotes no es adecuado y cuando cada unidad de una tarea tiene su propio tiempo de ejecución o se asigna dinámicamente.





Para resolver este problema, se creó otra solución llamada Trigger Hook . En la Figura 1 se muestra un diagrama esquemático del trabajo. El diagrama muestra lo que sucede con las tareas durante todo su ciclo de vida. Un cambio de color significa un cambio en el estado de la tarea.





Figura 1 - Diagrama esquemático del gatillo
Figura 1 - Diagrama esquemático del gatillo





una tarea cuyo lanzamiento no llegará pronto









una tarea cuyo lanzamiento llegará pronto









tarea cuya hora de inicio ha llegado









trabajo procesado









estado del trabajo no confirmado en la base de datos









eliminar comando





Ciclo de vida de la tarea:





  • Cuando se crea una tarea, entra en la base de datos (bloque cuadrado) (rojo y amarillo).





  • ( ), ( ->). ().





  • , ( ->). .





  • , ( ->->). , .





.





API

Id UUIDv4. , . id . UNIX.





:





task := &domain.Task{
	Id: 	    id,
	ExecTime: time,
}
triggerHook.Create(task)
      
      



:





triggerHook.Delete(task.Id)
      
      



:





for {
	result := triggerHook.Consume()
	if err != send(result.Task()) {
		result.Rollback()
	}
	result.Confirm()
}
      
      



, , . , . . .





, - . , , . . Trigger Hook - .





, , . . . Trigger Hook, , - . .





, . , . , , . . , . .





, , - .





.





:





  • AWS EC2 Ubuntu 20





  • t2.micro





  • 1 vCPUs 2.5 GHz





  • 1 GiB RAM





:





  • AWS RDS MySQL 8.0





  • db.t3.micro





  • 2 vCPUs





  • 1 GiB RAM





  • Network: 2085 Mbps













(/)













1 11





1396





100000









52





1920





100000





( )





498





200668





100000





( )





2





49905





100000





Trigger Hook time-series . . .





. : 





  • -





  • ,  









InfluxDB+Grafana





Trigger Hook -

- , , . Trigger Hook -, . , (, ) ( ) , .





, 2 . - , , RabbitMQ. - , , HTTP. ( ), . , . , - , . , Push .





. , “” - .





Figura 2 - Esquema de comunicación a través de un canal asíncrono
2 -

3  4 .





Figura 3 - El proceso de creación de una entidad con ejecución diferida
3 -
Figura 4 - Ejecución de una asignación de entidad
4 -

. , . Trigger Hook . Trigger Hook , . , , , , , , , Trigger Hook.





. , , , . , “ email ” “ YouTube”, Trigger Hook “ ”. , Trigger Hook “ ”. , , , , “ ”. 5 6 .





Figura 5 - Creando un trabajo usando una capa intermedia
5 -
Figura 6 - Procesando un evento usando una capa intermedia
6 -

. - . , , . , , (, ) -. , . - - “ ”?





Figura 7 - Administrador de tareas en un m / s con Trigger Hook
7 - / Trigger Hook

7 , , -, , . , - -. - . RabbitMq direct.





Figura 8 - Administrador de tareas como parte del cliente m / s
8 - /

8 , - . - - Trigger Hook -.





, . , , , PHP + MySQL. PHP , Nginx , , MySQL PHP . MySQL , PHP , .





, . . Trigger Hook . , . , , 5 . , Trigger Hook . . API delete. , . .





, Trigger Hook . . , Trigger Hook , , Trigger Hook - , , .





9 . Trigger Hook , ( ). Trigger Hook . , -  hash map , , Redis, -:





task_id:instance_host
      
      



Figura 9 - Esquema de escala horizontal
9 -

. , . , Trigger Hook . id ( ) trigger hook ( ). .





Trigger Hook

-. Docker . Kubernetes. minikube. .





Figura 10 - Diagrama simplificado de la interacción de microservicios
10 - -

Message service - ( 11), API email . .





:













  • PHP, Symfony 5.





  • . API Nginx. - supervisor RabbitMQ. .





  • 8 .





Figura 11 - Servicio de mensajes
11 - Message service

Message Dashboard - Message service ( 12).





Figura 12 - Interfaz de la aplicación de demostración
12 - -

Mailer . . , .





Trigger service - . GRPC , AMQP ().





Figura 13 - Servicio de activación
13 - Trigger service

Monitoring - , . 14 . Grafana InfluxDB. .





Figura 14 - Gancho de activación de métricas técnicas
14 - Trigger Hook

Espero que la aplicación y el artículo le resulten útiles. Siga mi github , siga el proyecto , ponga asteriscos). ¡Agradecer!








All Articles