Task Queue戦記
とても遅かった以前の実装をTask Queueを使って書き換えることができました。感想をまとめると、
- Task Queueはすばらしい。30分かかってた処理が3分で終わるようになった(前の実装がヘボいのではという疑惑はさておき)
- 処理を複数のタスクに分割して並列処理する(map)は簡単だけど、memcacheを使ってその結果をまとめる(reduce)のは面倒
- reduce不要な用途(一括削除とか)や、reduceが簡単な場合(数の集計とか)、あとmemcache使わずにDatastoreに集約する使い方なら、そんなに苦労しないだろう
- memcacheを介してデータの配布や収集をするとき、とくに収集時の排他を書く必要あり(こういうバグりそうな/バグを再現できなさそうなコードは書きたくない)
- MemcacheService#incrementを使ってスピンロックを実装した
- memcacheはいつデータがなくなるか分からないので、その対処も必要
- 同じタスクがエラーやその他の理由で何度も実行されうるので、idempotentに書く必要あり
- すべての処理がきちんと終了しているか確認する手段も必要
- 収集した大量のデータをクライアントに分割ダウンロードするのも大変だ(エラー時はその部分だけ再度ダウンロードとか)
- やっぱりMapReduceの方が(並列プログラミング/デバッグの苦労やリスクがあまりなさげで)偉大だ
- しかし1 task/s程度しか捌けないぞ(捌け方にムラがあるみたい)。アプリ全体で10 tasks/sという制限もスケーラビリティ低くね?
- 100K tasks/dayという制限もやっぱり少ない。テストでも10kくらい使った。
という感じでした。以下はその過程でtwitterにつぶやいた内容のまとめです(新着順)。途中デバッグのつらさに一時戦意を喪失しているのが見て取れます。
kazunori_279 | #appengine #taskqueue のキューの削除のしかたがわからんから、Console上にはキューのしかばねが並んでいる | 2009/09/09(水) 17:36:48 |
kazunori_279 | #appengine #taskqueue どうやら動いた。前実装より10倍くらい速くなった(30分→3分) | 2009/09/09(水) 16:56:27 |
kazunori_279 | #appengine #taskqueue なんか動いてるな。すげえ速いぞ。。これは夢か? | 2009/09/09(水) 11:15:49 |
kazunori_279 | #appengine |
2009/09/09(水) 10:32:25 |
kazunori_279 | 人間が自由に並列処理しようなんておこがましいと思わんかね | 2009/09/08(火) 17:05:31 |
kazunori_279 | #appengine ああもう #taskqueue やめたい | 2009/09/08(火) 16:58:31 |
kazunori_279 | #appengine #taskqueue でもまあcronよりは断然速い。cronを1秒毎に実行してる感じ。 | 2009/09/08(火) 09:11:06 |
kazunori_279 | #appengine #taskqueue どう見ても1 task/sくらいしか捌けないんですけど。。 | 2009/09/08(火) 09:09:28 |
kazunori_279 | #appengine taskqueue のキューってどうやって削除できるんだ? queue.xmlから消しても残る | 2009/09/08(火) 07:16:55 |
kazunori_279 | #appengine taskqueue のキューのサイズが9000位になった。なにかとんでもない間違いをしているらしい。 | 2009/09/07(月) 21:30:11 |
kazunori_279 | #appengine taskqueue でreduceした結果をポーリングで取りに行く私の実装は正直しょぼい | 2009/09/07(月) 20:58:33 |
kazunori_279 | #appengine taskqueueがなんとか動いてきたぞ。やっぱMapReduceの方がラクそうだな。 | 2009/09/07(月) 20:45:09 |
kazunori_279 | #appengine |
2009/09/07(月) 15:39:03 |
kazunori_279 | #taskqueue でデータを1か所にreduceするとき、memcacheじゃ排他できないよな。。datastore使うしかないか | 2009/09/06(日) 13:43:57 |
kazunori_279 | #taskqueue さあてどうやってreduceしよう。。 | 2009/09/06(日) 13:20:51 |
9/10追記
今日は数tasks/s捌けてます。捌け方は変動するようです
9/11追記
100K tasks/day制限はGoogleさんに頼んでみたら1M tasks/dayに増やしてもらえた!rateは増やしてもらえなかった