push キューの作成

このページでは、push キューの作成とカスタマイズ、キューのコンテンツの確認を行う方法について説明します。

queue.yaml を使用してキューを作成する

タスクを処理するには、タスクを push キューに追加する必要があります。App Engine には、default という名前のデフォルトの push キューが用意されています。これは、デフォルト設定ですぐに使用できるように設定されています。すべてのタスクをこのデフォルト キューに追加するだけで、これを使用できます。他のキューを作成して設定する必要はありません。

キューを追加するか、デフォルトの設定を変更するには、アプリケーションの queue.yaml ファイルを編集し、App Engine にアップロードします。無料アプリケーションでは最大 10 個のキューを作成でき、課金対応アプリケーションでは最大 100 個のキューを作成できます。キューを動的に作成することはできません。

次の queue.yaml ファイルでは、2 つのキューを定義しています。

queue:
- name: queue-blue
  target: v2.task-module
  rate: 5/s

- name: queue-red
  rate: 1/s
Cloud SDK の gcloud コマンドを使用してファイルをアップロードします。

gcloud app deploy queue.yaml

queue-blue に追加されたタスクはすべてターゲット モジュール v2.task-module に送信されます。queue-red の更新間隔は 5 回/秒から 1 回/秒に変更されます。1 秒間に 1 タスクの割合でタスクがキューからターゲットに送信されます。

キューを削除した後に同じ名前で新しいキューを作成する場合は、およそ 7 日間待つ必要があります。

この他にも、queue.yaml ファイルに追加して push キューの動作を変更するパラメータがあります。詳細については、queue.yaml リファレンスをご覧ください。

push キューの処理速度を定義する

他のディレクティブ(ratebucket_sizemax_concurrent_requests など)を定義すると、キューごとにタスクの処理速度を制御できます。

タスクキューでは、トークン バケットを使用して、タスク実行のレートを制御します。指定された各キューにはトークンを保持するトークン バケットがあり、bucket_size で指定された最大サイズまで、またはバケットサイズを指定していない場合は最大で 5 個までトークンを保持できます。

アプリケーションでタスクが実行されるたびに、バケットからトークンが 1 つ削除されます。キューのバケットにトークンがなくなるまで、アプリはそのキューにあるタスクの処理を続けます。キューに指定した rate に基づいて、App Engine からバケットに新しいトークンが続けて補充されます。

処理対象のタスクがキューにあって、そのキューのバケットにトークンがある場合、App Engine はトークンと同じ数のタスクを同時に処理します。その結果、処理量の急増によってシステム リソースが消費され、ユーザー リクエストの処理とリソースの競合が発生する可能性があります。

大量のタスクの同時実行やデータストアの競合を防ぐには、max_concurrent_requests を使用します。

以下の例では、max_concurrent_requests を設定してタスクを制限しています。また、アプリケーションの要件と使用可能なリソースに基づいて、バケットサイズとレートを調整しています。

queue:
- name: queue-blue
  rate: 20/s
  bucket_size: 40
  max_concurrent_requests: 10

すべてのキューに保存容量の上限を設定する

queue.yaml で、すべてのキューでタスクデータに使用できる保存容量の合計を定義できます。合計保存容量の上限を定義するには、トップレベルに total_storage_limit という名前の要素を指定します。

# Set the total storage limit for all queues to 120MB
total_storage_limit: 120M
queue:
- name: queue-blue
  rate: 35/s

この値には、数値に続けて単位を指定します。単位は、バイトの場合は B、キロバイトの場合は K、メガバイトの場合は M、ギガバイトの場合は G、テラバイトの場合は T を指定します。たとえば 100K は 100 キロバイトの上限を表します。タスクを追加するとキューが保存容量の上限を超える場合、タスクを追加する呼び出しは失敗します。無料アプリの場合、デフォルトの上限は 500M(500 メガバイト)です。有料アプリの場合、上限を明示しないと無制限となります。この制限を使用すると、Fork 爆弾となるプログラミング エラーからアプリを保護することができます。このエラーがあると、各タスクが実行中に他の複数のタスクを追加できてしまいます。

タスクを追加するときに割り当ての不足が原因でエラーが発生する場合は、合計保存容量の上限を増やすと解決できることがあります。上限を増やす場合は、数日間相当のタスクに必要な容量に上限を設定することを強くおすすめします。これによって、キューが一時的にバックアップできるようになります。バックログを使用して処理している間に引き続き新しいタスクを受け付けることができる上に、Fork 爆弾のプログラミング エラーからも保護することができます。

GCP Console でのキューのモニタリング

GCP Console の [タスクキュー] ページにアプリケーション内のすべてのタスクキューに関する情報が表示されます。

  1. GCP Console の [タスクキュー] ページにアクセスし、そのページの上部にあるメニューバーの [push キュー] タブを選択します。

    [push キュー] タブに移動

  2. [push キュー] タブに、アプリケーションのキューがすべて表示されます。キュー名をクリックすると、[タスクキューの詳細] ページが開き、選択したキュー内のタスクがすべて表示されます。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Go の App Engine スタンダード環境