App Engine のリソース管理 - TaskQueue の設定

TaskQueue の設定を変更する

TaskQueue をデフォルトの設定で使っていると、いくつかまとめて Task を登録した時に並列処理が走り、Frontend Instance が複数立ち上がってしまいます。そこで、max_concurrent_requests を設定することで、同時に実行される Task の数を制限できます。下記の yaml ファイルでは、“default” Queue の max_concurrent_requests を 1 に設定しています。

queue.yaml

queue:
- name: default
  rate: 5/s
  max_concurrent_requests: 1

もちろん、この設定によって Task の実行が遅くなりますが、インスタンスの数は抑えられるはずです。

9/8 追記: また、Task を追加するときに X-AppEngine-FailFast ヘッダーを追加することで、Task の実行のために新しいインスタンスを生成することを抑制できますので、こちらもインスタンスの数を減らす助けになるでしょう。

Backends を利用する

また Backends を利用することで、インスタンスの数を完全にコントロールすると共に、Backends の無料クオータを効率的に使うことができます。その設定例です。

backends.yaml

backends:
- name: backend
  class: B1
  instances: 1
  options: dynamic

queue.yaml

queue:
- name: default
  rate: 5/s
  target: backend

今回の queue.yaml では max_concurrent_requests の設定は外しましたが、backends の方で instances が 1 に設定されているので、インスタンスは1つしか立ち上がりません。また、この方法だと backends の無料クオータを利用することができます。

時間によって Task を積む queue を変える

これらの応用として、時間によって Task を積む queue を変更すると、例えば夜間のみ Backends で Task を実行し、昼間は Frontend instance で Task を実行するなどのことが結構簡単にできます。

もし TaskQueue が原因で Frontend Instance の数が増えてしまうという場合は、これらの設定のうちどれかを使用してみてください。

Happy tuning :)

This entry was posted on Wednesday, 07 September, 2011.

Tags: ,