多くの場合、プロジェクトでは、メールの送信、プッシュ、およびアプリケーションのドメイン領域に固有の他の特定のタスクなど、保留中のタスクを実行する必要があります。通常のcrontabでは不十分な場合、バッチ処理が適切でない場合、およびタスクの各ユニットに独自の実行時間が存在する場合、または動的に割り当てられる場合に、問題が発生します。
この問題を解決するために、トリガーフックと呼ばれる別のソリューションが作成されました。作業の概略図を図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 .
. , “” - .
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. .
アプリと記事がお役に立てば幸いです。フォロー私のgithubのを、続くプロジェクト、入れアスタリスク)。感謝!