技術発表会(Google App Engine) 作成日:2011/03/18 ============================================================ <技術発表会の流れ> 1.今回の説明の範囲 2.クラウドサービスとは 3.Bigtableとは 4.参考ソース 5.GAEならではの注意点 ============================================================ 1.説明の範囲  今回の技術発表会の説明範囲は、クラウドサービス(Google App Engine)の概要。  特にBigtableとデータストアについて説明いたします。 2.クラウドサービスとは 2−1 クラウドサービスの特徴 クラウドの本質としては、コスト削減を推し進めるため安いHardwareを組み合わせてシステムを構築し、 システムをスケールアウトすることでシステム全体の処理性能を向上させる手法である。 ネットワークを介してクライアントがシステムの機能を使用できるサービスというところでは 似たようなサービスとしてASP(Application Service Provider)やSaaS(Software as a Service)というものがある。 これらの共通点は、エンドユーザ側にとって大きな差がない。 ASP ユーザ毎にシステム環境を構築され、サーバやDBの運用、保守、アプリケーションのバージョンアップをASP事業者が担う。 月ごとに利用料金を支払う月額固定を採用。 「シングルテナント・アーキテクチャ」 SaaS 複数のユーザがシステム環境を共有しており、サーバ、DBなどのリソースを共有することでスケールメリットを活かせる。 ユーザ数に応じて課金されることが多い。 「マルチテナント・アーキテクチャ」 クラウドサービス 概念的にはSaaSもクラウドの一部であるが、クラウドではストレージやサーバ、プラットフォームといった領域まで サービスとして提供する。 IaaS、PaaS、SaaSなど 2−2 他のクラウドサービスとの比較 クラウドサービスはさまざまあり、代表的なものにGoogle(Google App Engine)、Amazon(Amazon EC2/S3)、Microsoft(Windows Azure)がある。 Amazon EC2/S3 メリット :さまざまなOS(Ubuntu/CentOS/RHEL/Windows Server)、言語(Java/PHP/Ruby)、RDB(MySQL、Oracle)が利用可能。 デメリット :フェール・オーバなどのHA(高可用性)機能、監視機能が足りない、OS自体は自己管理(パッチ適用やバックアップなど) →大規模開発に向いている Windows Azure メリット :Visual StudioやRDB(SQL Server)が利用可能。 デメリット :Windows Vista + Visual Studio 2008が開発環境として必要。利用申請などが半月ほどかかる為、即時利用ができない →大規模開発に向いている。 Google App Engine メリット :上限はあるが無料で利用することができる。Eclipse上からデプロイできる為、簡単にサービスが展開できる。 デメリット :使用できる言語がJava、Pythonのみ。Javaも機能制限がある。RDBが利用できずNo SQLであるBigtableが利用可能。 →システム移行がしにくい。中規模開発に向いている。 本プレゼンでは簡単に利用できるGoogle App Engine for Java(以降、GAEJ)のうち、Bigtableとデータストアについて説明いたします。 GAEは言語/システムなどの制限はあるが、通常のJava Servetと比べて大きな違いはない為、Bigtableを理解することで使いこなす事が可能である。 3.Bigtableとは 3−1 Bigtalbeの特徴 キーと値のペアでデータを格納するのが特徴で分散キーバリューストア(KVS)といわれる。 <特徴として> ・巨大なExcelシートのような構造体を採用している。 ・キー値に相当するバリュー値はMap型(みたいなイメージで)シリアライズ化されて保存される。 ・キーの範囲で自動的にタブレットという単位で分割され、それぞれのサーバで管理される。 ・ペタバイト単位のデータを1000台ほどのサーバ群に分散格納し、高速な読み書きを行う。 ・SQLに制限がある。「5.GAEJならではの注意点」を参照。 ・Bigtableでは1行に対してしかトランザクションを保証していない。 3−2 データストアとは アプリケーションからBigtableに対してアクセスするのにデータストアという層を介してアクセスすることで、Bigtableに足りない機能を補っている。 <データストア> ・JDO(Java Data Objects) …とにかく公式ドキュメントで資料が豊富。JCP(Java Community Process)という標準の仕様として定義。 ・JPA(Java Persistence API) …JCP(Java Community Process)という標準の仕様として定義。 ・LLAPI(Low Level API) …データストア本来の機能を使うことに特化している為、全APIの中でもっとも高速。 <データストアの特徴> ・インデックスが作成できない条件でのクエリは実行不可能。(インデックスからキーを探し、キーからシリアライズ化されたデータを取るため)  - 条件はandのみ  - inequality filter(>, <, >=, <=)は、1つのカラムのみ指定可能  - ソート指定があり、条件にinequality filterを指定したカラムが存在する場合、ソートの最初に指定が必要 3−3 データストアのインデックス 大きくビルドインインデックスとカスタムインデックスがある。 ・ビルドインインデックス…自動的に作成されるインデックスで、カインドインデックスやシングルプロパティインデックスがある。 ・カスタムインデックス …明示的に指定する必要があるが、コンポジットインデックスや祖先キーを使うインデックスがある。※自動生成も可能。 用語)カインド=テーブル、エンティティ=レコード、プロパティ=カラムを指す。 4.参考ソース JDOを使ったサンプルソース。「別紙:JDOを使った登録、参照.txt」を参照。 5.GAEJならではの注意点 言語の制限 ・Threadがプログラム上で使えない。  →非同期処理しないように設計する。 ・Socketが使えない。  →外部に対してHttpリクエストを要求できるAPIがある。 システムの制限 ・ファイルシステムに書き込めない。  →BigtableへBlob型として保存する ・特定のリソースを使用するまで無料  →課金することで特定のリソースを増やせる。  →上限を超えるとHTTPレスポンスコード403を返却。 ・30秒以内にレスポンスを返す必要がある。  →時間がかかる処理をTaskQueueで非同期処理できる。 ・すべての操作について一定の確率でタイムアウトが発生する可能性がある。  →リトライ処理をアプリケーションに組み込む。 Bigtableの制限 ・Bigtableに集合関数がない  →エンティティ更新時に集計操作を行い保存する。 ・JOINや副問合せなど複雑なSQL処理ができない。 ・インデックス作成できない条件でクエリ実行ができない。 ・1エンティティ(RDBの1行に相当)の保存が1MBまで ・1リクエストの更新が500件、参照が1000件まで 以上。