SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Google App Engine for Javaを使ってみよう!

Google Developer Day 2009で学んだ
Java版Google App Engineの勘所

「Javaで動かすGoogle App Engine」セッションレポート

Google App Engineのアーキテクチャ

App Engineアーキテクチャ(写真中の人物は夷藤勇人氏)
(写真中の人物は夷藤勇人氏)

 HTTPリクエストが複数のApp Engine Front Endに割り振られ、さらにApp Engine Front Endがロードバランサとなる2段階の負荷分散が行われ、リクエストをApp Serverに割り当てるようになっているのが、スライドから見て取れます。

Google App Engineの用途

Google App Engineの使用
  • Webアプリケーションを想定
    • HTTPリクエストは30秒以内
    • 長時間走るバックグラウンドプロセスはなし
    • サーバからのプッシュはなし
  • サンドボックス内での動作
    • ユーザーによるスレッド操作は禁止
    • ファイルシステムは読み取り専用

 以上のように、Google App Engineのさまざまな制限が説明されましたが、その目的は「スケールをしやすくするための制限」のように見えます。 

制限
制限内容 著者コメント
HTTPリクエストは30秒以内 暴走対策と考えられる。初期の頃は8秒に制限されていたので、それと比べるとかなりマシになりました。
サーバからのプッシュはできない 上記制限により、長時間のコネクション維持ができない。
スレッドの作成はできない HTTPリクエストの30秒制限を実質、回避できてしまうためスケールが難しくなるためと考えられる。
ファイルシステムは読み取り専用 デプロイ用のディレクトリに設置することで、静的ファイルを設置することはできるが、動的ファイルの設置はできない。動的ファイルが発生するとスケールしにくくなるため。

サーブレットの利用

サーブレット
  • サーブレットAPI 2.5互換のコンテナを提供
    • HTTP Session利用可能
    • JSP利用可能
  • JettyとJasperで実装
    • ネットワーク部分はGoogleのHTTPスタック
    • Jetty特有の機能は利用不可
      • jetty-web.xml
      • continuations(継続)
    • 将来、内部実装は変更するかも

 現時点で、サーブレットコンテナとしてJettyを選択しているが、将来に渡ってJettyを採用しつづける訳ではないことを強調していました。

アプリケーション設定

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application>application-id</application>
    <version>1</version>
    <static-files>
        <include path="/**.png"/>
        <exclude path="/data/**.png"/>
    </static-files>
    <ssl-enabled>true</ssl-enabled>
    <sessions-enabled>true</sessions-enabled>
</appengine-web-app>

 このXMLでは、ssl-enabledやsessions-enabledがtrueになっているが、両方ともサーバに負荷のかかる設定なので、本当に必要なとき以外は設定しないで欲しいとのことです。

 SSLが必要になる時と言えば、まず思い浮かぶのがログイン時のパスワード送信時だと思いますが、Google App Engineでは認証サービスにGoogle Accountsを利用できるので、SSL設定が必要なシーンというのは限られてくると思います。

 また、利用する静的ファイルはstatic-filesを利用して、明示的に指定した方が良いとのことです。

各サービスの対応

ソフトウェア・サービス
サービス Java標準API バックエンドGoogleインフラ
Authentication Servlet API Google Accounts
Datastore JPA, JDO Bigtable
Caching javax.cache memcacheg
E-mail javax.mail Gmail gateway
URL Fetch URLConnection Caching HTTP proxy

サービスの階層構造

サービス・インフラストラクチャ(写真中の人物は夷藤勇人氏)

 最下層のレイヤーにGoogleのインフラに直接アクセスする実装があり、その上に言語非依存インターフェースがあります。この言語非依存インターフェースレイヤーを用意することによって、Python版とJava版が動くようになっているのだとすると、他の言語への対応も期待できるかもしれません。

次のページ
API呼び出しの仕組み

この記事は参考になりましたか?

Google App Engine for Javaを使ってみよう!連載記事一覧

もっと読む

この記事の著者

山下 大介(ヤマシタ ダイスケ)

  京都大学を中心とした、産官学共同プロジェクトのSOBAプロジェクトに参加後、同プロジェクトで開発したP2P配信によるVoIP技術を2005年に商業化。オープンソース、VoIP、P2P、クラウドコンピューティングに精通。趣味はGoogleの追っかけ。現在は、株式会社SOBAプロジェクト取締役。ブログ:『~ ミネルヴァの梟は黄昏とともに飛び始める ~』所属:株式会社SOBAプロジェクトGoogle Developer Day 2008サポーター, 2009サポーターGoogle App Engine API Expert

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4050 2009/06/16 16:30

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー