Go での pull キューの使用

このページでは、App Engine スタンダード環境での pull キューの概要について説明します。

push キューでは、タスクはキューの構成に基づいてワーカー サービスに配信されます。pull キューでは、ワーカー サービスがキューに対してタスクに関する「問い合わせ」を行う必要があります。キューは、一定の期間タスクを処理する権限をワーカーに許可します。このプロセスをリースといいます。

アプリケーションがタスクキュー サービスにタスクをオフロードした後、ワーカーがタスクキュー サービスからタスクをリースします

pull キューを使用すると、関連するタスクをタグでグループ化し、特定のタグを持つ複数のタスクを一度に pull するようにワーカーを構成することもできます。このプロセスは「バッチ処理」と呼ばれます。

リースが期限切れになる前にワーカーがタスクを完了できない場合、リースを更新することも、別のワーカーが取得できるように解放することもできます。タスクに関連付けられた処理が完了したら、ワーカーはそのタスクを削除する必要があります。

pull キューを使用する場合は、push キューで自動的に実行される関数をコード側で処理する必要があります。

ワーカーのスケーリング
コードは、処理量に応じてワーカーの数をスケールする必要があります。コード側でスケーリングを行わないと、処理するタスクがない場合に、コンピューティング リソースを浪費するリスクがあります。処理するタスクが多すぎる場合も、レイテンシが発生するリスクがあります。
タスクの削除
処理が終了したら、コードで明示的にタスクを削除する必要があります。push キューでは、App Engine でタスクが自動的に削除されます。処理の終わった pull キューのタスクをワーカーが削除しないと、別のワーカーがそのタスクを再度処理してしまいます。タスクがべき等でない場合は、コンピューティング リソースを浪費してエラーが発生するリスクがあります。

App Engine スタンダード環境で pull キューを作成するには、queue.yaml という名前の構成ファイルでプロパティを設定します。

pull キューのワークフロー

pull キューからタスクを処理するワーカーは、App Engine スタンダード環境で実行されるサービス内で定義する必要があります。

ワークフローは次のとおりです。

  1. queue.yaml を使用して pull キューを作成します。
  2. タスクを作成してキューに追加します。
  3. 作成したワーカーが、TaskQueue を使用してタスクをリースします。
  4. App Engine が、リース レスポンスでワーカーにタスクデータを送信します。
  5. ワーカーがタスクを処理します。リースの期限までにタスクを実行できなかった場合、ワーカーはリース期間を変更できます。リースが期限切れになると、そのタスクは別のワーカーにリースできるようになります。
  6. タスクの処理が正常に完了したら、ワーカーがそのタスクを削除します。

次のステップ