Aufgeschobene Aufgaben in der Micro-Service-Architektur

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.





Abbildung 1 - Schematische Darstellung des Abzugshakens
Abbildung 1 - Schematische Darstellung des Abzugshakens





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 .





. , “” - .





Abbildung 2 - Kommunikationsschema ĂŒber einen asynchronen Kanal
2 -

3  4 .





Abbildung 3 - Der Prozess zum Erstellen einer EntitĂ€t mit verzögerter AusfĂŒhrung
3 -
Abbildung 4 - AusfĂŒhren einer EntitĂ€tszuweisung
4 -

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





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





Abbildung 5 - Erstellen eines Jobs mithilfe einer Zwischenebene
5 -
Abbildung 6 - Verarbeiten eines Ereignisses mithilfe einer Zwischenschicht
6 -

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





Abbildung 7 - Task-Manager in einem m / s mit Trigger Hook
7 - / Trigger Hook

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





Abbildung 8 - Task-Manager als Teil des Clients m / s
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
      
      



Abbildung 9 - Horizontales Skalierungsschema
9 -

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





Trigger Hook

-. Docker . Kubernetes. minikube. .





Abbildung 10 - Vereinfachtes Diagramm der Interaktion von Mikrodiensten
10 - -

Message service - ( 11), API email . .





:













  • PHP, Symfony 5.





  • . API Nginx. - supervisor RabbitMQ. .





  • 8 .





Abbildung 11 - Nachrichtendienst
11 - Message service

Message Dashboard - Message service ( 12).





Abbildung 12 - Demo-Anwendungsschnittstelle
12 - -

Mailer . . , .





Trigger service - . GRPC , AMQP ().





Abbildung 13 - Triggerdienst
13 - Trigger service

Monitoring - , . 14 . Grafana InfluxDB. .





Abbildung 14 - Technische Metriken Trigger Hook
14 - Trigger Hook

Ich hoffe, Sie finden die App und den Artikel hilfreich! Folgen Sie meinem Github , folgen Sie dem Projekt , setzen Sie Sternchen). Danke!








All Articles