Backendsについて

2014年度版をこちらの新サイトで更新しています。

Google App EngineのBackendsとは

Backendsは常時起動するインスタンスを作る機能です。
タスクキューから呼ばれると制限時間がないので用途としては、非常に重い処理をまとめてする時などに使えます。

重い処理をするためだけあって、クラスを選ぶことができます。
(値段を見る限り、普通のレスポンスを返すインスタンスは一番安いB1を使ってるのだろうか)


新料金に移行後、これまで通り無料枠で収めたり、最低価格の$9で済ますには、このBackendsを活用する必要があるでしょう。
より詳しくは、公式ドキュメントを見てみてください。

Backendsを使えるようにする


backends.xml というファイルをappengine-web.xmlと同じWEB-INFフォルダーの中に作ります。
<backends>
  <backend name="small">
    <class>B1</class>
   <options>
     <dynamic>true</dynamic>
   </options>
  </backend>
</backends>

このbackendsの構成は、smallという任意の名前でB1という最低構成(128MB 600Mhz)で、dynamic(呼ばれると起動して数分後に終了:料金は15分分とるけど)で使います。

ただし、普通にDeployしてもAdminのBackends 画面が変わらないことがあります。(将来変わるかもしれませんが)

You have not created any backends for this application(backendsが設定されてないと出る)

その場合は、appcfgコマンドで更新します。
(appcfg.batはEclipseだとC:\eclipse3.5\plugins\com.google.appengine.eclipse.sdkbundle_1.*\appengine-java-sdk-1.*\bin にあります)

appcfg backends <Deployするフォルダー> Update


とします。(Eclipseだとプロジェクトファイル中のWARを指定ことになるでしょう)

Backendsが更新されると、こういう画面がBackendsメニューより見れます。ここから実際に動いてるinstanceを見たり、停止・Backendsそのもの削除したりします。

Backendsを呼び出す

backendsのURLはバックエンド名.アプリ名.appspot.comとなります。
ただし普通の設定ですと、ブラウザーからアクセスできません。(こんな費用がかかるのを、アクセスできても危険)

CronかTaskqueueで呼ぶことになります。30秒制限に引っかかりそうな場合は、Taskqueueから呼ぶことになるでしょう。

Taskqueueから呼ぶ

HeaderにHostを追加します。
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        Queue queue = QueueFactory.getDefaultQueue();
        queue.add(Builder.withUrl("/admin/loads").method(Method.GET).header("Host", BackendServiceFactory.getBackendService().getBackendAddress("small")));
   
        resp.setContentType("text/plain");
        resp.getWriter().println("called");
    }

Cronから呼ぶ

直接呼ぶと、30秒制限があるので、Taskqueueを呼び出すのを、Cronから叩くことになると思います。
どちらにしても、ダッシュボードの見た目が悪くないので、Backends側で呼ぶのがいいと思います。
この場合、crontabには、別のバージョンを呼び出す仕組みと同じTarget部分でBackendsを明示します。

<?xml version="1.0" encoding="UTF-8"?>
<cronentries> 
  <cron>
    <url>/admin/loads</url>
    <description>load images into memcache</description>
    <schedule>every 1 hours</schedule>
    <target>small</target> 
  </cron>
</cronentries>

ダッシュボード・ログを見る

左上のバージョンを選択する所より、Backendsを選ぶことができます。
選ぶと、選択したBackendsに関するダッシュボードやログが見ることができます。


ちなみに、backends.xmlを編集して古いのをなくしても、管理画面から削除しない限り、以前のbackendsのログも見れます。

低コストに抑えるには

DBへの操作などは、こちらのBackendsで行い、普通のインスタンスはメムキャッシュからデーター返すだけにするのがいいかもしれません。

$0.72の無料枠があり、これは最低クラスですと9時間分、ただし数秒の処理でも15分は課金されますので、1時間に1度、データーをメモリに移すぐらいはできそうです。
(ただメムキャッシュの生存時間は不明で、不安定要素高いけど)


Comments