Tugas yang Ditunda dalam Arsitektur Layanan Mikro

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.





Gambar 1 - Diagram skematis dari Trigger Hook
Gambar 1 - Diagram skematis dari Trigger Hook





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 .





. , “” - .





Gambar 2 - Skema komunikasi melalui saluran asynchronous
2 -

3  4 .





Gambar 3 - Proses membuat entitas dengan eksekusi yang ditangguhkan
3 -
Gambar 4 - Mengeksekusi penugasan entitas
4 -

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





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





Gambar 5 - Membuat pekerjaan menggunakan lapisan perantara
5 -
Gambar 6 - Memproses acara menggunakan lapisan perantara
6 -

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





Gambar 7 - Manajer tugas dalam satu m / s dengan Trigger Hook
7 - / Trigger Hook

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





Gambar 8 - Manajer tugas sebagai bagian dari m / s klien
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
      
      



Gambar 9 - Skema skala horizontal
9 -

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





Trigger Hook

-. Docker . Kubernetes. minikube. .





Gambar 10 - Diagram sederhana dari interaksi layanan mikro
10 - -

Message service - ( 11), API email . .





:













  • PHP, Symfony 5.





  • . API Nginx. - supervisor RabbitMQ. .





  • 8 .





Gambar 11 - Layanan pesan
11 - Message service

Message Dashboard - Message service ( 12).





Gambar 12 - Antarmuka aplikasi demo
12 - -

Mailer . . , .





Trigger service - . GRPC , AMQP ().





Gambar 13 - Layanan pemicu
13 - Trigger service

Monitoring - , . 14 . Grafana InfluxDB. .





Gambar 14 - Metrik teknis Trigger Hook
14 - Trigger Hook

Saya harap aplikasi dan artikel ini bermanfaat bagi Anda! Ikuti github saya , ikuti proyek , beri tanda bintang). Terima kasih!








All Articles