このページでは、Google Cloud CLI の gcloud
コマンドを使用して Cloud Tasks キューを構成する方法について説明します。
Cloud Tasks キューの構成
Cloud Tasks キューの構成はキューのすべてのタスクに適用されます。構成は、キューの作成時だけでなく、キューの作成後にも行うことができます。
キューの構成には、次の基本的な 3 つの設定項目があります。
ルーティングの構成(App Engine キューのみ)
キューは、適切なワーカーを含むサービスの名前とバージョンを必要とします。これらの情報をターゲットといいます。ターゲットを設定するには、次の 3 つの方法があります。
- ターゲットを明示的に設定しないでください。この場合、デフォルトのサービスが使用されます。
- AppEngineHttpRequest で AppEngineRouting を設定することで、タスク自体にターゲットを明示的に宣言する。 デフォルト以外のターゲットを使用する場合におすすめの方法です。
- appEngineRoutingOverride を使用して、キュー内のすべてのタスクをデフォルト以外のターゲットに明示的に転送する。 この方法では、タスクに設定されている転送をオーバーライドします。
gcloud
を使用してデフォルト以外のキューレベルのルーティングを設定し、タスクレベルのルーティングをオーバーライドするには:
gcloud tasks queues update [QUEUE_ID] \
--routing-override=service:[SERVICE],version:[VERSION]
ここで
SERVICE
はタスク処理を担当する App Engine ワーカー サービスです。VERSION
はアプリのバージョンです。
たとえば、barbequeue
というキュー内のすべてのタスクを処理するために worker
というワーカー サービスを設定すると、次の関数を呼び出して、そのサービスとデフォルト バージョンにルーティングできます。
gcloud tasks queues update barbequeue \
--routing-override=service:worker
Describe
のキュー:
gcloud tasks queues describe barbequeue
出力は次のようになります。
appEngineRoutingOverride:
host: worker.[PROJECT_ID].appspot.com
service: worker
name: projects/[PROJECT_ID]/locations/[LOCATION_ID]/queues/barbequeue
rateLimits:
maxBurstSize: 100
maxConcurrentDispatches: 1000
maxDispatchesPerSecond: 500.0
retryConfig:
maxAttempts: 100
maxBackoff: 3600s
maxDoublings: 16
minBackoff: 0.100s
state: RUNNING
ルーティングを削除します。
gcloud tasks queues update [QUEUE_ID] \
--clear-routing-override
レート制限の定義
キューによってディスパッチされる同時タスクの最大レートと最大数を設定できます。
gcloud tasks queues update [QUEUE_ID] \
--max-dispatches-per-second=[DISPATCH_RATE] \
--max-concurrent-dispatches=[MAX_RUNNING]
ここで
DISPATCH_RATE
は、実際にはバケット内のトークンが更新される割合を表します。 タスクが比較的安定している状況では、これはタスクがディスパッチされる割合に相当します。MAX_RUNNING
は、一度に実行できるキュー内のタスクの最大数です。
たとえば、パラメータを設定せずに barbequeue
というキューを作成した場合は、次の関数を呼び出して同時タスクの最大数を更新できます。
gcloud tasks queues update barbequeue \
--max-concurrent-dispatches=20
Describe
のキュー:
gcloud tasks queues describe barbequeue
出力は次のようになります。
name: projects/[PROJECT_ID]/locations/[LOCATION_ID]/queues/barbequeue
rateLimits:
maxBurstSize: 100
maxConcurrentDispatches: 20
maxDispatchesPerSecond: 500.0
retryConfig:
maxAttempts: 100
maxBackoff: 3600s
maxDoublings: 16
minBackoff: 0.100s
state: RUNNING
gcloud
コマンドと queue.yaml
を使用した処理速度の定義
キュー処理速度を定義する Cloud Tasks API の方法と、queue.yaml
ファイルのアップロードによる方法では、どちらもキューで同じ基盤メカニズムを使用するにもかかわらず、わずかな違いがあります。
どちらの場合も、トークン バケット アルゴリズムを使用して、タスクの実行レートが制御されます。名前付きの各キューには、トークンを保持するバケットがあります。
アプリケーションで 1 つのタスクが実行されるたびに、バケットからトークンが 1 つ削除されます。キューのバケットのトークンがなくなるまでタスクの処理を続けます。キューに指定した max_dispatches_per_second
レートに基づいて、システムからバケットに新しいトークンが続けて補充されます。処理対象のタスクがキューにあって、そのキューのバケットにトークンがある場合、システムはトークンと同じ数のタスクを、設定した max_concurrent_dispatches
値まで、同時に処理します。
負荷が不均等になると、バケット内のトークンの数が大幅に増加し、リクエストの急増に伴い、処理が急増する場合があります。この場合、キューの実際のディスパッチ レートが max_dispatches_per_second
レートを超え、システム リソースが消費され、ユーザー リクエストの処理とリソースの競合が発生する可能性があります。ダウンストリーム サービスの比較的遅い SLA に基づいてディスパッチ レートを管理するキューを使用している場合、HTTP 429
(リクエストが多すぎます)や 503
(サービスを利用できません)などのエラーが発生します。
Cloud Tasks API メソッドを使用する場合、キューのディスパッチ レートを定義する 2 つのフィールドがあります。
max_dispatches_per_second
max_concurrent_dispatches
上記の例のように、3 つ目のフィールド max_burst_size
は、max_dispatches_per_second
に設定した値に基づいてシステムによって計算されます。
queue.yaml
メソッドを使用する場合は、3 つの要素すべてを設定できます。
max_concurrent_requests
(max_concurrent_dispatches
と同等)rate
(max_dispatches_per_second
と同等)bucket_size
(max_burst_size
と同等)
ほとんどの場合、Cloud Tasks API メソッドを使用してシステムに max_burst_size
を設定させると、リクエストのバーストをとても効率的に管理できます。ただし、特に目標のレートが比較的低い場合には、queue.yaml
メソッドを使用して手動で bucket_size
を小さい値に設定するか、Cloud Tasks API で max_concurrent_dispatches
を小さい値に設定すると、より細かく制御できます。
再試行パラメータの設定
タスクが正常に完了しない場合、Cloud Tasks は設定されたパラメータに従って、指数バックオフによりタスクを再試行します。キュー内で失敗したタスクを再試行する最大回数を指定したり、再試行の制限時間を設定したり、試行間隔を制御したりできます。
gcloud tasks queues update [QUEUE_ID] \
--max-attempts=[MAX_ATTEMPTS] \
--min-backoff=[MIN_INTERVAL] \
--max-backoff=[MAX_INTERVAL] \
--max-doublings=[MAX_DOUBLINGS] \
--max-retry-duration=[MAX_RETRY_DURATION]
ここで
MAX_ATTEMPTS
は、最初の試行を含むタスクの最大試行回数です。このフラグをunlimited
に設定すると、再試行が無制限に許可されます。MIN_INTERVAL
は、再試行の間に待機する最小時間です。 値は「s」で終わる文字列でなければなりません(5s
など)。MAX_INTERVAL
は、再試行の間に待機する最大時間です。 値は「s」で終わる文字列でなければなりません(5s
など)。MAX_DOUBLINGS
は、失敗したタスクの再試行間隔が一定になるまで間隔を倍増する最大回数です。MAX_RETRY_DURATION
は、失敗したタスクを再試行する最大時間で、タスクが最初に試行された時点から測定されます。値は「s」で終わる文字列でなければなりません(5s
など)。
キューが正常に構成されたことを確認します。
gcloud tasks queues describe [QUEUE_ID]
次のステップ
- HTTP ターゲット タスクの作成方法を学習する。
- App Engine タスクの作成方法を学習する。
- Cloud Logging の設定を学習する。
- RPC API リファレンスでキュー管理の詳細を学習する。
- REST API リファレンスでキュー管理の詳細を学習する。
- Cloud Tasks
gcloud
コマンドの一覧を確認する。