データの一貫性を非同期処理で保つ

 非同期処理の工夫でKVSの性能を引き出したのは、ラクシーズの上田哲広氏(ITスペシャリスト)である。スポーツ系コミュニティーサイト「LaBOLA」をGAE上に構築したときに、性能の向上を図った。

 ポイントは「KVSで複数データを更新するときに、データの一貫性をどう維持するかだ」と上田氏は強調する。それがシステムの性能を大きく左右するのである。

 ラクシーズの上田氏が使ったGAEのBigtableを含め、PaaSが用意するKVSは、多くが限定的なトランザクション機能しか備えていない。単一データ(またはそのグループなど)は不整合なく更新できても、異なるテーブルのデータは一貫性を持って更新できない。一つのテーブルのデータを更新した後、アプリケーションが異常終了すると、もう一つのテーブルは更新されないままになる。

 上田氏が構築したLaBOLAでは、ブログサービスとして提供している日記に対して、コメントが記入されたときの処理が問題になった。データ保管用のBigtableには、コメント本文のデータとコメント数のデータを、テーブルを分けて保持している。そのため二つのデータの更新を一貫性を持って実行できない。コメント本文を記録した直後にアプリケーションが異常終了すると、コメント数が更新されないままになってしまう。

 データの一貫性を保つため、複数データを更新するトランザクション機能を、アプリケーション側で実装するという方法はあった。しかしそのような処理(2フェーズコミットに相当)を実装すると遅くなる。処理性能に悪影響を及ぼすということだ。

 そこで代わりに上田氏が考えたのは二つのデータをまとめて更新するのではなく、一方の更新を後回し(非同期処理)にすることだった。データの一貫性が一時的に崩れることは許容し、後回しにした更新処理が確実に実行されるようにする。こうすれば2フェーズコミットのような低速な処理が不要になる。

 そのための仕組みがGAEに用意されていた。「Task Queue」と呼ぶ機能である。Task Queueには非同期で実行する処理(タスクと呼ぶ)を登録でき、登録したタスクは正常終了するまで繰り返し実行される。上田氏はこの仕組みを使って、処理性能を低下させることなく、コメントが記入されたときの更新処理を実装した。

データをキャッシュして高速に応答

 米国大手のクラウドサービスを利用した開発現場では、ネットワーク遅延の問題に直面していた。今のところデータセンターが海外にあり、システムはそこで動作する。このため日本とデータをやり取りしたとき、通信速度が遅くなってしまう。この問題に対しては、キャッシュソフトが有効である。

 欧文印刷の田名辺健人氏(デジタルソリューション部 ソフトウェアエンジニア)は、既存システムをAWSに移行したときに、画面の応答時間が遅くなることで悩んだ。移行させたのは、従来オンプレミスで稼働させていたブログ製本サービス「MyBooks.jp」である。MyBooks.jpは、ユーザーがブログサイトに掲載した文章や写真を素材にして印刷イメージを作り、製本して提供するサービスだ。

図3●サイズが大きいデータをキャッシュしてレスポンスを向上させる
欧文印刷はブログ製本サービスの印刷イメージ編集機能において、ブログサービスから取り込んだ写真データをキャッシュして、編集画面のレスポンスを向上させた
[画像のクリックで拡大表示]

 応答時間が遅くなったのは、日本のブログサイトから文章と写真を取り込んで、印刷イメージを編集する画面だった。写真はデータサイズが大きいため、米国のAWS上のシステムまで転送するのに時間がかかる。多数の写真を一斉に取り込む場合、編集画面の応答時間は数十秒にもなった。しかもユーザーは好みの印刷イメージになるまで何度も画面を修正する傾向がある。

 そこで田名辺氏は、オープンソースのキャッシュソフト「Ehcache」をAWSの仮想マシンサービス「Elastic Computing Cloud(EC2)」で稼働させた(図3)。データサイズの大きい写真をキャッシュすることで、2回目以降のアクセスでは応答時間を約3秒以内にまで短縮できた。米国から日本(のWebブラウザー)へ送信する写真データはサムネール表示にするなどして、データサイズを抑えた。

この先は会員の登録が必要です。有料会員(月額プラン)は申し込み初月無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら