読者です 読者をやめる 読者になる 読者になる

お勉強

そもそもgoogleの技術について知らなきゃいかん、ということで、

 http://code.google.com/intl/ja/events/io/sessions.html

を元ねたにお勉強を始めます。jdoがどうとかいうよりは、bigtableの挙動のほうが重要そうなので。


敷居が低そうな、この辺から。
http://code.google.com/intl/ja/events/io/sessions/AppEngineNowJava.html

App Engine: Now Serving Java

app engineの特徴。クラウドのプラットフォーム。コンピューターのリソースはダイナミックに割り当てスケーラブルに。実際の使用に対してスケールさせてる。管理コンソールもついてて便利。


↑こんな感じ。

クライアントからapp enginにアクセスするときは、まずfront end にアクセス(httpをモニタリングすると確かに「Server: Google Frontend」といわれる)。front endからapp serverにアクセス(負荷分散装置経由)。app serverには複数のアプリが乗る。いくつかのAPI呼び出しは他サーバーと連携する。

  • app engine向きのアプリ

タイムアウト30秒の制限にかからず、長時間かかるバックグラウンド処理もせず、server pushを使用しなくて、thread,ioなどの各種制約事項に引っかからないもの。
 →結構厳しい。。

  • javaでできること

servlet 2.5が使える。session/jspは使える。内部的にはjetty/jasperを使ってるけど、jetty固有の設定はできない。

  • appengine-web.xmlにアプリの設定を書く

アプリのID・バージョンは必須。その他、staticなファイル、リソースファイル、システムプロパティの設定ssl/sessionについて設定可能。

  • サービス

jdo/jpa/jcacheなどのインターフェイスを使って標準化を意識している。一部はProprietaryなgoogleのもの。
メジャーリリース時には、apiの変更を伴えば、jarをアップデートして再度コンパイルしてgaeにあげる必要あり(厳しい。。。)。

  • ApiProxy

googleapiの呼び出しは(すべて?)ApiProxy経由。リクエストごとの情報をstore(cache?)するらしい。
googleapiではなく、独自の(サーバーの外の?)APIを呼び出したければApiProxyにdelegateを指定する。単体テストのときはApiProxyLocalFactoryを使えばよいらしい。
aop呼び出し的に、呼び出すapiの前後に処理を噛ませられる。パフォーマンス検証なんかで使えるらしい。

class ProfilingDelegate extends Delegate {
   Delegate parent;
   public ProfilingDelegate(Delegate parent) {
      this.parent = parent;
   }
   public byte makeSyncCall(Environment env, String pkg, String method, byte request) {
      long start = System.nanoTime();
      byte[] result = parent.makeSyncCall(env, pkg, method, request);
      log.log(INFO, pkg + “.” + method + “: “ + System.nanoTime() - start);
      return result;
   }
}

   ApiProxy.setDelegate(new ProfilingDelegate(ApiProxy.getDelegate()));

的な。

  • Sandboxing

必要な理由は、クラスタリングする、サーバーを壊させないようにするなど、サービスの質的を保つため。

Threadsはだめだけど、Async APIというのがcoming soon!!Java2Dはドライバに依存するので×。jniなんてもってのほかです。

reflectionは使えるけど制限があり、javaapiクラスについてpermissionの書き換えは不可。自分が作ったクラスなら書き換えてもいいらしい。classloaderもpermissionを書き換えなければ使えるらしい。

やりたい放題だとだめだし、ちょうどいいくらいなのでしょう。

  • DevAppServer

ほぼ本番相当で、Customized Jetty server。いくつかの本番使用不可apiは動いてしまうけど、ideを使っていればコンパイル時にチェックしてくれる(white list)。

  • デプロイ

違うドメインも使える?

  • ツール

コマンドライン、ant、ideからつかえるものがあり、デプロイ・開発サーバーの起動・コンパイル時のチェック・xml設定ファイルのバリデーションをやってくれる。

eclipseでもIntellijでも使えるらしい。

  • デモ

これまで紹介してきた機能をほとんどつかっているっぽい。27:50くらいからで、ソースも簡単に説明してます。

  • Coming Soon
    • Task queues
    • Full text search
    • Incoming e-mail
    • XMPP
    • Large file storage and retrieval
    • Datastore export tools →importもできるらしい