マイクロサービスアーキテクチャの遅延タスク

多くの場合、プロジェクトでは、メールの送信、プッシュ、およびアプリケーションのドメイン領域に固有の他の特定のタスクなど、保留中のタスクを実行する必要があります。通常のcrontabでは不十分な場合、バッチ処理が適切でない場合、およびタスクの各ユニットに独自の実行時間が存在する場合、または動的に割り当てられる場合に、問題が発生します。





この問題を解決するために、トリガーフックと呼ばれる別のソリューションが作成されました作業の概略図を図1に示します。この図は、タスクのライフサイクル全体でタスクに何が起こるかを示しています。色の変化は、タスクのステータスの変化を意味します。





図1-トリガーフックの概略図
図1-トリガーフックの概略図





起動時間がすぐに来ないタスク









起動時間が間もなく開始されるタスク









開始時刻が来たタスク









処理されたジョブ









データベース内の未確認のジョブステータス









削除コマンド





タスクのライフサイクル:





  • タスクが作成されると、データベース(正方形のブロック)(赤と黄色)に入ります。





  • ( ), ( ->). ().





  • , ( ->). .





  • , ( ->->). , .





.





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 .





. , “” - .





図2-非同期チャネルを介した通信のスキーム
2 -

3  4 .





図3-実行が延期されたエンティティを作成するプロセス
3 -
図4-エンティティ割り当ての実行
4 -

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





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





図5-中間層を使用したジョブの作成
5 -
図6-中間層を使用したイベントの処理
6 -

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





図7-トリガーフックを使用した1m / sのタスクマネージャー
7 - / Trigger Hook

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





図8-クライアントの一部としてのタスクマネージャー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
      
      



図9-水平スケーリングスキーム
9 -

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





Trigger Hook

-. Docker . Kubernetes. minikube. .





図10-マイクロサービスの相互作用の簡略図
10 - -

Message service - ( 11), API email . .





:













  • PHP, Symfony 5.





  • . API Nginx. - supervisor RabbitMQ. .





  • 8 .





図11-メッセージサービス
11 - Message service

Message Dashboard - Message service ( 12).





図12-デモアプリケーションインターフェイス
12 - -

Mailer . . , .





Trigger service - . GRPC , AMQP ().





図13-トリガーサービス
13 - Trigger service

Monitoring - , . 14 . Grafana InfluxDB. .





図14-テクニカルメトリクストリガーフック
14 - Trigger Hook

アプリと記事がお役に立てば幸いです。フォロー私のgithubのを、続くプロジェクト、入れアスタリスク)。感謝!








All Articles