Tâches différées dans l'architecture de micro-service

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.





Figure 1 - Schéma de principe du crochet de détente
Figure 1 - Schéma de principe du crochet de détente





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 .





. , “” - .





Figure 2 - Schéma de communication via un canal asynchrone
2 -

3  4 .





Figure 3 - Le processus de création d'une entité avec exécution différée
3 -
Figure 4 - Exécution d'une affectation d'entité
4 -

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





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





Figure 5 - Création d'un travail en utilisant une couche intermédiaire
5 -
Figure 6 - Traitement d'un événement à l'aide d'une couche intermédiaire
6 -

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





Figure 7 - Gestionnaire de tâches en un m / s avec Trigger Hook
7 - / Trigger Hook

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





Figure 8 - Gestionnaire de tâches dans le cadre du client 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
      
      



Figure 9 - Schéma de mise à l'échelle horizontale
9 -

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





Trigger Hook

-. Docker . Kubernetes. minikube. .





Figure 10 - Schéma simplifié de l'interaction des micro-services
10 - -

Message service - ( 11), API email . .





:













  • PHP, Symfony 5.





  • . API Nginx. - supervisor RabbitMQ. .





  • 8 .





Figure 11 - Service de messagerie
11 - Message service

Message Dashboard - Message service ( 12).





Figure 12 - Interface de l'application de démonstration
12 - -

Mailer . . , .





Trigger service - . GRPC , AMQP ().





Figure 13 - Service de déclenchement
13 - Trigger service

Monitoring - , . 14 . Grafana InfluxDB. .





Figure 14 - Métriques techniques Trigger Hook
14 - Trigger Hook

J'espère que vous trouverez l'application et l'article utiles! Suivez mon github , suivez le projet , mettez des astérisques). Remercier!








All Articles