うな(。・ε・。)

Android, iOS, AppEngine まわりのめもめも

App Engine + Java 覚書

  1. Spring 載せない方が良い
    • DI が遅いのでスピンアップが死ぬほど遅くなる
    • Spring MVC だけにして、Component Scan は使わず xml 直接 Bean を指定する
    • たいてい Slim3 Controller だけで済むし、APIGoogle Cloud Endpoints を使った方が良い
  2. jsp でなく Freemarker 等を使う
    • jsp を使うと Jasper が初期化に必要になり、スピンアップが遅くなります (5,600 ms ほど)
    • Freemarker などを使うようにすると、Jasper が必要ありませんのでスピンアップが遅くなりません
    • Frontend は Go や Python など軽いランタイムで動かすのも手です。API を叩いてデータを取ってくるか、または Remote API を使って直に Datastore を触る事を検討します。
  3. DatastoreCallbacks を効果的に使う
  4. TaskQueue を効果的に使う
    • とんでもなく便利です。
    • 本当に軽い処理で、URL Handler を切るまでもなければ、DeferredTask が使えます。クラスを書いて、Queue に突っ込むだけで処理が出来る便利クラスです
  5. Upload 処理は BlobstoreService.createUploadUrl() を使う
    • Google フロントエンドでファイルの保存処理を肩代わりしてくれるイケメンサービスです
    • アップロード処理はファイルが大きいとメモリが辛い事になりますが、このメソッドを使うととても省メモリです
  6. Request と Response をログに吐き出しておく
    • 標準では Request と Response の payload がログに吐き出されないので、普通に困ります。
    • ServletFilter などを使い、ログを吐き出しておくと便利です。
    • ただし Java では、ServletFilter で Request や Response を読もうとすると面倒があります。
    • コードを整理したら GitHub にでも置きます。
  7. Max Idle Instances は 1 にしておく
    • これの意味合いは「遊んでてもいいインスタンスの最大数」です。「全台数」ではありません。従って、非常に少ない数に設定しても通常パフォーマンスが落ちる事はありません。
    • この数値は標準では Auto ですが、非常に富豪的な設定です。リクエストに応答しているわけでもないインスタンスが乱造されます。また、これらは長い時間生き続けます。
    • 1 にすると最低限他のインスタンスからあふれた新しいリクエストにも対応出来るし、無駄なたくさんのインスタンスも出来ないのでちょうど良いです。
  8. Instance Size を上げておく
    • 標準の 128MB Instance では JVM と必要なクラスをロードするだけで割とかつかつです。
    • 基本的に Instance Size は大きければ大きいほど効率よくリクエストが捌けます。

さんこう