Seringkali dalam proyek, ada kebutuhan untuk melakukan tugas-tugas yang tertunda, seperti mengirim email, mendorong dan tugas spesifik lainnya yang melekat di area domain aplikasi Anda. Kesulitan dimulai saat crontab biasa tidak lagi mencukupi, saat pemrosesan batch tidak sesuai, dan saat setiap unit tugas memiliki waktu eksekusi sendiri atau ditetapkan secara dinamis.
Untuk mengatasi masalah ini, solusi lain telah dibuat yang disebut Trigger Hook . Diagram skematis pekerjaan ditunjukkan pada Gambar 1. Diagram tersebut menunjukkan apa yang terjadi pada tugas selama seluruh siklus hidupnya. Perubahan warna berarti perubahan status tugas.
|
tugas yang waktu peluncurannya tidak akan segera datang |
|
tugas yang waktu peluncurannya akan segera hadir |
|
tugas yang waktu mulainya telah tiba |
|
pekerjaan yang diproses |
|
status pekerjaan belum dikonfirmasi di database |
|
hapus perintah |
Siklus hidup tugas:
Saat tugas dibuat, tugas tersebut masuk ke database (blok persegi) (merah dan kuning).
( ), ( ->). ().
, ( ->). .
, ( ->->). , .
.
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. .
Saya harap aplikasi dan artikel ini bermanfaat bagi Anda! Ikuti github saya , ikuti proyek , beri tanda bintang). Terima kasih!