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.
|
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 .
. , “” - .
3 4 .
. , . Trigger Hook . Trigger Hook , . , , , , , , , Trigger Hook.
. , , , . , “ email ” “ YouTube”, Trigger Hook “ ”. , Trigger Hook “ ”. , , , , “ ”. 5 6 .
. - . , , . , , (, ) -. , . - - “ ”?
7 , , -, , . , - -. - . RabbitMq direct.
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
. , . , Trigger Hook . id ( ) trigger hook ( ). .
Trigger Hook
-. Docker . Kubernetes. minikube. .
Message service - ( 11), API email . .
:
.
.
PHP, Symfony 5.
. API Nginx. - supervisor RabbitMQ. .
8 .
Message Dashboard - Message service ( 12).
Mailer . . , .
Trigger service - . GRPC , AMQP ().
Monitoring - , . 14 . Grafana InfluxDB. .
Espero que la aplicación y el artículo le resulten útiles. Siga mi github , siga el proyecto , ponga asteriscos). ¡Agradecer!