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



このままいくと新価格に改定後、Google App Engineを使って無料でサイトを立ち上げる方法などを見て、立ち上げたサイトが1日たった数時間で無料枠オーバーで止まることになります。



私の無料枠内で運用テストしてるアプリですと こういう感じになりました。Instanceは24が一日当たりの無料枠です。
  使用量  1日当たりの新料金(初期) Max Idle Instanceを1に設定後
 アプリA(CMS)CPU 0.12 転送 0.01Gb Instance 26.76  $0.12 $0 解決
 アプリB(RSS表示)CPU 0.10 転送 0.14Gb Instance 70.70  $1.87 $0 解決
 アプリC(キャッシュから画像配信)CPU 0.08 転送 0.35Gb Instance 54.95  $1.24 $0 解決
 アプリD(キャッシュから画像配信)CPU 1.34 転送 0.55Gb Instance 131.86  $4.32 現在、Java版に書き換え中

インスタンスをコストを最優先に設定する

まずは、この設定にすればアクセス数が少なく現在無料枠で収まるなら、どうにかなるでしょう。
App EngineのサイトからAdministrationのApplication Settingを選択して、真ん中のPerfomanceのMax Idle InstancesをAutoから1にMin Pending LatencyをAutoから15sとします。

Max Idle InstanceがAutoですと、アクセス数がたいしてなくても常に予備のインスタンスが起動していたり、アクセス数に合わせていくらでも増えるので高くなります。
Min Pending LatencyがAutoですと、下手すると10ms以上ユーザーを待たせないためだけに、余計なInstanceが起動してしまいます。

これらを一番遅い設定にすることで、コストを抑えることができるでしょう。

これでもQuotaによる停止の可能性が避けれないのでは?
コスト優先でもQuotaによる停止の可能性は避けれない
そこそこのアクセスがあると、だいたい1日中、1インスタンスが起動していますし、ピーク時に余計なインスタンスが起動することがあります。
(一瞬でも起動すると最低15分のインスタンスコストになります。)
1日当たりの、無料枠は1インスタンスが24時間分ですので、余計なのが立ち上がった分の数十分から1時間の停止の可能性は残ります。
ですので、ユーザーにサービスとして提供するのは困難が生じると思います。


上記の問題は9.9に無料枠に4時間追加で解決しました。

今のInstanceで十分さばけるのに、余計なIdel Instanceに料金かかるのは辛い(有料版だと常時インスタンスが立ち上がるので、余計なのは立ち上がりにくいはずです)

FAQによるとMax Idle Instancesを超えたのは課金はされないとありますが、あくまでIdle Instanceなので、最悪 1 Activeと1 Idleの可能性はありそうです。この辺は請求書を見守りたいです。
 
Max Idle Instances: この設定値を減らせば、アイドル状態のインスタンスが減るので、コストを下げることができるでしょう。
また、それを超えた分のアイドル状態インスタンスに関しては課金をしません。つまりこの設定値はスケジューラーに対する提案ですが、スケジューラーがこれを無視したばあいには、超過分のインスタンスに対する課金はしません。
例えば、Max Idle Instances の数を 5 に設定しているにも関わらず、スケジューラーが 16 のインスタンスをしばらくそのままにしていたならば、5 つのインスタンスにのみ課金されることになります。


コスト最優先の問題点

パフォーマンスの悪さ
極端な話、アクセス集中時に、これまでの数倍返すまで時間かかるので遅く感じるでしょう。
といってもこれまでが速すぎたので並のサーバーになるぐらいです。

Javaのスレッドセーフ化

Javaの場合、オプションでマルチスレッド化すれば、少ないインスタンス数のままパフォーマンスをかなり改善できます。
ただし、そのアプリがスレッドセーフで書かれていないといけません。

pythonは12月頃できろようになるみたいです。

Backendsを最大活用

重い処理などはすべてBackendsを活用しましょう。せっかく1日 $0.72分もありますので

taskquesが大量のインスタンスを作り出している場合

呼び出し数を制限したり、Backendsを使うといいでしょう。

他にコストを抑える方法

より詳しくは、公式の翻訳記事など見てみてください。

またデーターベースのSmall Datastore Operations:でコストが掛かりすぎる場合、Indexを減らすなどで改善できるみたいです。
あとは、JSONをパースしたりする場合、そのライブラリーの性能が影響することもあるようです。



Comments