In Projekten mĂŒssen hĂ€ufig ausstehende Aufgaben ausgefĂŒhrt werden, z. B. das Senden von E-Mails, das Pushen und andere spezifische Aufgaben, die dem DomĂ€nenbereich Ihrer Anwendung eigen sind. Schwierigkeiten beginnen, wenn eine regulĂ€re Crontab nicht mehr ausreicht, wenn die Stapelverarbeitung nicht geeignet ist und wenn jede Einheit einer Aufgabe ihre eigene AusfĂŒhrungszeit hat oder dynamisch zugewiesen wird.
Um dieses Problem zu lösen, wurde eine andere Lösung namens Trigger Hook erstellt . Ein schematisches Arbeitsdiagramm ist in Abbildung 1 dargestellt. Das Diagramm zeigt, was mit Aufgaben wĂ€hrend ihres gesamten Lebenszyklus geschieht. Eine Ănderung der Farbe bedeutet eine Ănderung des Status der Aufgabe.
|
eine Aufgabe, deren Startzeit nicht bald kommt |
|
eine Aufgabe, deren Startzeit bald kommt |
|
Aufgabe, deren Startzeit gekommen ist |
|
verarbeiteter Job |
|
unbestÀtigter Jobstatus in der Datenbank |
|
Befehl löschen |
Aufgabenlebenszyklus:
Wenn eine Aufgabe erstellt wird, geht sie in die Datenbank (quadratischer Block) (rot und gelb).
( ), ( ->). ().
, ( ->). .
, ( ->->). , .
.
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. .
Ich hoffe, Sie finden die App und den Artikel hilfreich! Folgen Sie meinem Github , folgen Sie dem Projekt , setzen Sie Sternchen). Danke!