Month: September 2011

Google App Engine新料金体系でも無料枠で使えそう

 - by Don

先週やや悲観的な感じでGAEの新料金体系と対策を調べていたのですが、自作のアプリはパフォーマンスの設定だけではどうにもならないので、ソースコードの最適化を進めていました。そして今日ようやく$0に抑えられたので実施した対策などを記録しておきます。

Before

SiReFaSoは先週まではこんな状態でした。

before tuning sirefaso

before tuning sirefaso

Instance時間だけでなくDatastoreの読み書きも無料枠を超えています。

After

現在はこんな状態。

after tuning sirefaso

after tuning sirefaso

Frontend Instance Hoursの無料枠は24IHから28IHまで引き上げられるそうなので、余裕で収まっています。Datastore Writesも冗長な箇所が相当あったのでかなり削れましたがDatastore Readsは厳しいですね。ギリギリすぎるので運用面でもう少し節約を目指さないといけなさそうです。

実施した対策

チューニング

各所で勧められている通り、Application Settingsの管理画面でMax Idle Instancesを1に、Min Pending Latencyを15sに設定します。

performance setting

performance setting

ちょっとしたアプリであればこれだけでインスタンス時間は28IH内に抑えることが可能だと思います(SoSiReMiMiDoLaSoはこれだけで解決しました)。

Backendsの利用

スケジュールされた重いタスクを実行する場合はBackendを利用するとお得です。Frontend Instance Hoursの28IHとは別にBackend Instance Hoursが9IH分、無料で利用できます。

Backendのインスタンス数は完全にコントロールできますが、一度立ち上がると15分程度立ち上がりっぱなしになります。1分程度で終わるようなジョブも15分無駄に起動してしまうのでもったいないですが、一時間ごとの実行であれば24回x15分=6時間程度なので9時間以内に余裕で収まります。

instance graph

instance graph

Pythonでの設定はこちらを参考にしました。→App Engine のリソース管理 – TaskQueue の設定

追記:こちらの記事がめっちゃ詳しい!→GAE/PでのBackendsの使い方

Backendの利用にはappcfgからの初期設定が必要ですが、Kay-Frameworkのmanage.pyを通すとうまくいかないのでappcfg.pyから直接叩きます。

$ python appcfg.py backends <dir> update

ソースの書き直し

Datastoreの読み書きはもう自分でなんとか工夫するしかないですね。memcacheガンガン使っても1時間ごとにクリアしてるのでそのあたりをどうにかしないといけなさそうです。クロール間隔をもう少し空けようかな。

ということで(運用面で節約を強いられながらも)もうしばらく続けていける見通しがつきました。

Google App Engineの新料金体系を調べてみた

 - by Don

料金体系の変更

GAE界隈はこの話題でもちきりですね。

GAE価格改訂(予定)で俺爆死(予定)、おまいらどーよ? | さくらたんどっとびーず

うちがGAEで開発しているアプリはSiReFaSoSoSiReMiついっとゅうとかきょうの伺かとかTwitter Bot多数(@ukatter 等)…ということで、いずれも無料枠で使わせて頂いていたのですが、インスタンス時間による課金方式へと切り替わった場合、11月以降は料金が発生する見込みです。

新料金体系で予想される料金の確認

自分のApp Engineアプリケーションの新旧料金体系を確認してみよう – えいのうにっき

今のままでいくとうちの場合ざっとこんな感じですね。

SiReFaSo
$40/month
SoSiReMi
$10/month
MiDoLaSo
$25/month

今まではギリギリ無料枠に収まっていましたが、厳しいですね…。収益出してるわけでもないアプリに毎月これだけ払うという選択肢は無いです。

SiReFaSoとMiDoLaSoは最悪廃止するにしてもSoSiReMiは…他のゴーストマスタ様のNARをお預かりしている以上簡単に廃止するわけにはいかないです。

チューニング

焼け石に水かどうか、とりあえず試してみたいこと。

Google App Engine 正式版での新価格改定後にも無料枠に抑えるには – Javaについて

SoSiReMiはその性質上、SiReFaSoなどと違ってかなりアクセスが少ないので、適切なチューニングを施せば無料枠内に抑えられないかと考えています。とりあえずインスタンス数を極力抑えた設定にして、足りない部分はソースコードを書き換えて最適化を目指す方向でいきます。

SiReFaSoとMiDoLaSoは…結構アクセスがあって廃止もやむないと考えています。他所のクラウドサービスへの移転を考えていますが、GAEアプリは独自技術が多すぎて移植は困難なので、一から書き直しですね。少なくとも11月までに間にあうものではないと思っています。現状の運用およびソースコードの最適化と平行して、そちらも進めていこうと思います。

正式に廃止を決断した際は、一ヶ月前くらいまでにはお知らせを掲載するつもりです。

SSPでネットワーク更新に対応する方法

 - by Don

今時のゴーストマスタさんはどうやっているのでしょうね。「私はこんな便利な方法知ってるよ!」って方はコメント頂けると嬉しいです。

ベースウェアでupdates2.dau作成

まずは基本から。

通常はこの方法でネットワーク更新に対応できますが、updates2.dauを作成して、更新したファイルだけをアップロードして…という煩雑な作業を毎回行うのは大変です。

ただ、教養として原理を理解しておくのは後々きっと役に立ちます。

そだて

updates2.dauの作成や更新されたファイルのみを検出してFTPでアップロードする一連の作業を自動化するツール。

ゴースト1体ごとに必要で、ゴーストディレクトリ内に配置する必要があることから、FTPのパスワードが設定されたままNARに含まれて配布されてしまう事故が時々あるようです。

GDM(ゴースト配布系自動化システム)

これはセキュリティ上の理由により配布終了してしまいましたが、とても優れたネットワーク更新支援ツールでした。

複数のゴーストの情報を登録でき、一括でアップロードできます。ゴーストフォルダ内に設置する必要もないので、安全にNARを作成できます。これに取って代わるツールは今のところ無いのではないでしょうか…。

SoSiReMi

これはアップローダーであって更新支援ツールでは無いですが、宣伝も兼ねて。

実はちゃんと仕組みを解説したことがなかったので、簡単に内部でやっていることを書いてみます。

SoSiReMiにNARがアップロードされると、ZIP展開して中身を調べ、必要なファイルが欠けていないかチェックします。descript.txtにhomeurlを書き足します。updates2.dauを作成します。展開されたファイル一つ一つをディレクトリの通りに配置して保存します。最後にNARを再パックして保存します。

descript.txtのhomeurlをチェックするベースウェアはSSPだけのようなのでSSP専用となってしまいますが、これでネットワーク更新に自動で対応されることになります。

…で、今後新しくゴーストを作成される方には何をオススメすればいいんでしょうね。

未だにGDM使ってる身としては代わりとなるアプリが必要だなーとは思うのですが…。

SSPのインストールに関する実験

 - by Don

通常のNARの構成

emily4.nar
├─balloon
├─ghost
│  └─master
└─shell
    └─master

すべてのベースウェアで正常にインストールされる。

ghost
└─emily4
    ├─ghost
    │  └─master
    └─shell
        └─master

一段深い構成

フォルダを右クリックでzipにしたりするとこうなる。

emily4.zip
└─emily4
    ├─balloon
    ├─ghost
    │  └─master
    └─shell
        └─master

SSPでのみインストール可能。materiaではインストールできない。

SSPのghostフォルダ内に正常にインストールされる。

ghost
└─emily4
    ├─ghost
    │  └─master
    └─shell
        └─master

2つあるとどうなる

2個並べてみた。

double.zip
├─emily4
│  ├─balloon
│  ├─ghost
│  │  └─master
│  └─shell
│      └─master
└─mobilemaster
    ├─balloon
    ├─ghost
    │  └─master
    └─shell
        └─master

SSPでのみインストール可能。materiaではインストールできない。

SSPのghostフォルダ内にemily4だけが正常にインストールされる。mobilemasterはどこかへ消えた。

ghost
└─emily4
    ├─ghost
    │  └─master
    └─shell
        └─master

ルートにinstall.txtを置いてみる

directoryはmobilemasterにしてみた。

mix.zip
├─emily4
│  ├─balloon
│  ├─ghost
│  │  └─master
│  └─shell
│      └─master
├─mobilemaster
│  ├─balloon
│  ├─ghost
│  │  └─master
│  └─shell
│      └─master
└─install.txt

SSPでのみインストール可能。install.txtに忠実に従う。もちろんghostとして起動はできない。

ghost
└─mobilemaster
    ├─emily4
    │  ├─ghost
    │  │  └─master
    │  └─shell
    │      └─master
    └─mobilemaster
        ├─ghost
        │  └─master
        └─shell
            └─master

SSPは最初に見つけたinstall.txtに従って展開するだけのようだ。