2011-12-25

GAE、 Billing History に謎の Charge Sent

前回の投稿で、GAE/J の新料金体系への対策をつらつら書いた。できるだけ出費を抑えようと、涙ぐましい努力をしているときに、Billing History で見つけた文字列「Charge Sent $0.51」。なんだこりゃ。

GAE の Charge Sent

12/18 は $0.17 に加えて $0.51?と思って、振り返ってみると、毎週 Charge Sent がかかっているみたい。週の課金累計が $2.70 のときは $0.00、累計が $1.67 のときには $0.43。

どうやら、週の支払いが $2.10 を下回ったときだけ Charge Sent の額で $2.10 になるよう調整されているみたい。

週 $2.10 が最低支払額だとしたら、日に $0.30 は使わないともったいないなと思ったり。

うちは週 $2.10 を超えるか超えないかなのでそんなに気にならないけれど、日々 $0.05 とかでがんばっているところなんかは、Charge Sent で最後に $1.75 かかったりすると、ちょっと納得がいかないかも。

とか、考えながらごそごそ探してみると、GAE のメニュー「Billing Settings」の「Change Budget」に、普通に書いてあった。Minimum Spend というらしい。
* The Minimum spend subtotal is in support of our new pricing model. The new model requires that you spend at least $2.10/week. This subtotal indicates the value beyond your other spend that we need to add to your contract. To make the transition to the new model smoother we are beginning to account for this minimum when we authorize new budget changes. Please note that you will not be charged for the minimum spend until our new model takes effect.
多分ちゃんと読まずに課金設定したんだろうな…、と反省しきり。

ということで、課金している以上は経費週 $2.10 以下なら、出費を抑えるためのチューニングはそれ以上無理にしなくてもいいってことみたいです。

GAE/J 新 Quota と新料金体系への対策

もういろんなところで書き尽くされていると思うのだけれど、自分の記録用として。

対策結果

最初に、Japanese Bloggers Info の Billing History データ。



インスタンスをたくさん使っているものの、この当時はまだ旧 Quota で CPU Time も 6.50 に収まっていたので、課金はなし。で、最終的にこうなった。



結局課金になってはいるものの、日に 7.00 ドルかかるぞ(Frontend Instance Hour は現在の半額での計算)と宣言されていたのが 0.15 ドルになったのは上出来。


対策内容

<1> Idle Instances と、Pending Latency の設定。GAE の設定ページ「Application Settings」を開いて、スライダーを使って Idle Instances の Max Idle Instances を 1、Min Idle Instances を Auto に。Pending Latency の Min Pending Latency を 15、Max Pending Latency を Auto に設定する。これだけで、Frontend Instance Hour が 35 時間くらいに激減。

<2> TaskQueue の rate(実行頻度)を緩和。5/s だったものを 2/s に。Japanese Bloggers Info は、ブログチェックのため、5 分ごとに cron で 300 個以上の TaskQueue を呼ぶ仕組みになっているので、これだけのことでも意外と効果あり。Frontend Instance Hour も大体 30 時間以内に。

<3> Backends を利用。上記の TaskQueue が一日中動いているので、日に 6 時間は Backends で TaskQueue を動かすことに。どうしても 2 インスタンス動くところがあるので、6 時間は必ず超えるけれど、9 時間までは Backends の無料枠があるので、問題なし。というか、この残りの 3 時間で、2 インスタンス動いてしまう時間を吸収してもらう感じ。で、Frontend Instance Hour もほとんど 28 時間に収まるようになったというわけ。

<4> Memcache の積極利用。全ブログのリストや、各ブログのデータなど、5 分ごとで変化しない内容については、Memcache を利用。大幅なデータ取得の仕組みは改修せず、Entity にアクセスする前に Memcache を確認するようにしただけ。Memcache になければ、通常通り Entity からデータを得て、Memcache に入れておく。それだけで、Datastore Reads は 0.27 ドルから 0.08 ドルへ、約 3 分の 1 に。

で、現在に至る、と。どれもちょっとしたことなので、誰にでもできるはず。よかったら参考にしてください。

2011-12-03

Eclipse で GAE/J の SDK を 1.6.0 に更新したらエラーが

Eclipse の Google App Engine SDK をアップデートして、「ウィンドウ > 設定」から SDK を 1.6 に変更してみたところ、問題ビューに

The App Engine SDK JAR appengine-api-1.0-sdk-1.6.0.jar is missing in the WEB-INF/lib directory
The App Engine SDK JAR appengine-api-labs-1.6.0.jar is missing in the WEB-INF/lib directory
The App Engine SDK JAR appengine-jsr107cache-1.6.0.jar is missing in the WEB-INF/lib directory
The App Engine SDK JAR datanucleus-appengine-1.0.10.final.jar is missing in the WEB-INF/lib directory

というエラー(Google App Engine Problem)が。

プロジェクトのプロパティーから「Java のビルド・パス」を選択「順序およびエクスポート」タブの「App Engine SDK [App Engine (*) - 1.6.0]」をチェックして、「OK」押したら治りました。

…けど、更新のたびに、こんな設定していたっけ?

関連: