Souvent, dans les projets, il est nécessaire d'effectuer des tâches en attente, telles que l'envoi d'e-mails, le push et d'autres tâches spécifiques inhérentes au domaine de domaine de votre application. Les difficultés commencent lorsqu'un crontab régulier n'est plus suffisant, lorsque le traitement par lots n'est pas adapté et lorsque chaque unité d'une tâche a son propre temps d'exécution ou est affectée dynamiquement.
Pour résoudre ce problème, une autre solution a été créée, appelée Trigger Hook . Un diagramme schématique du travail est présenté à la figure 1. Le diagramme montre ce qui arrive aux tâches pendant tout leur cycle de vie. Un changement de couleur signifie un changement de statut de la tâche.
|
une tâche dont l'heure de lancement ne viendra pas bientôt |
|
une tâche dont l'heure de lancement arrive bientôt |
|
tâche dont l'heure de début est arrivée |
|
travail traité |
|
statut de tâche non confirmé dans la base de données |
|
commande de suppression |
Cycle de vie de la tâche:
Lorsqu'une tâche est créée, elle entre dans la base de données (bloc carré) (rouge et jaune).
( ), ( ->). ().
, ( ->). .
, ( ->->). , .
.
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. .
J'espère que vous trouverez l'application et l'article utiles! Suivez mon github , suivez le projet , mettez des astérisques). Remercier!