2010年9月にはてなの最高技術責任者(CTO)に就任した田中慎司です。はてなの技術全般を見ていく仕事をしています。現在の筆者が注目する技術の一つがクラウドで、はてなのサービスでも利用を始めています。クラウドの技術というと、アプリケーションの実行環境が取り上げられがちです。筆者も2010年3月にセミナーで講演したり、クラウドについてのエントリーを書いたりしました。今回は、クラウドの利用で見逃せないもう一つの部分、クラウドのストレージサービスを、クラウドの利用を検討するエンジニア向けに解説します。
■ クラウドのストレージサービスとは
はてなのようなWebサービスを実現するには、ざっくりいって2種類の環境を用意する必要があります。一つは、サービスを動かすためのアプリケーションを実行するサーバ環境で、もう一つがユーザからアップロードされる多数のコンテンツを保存するストレージ環境です。Microsoft Windows Azureや、Amazon AWS、Google App Engineに代表される各社のクラウドサービスは、時間単位や通信量で従量課金されるアプリケーション実行用のサーバとしてのイメージが強いと思います。しかしWebサービスを提供するにはサーバだけではなく、ストレージとしての機能も欠かせません。この記事では、後者のストレージ環境となるクラウドサービスのもう一つの柱、ストレージサービスを解説します。また、はてなでのクラウドストレージサービスやCDN(Contents Delivery Network)の使い方も少し紹介します。
■ Webサービスに必要な大量のファイル群を扱うために
クラウドのストレージサービスは、基本的にはファイルサーバと同じで、ファイルを保存して利用するためのサービスです。とはいえWebサービスを提供するには、様々な種類、様々なサイズのファイルを扱う必要があります。例えば、画像ファイルや動画ファイルなどのメディアファイルや、サーバのログを納めるファイルです。サイズも小さいものでは数KB、大きいものでは数GBまで。ファイルの数は膨大です。
このような大量のファイル群を確実に保存するためのストレージをネットワーク上に用意するのは、かなりやっかいな課題です。中でもファイルが消えることは、サービスを提供する立場からすると悪夢のような事態で、数ある障害の中で最も深刻なものです。クラウドサービスが提供しているストレージサービスは、バックアップや冗長性、可用性の確保が最初から用意されている点で、この課題を楽に解決するための有力な解となり得ます。
クラウドのストレージサービスとして、Microsoft、Amazon、Googleの3社からそれぞれ以下のようなサービスが提供されています。
- Windows Azure Storage Services
- Amazon Simple Storage Service (Amazon S3)
- Google Storage for Developers (2010年9月時点でベータ版)
いずれのストレージサービスもREST APIによる操作をサポートしており、特殊なライブラリを必要とすることなく容易に操作することができます。これは大変助かります。
■ Windows Azureでのファイルアップロード例を見てみる
では、クラウドのストレージサービスを利用する具体的な方法を、Windows Azure Storage Servicesを対象にファイルをアップロードする例で見てみましょう。参考にしたドキュメントは、MSDNで読むことができます。詳細な情報はこちらをご覧ください。技術的にはRESTなので、HTTPにおけるリクエストとレスポンスを読んだことがあれば、雰囲気をつかめると思います。
まずHTTPリクエストラインです。PUTメソッドを利用します。
PUT http://myaccount.blob.core.windows.net/mycontainer/myblockblob HTTP/1.1
アップロード先のURIを指定するだけです。続いてリクエストのヘッダを見てみましょう。
x-ms-version: 2009-09-19 x-ms-date: Sun, 27 Sep 2009 22:33:35 GMT Content-Type: text/plain; charset=UTF-8 x-ms-blob-type: BlockBlob x-ms-meta-m1: v1 x-ms-meta-m2: v2 Authorization: SharedKey myaccount:YhuFJjN4fAR8/AmBrqBz7MG2uFinQ4rkh4dscbj598g= Content-Length: 11
タイムスタンプや、エンコーディング、認証キー、Content-Length(ファイルサイズ)などが読み取れると思います。
最後にリクエストボディです。見たままの11バイトです。
hello world
クラウドストレージの利用者が、このようなリクエストをWindows Azure Storage Servicesに送ると、ストレージサービス上にファイルが生成され、以下のようなレスポンスが返却されます。
HTTP/1.1 201 Created Transfer-Encoding: chunked Content-MD5: sQqNsWTgdUEFt6mb5y4/5Q== Date: Sun, 27 Sep 2009 22:33:35 GMT ETag: 0x8CB171BA9E94B0B Last-Modified: Sun, 27 Sep 2009 22:30:15 GMT Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
レスポンスの1行目にある、ステータスコードの201は見慣れない方も多いかもしれません。資源の作成を求める要求が成功した、つまりファイルが正常に生成できたという意味です。レスポンスボディはざっと眺めればほぼ意味がつかめるでしょう。
ここでは、「Blob」と呼ばれるバイナリのデータを保存する例を見てみました。他に「Table」と呼ばれるハッシュに似た表形式のデータや、「Queue」と呼ばれる非同期メッセージ交換のためのデータもあります。また、Azure StorageのREST API一覧はMSDNにありますので、詳細はこちらを参照してください。
■ クラウドストレージの価格
簡単な例だけではありますが、Web技術に親しんでいるとかなり使いやすいという印象を持っていただけたのではないでしょうか。実際いくらで利用できるか、各ストレージサービスの価格を表にまとめてみました。
Azure Storage | Amazon S3 | Google Storage | |
---|---|---|---|
GB/月 | ¥14.7 | $0.15 | $0.17 |
トランザクション(10Kあたり) | ¥0.98 | $0.1 | $0.1 |
通信量(GB) | ¥9.8(in)/¥14.7(out) | $0(in)/$0.15(out) | $0.1(in)/$0.15(out) |
通信量(GB)アジア地域 | ¥29.4(in)/¥44.1(out) | $0(in)/$0.19(out) | $0.1(in)/$0.30(out) |
CDN通信量(GB) | ¥14.7 | $0.15 | - |
CDN通信量(GB)アジア地域 | ¥19.6 | $0.201 | - |
CDNトランザクション(10Kあたり) | ¥0.98 | $0.0095 | - |
「トランザクション」とは、HTTPリクエストとレスポンスを一組にしたものです。ざっと眺めてみると、ほぼ各社横並びの価格設定となっていることがすぐわかると思います。なお、条件によってはこの表より安くなる場合があります。ここしばらくは、一社が価格を改訂すると他社がそれに追従するという動きが続いています。このような価格競争は、利用する側からすると、歓迎できる動きです。これらの価格は、日々改訂されていますので、正確には各サービスの価格表を参照してください。
■ クラウドストレージとCDN
MicrosoftとAmazonが提供するストレージサービスでは、Content Delivery Network(CDN)も同時に提供されています。クラウドストレージでは、実際のコンテンツの配置場所が遠方になることがあり、どうしても遅延が発生してしまいますが、CDNを併用することで遅延を大きく改善することができます。
AzureではAzure CDN、AmazonではAmazon CloudFrontというサービスが用意されています。もちろん、両サービスとも独自ドメインに対応しており、サブドメインを使い分けることで自社環境から出すコンテンツとCDNで配信するコンテンツを同じドメイン以下に配置することができます。
■ はてなでのクラウドストレージの少し変わった使い方
はてなは現在、自社環境内のストレージとクラウドストレージサービスを使い分けています。はてなの自社環境のネットワーク回線の契約は、上限帯域を基準とした固定課金です。一方クラウドサービスは一般的に、転送量を基準とした従量課金です。そのため、総合的なトラフィックコストを抑えつつ、ユーザにとって快適なレスポンスとコストを実現できるよう、時間帯やメディアファイルがアップロードされた時間によって、CDN配信と自社配信を切り替えています。詳細は以下です。
- アップロードされたばかりのメディアファイルは、自社環境だけではなく、クラウドにもコピーして配置する
- ピーク時間帯は、クラウドに配置されたメディアファイルをCDN経由で配信する
- オフピークの時間帯は、自社環境から直接配信する
- 一定期間が経過したメディアファイルはクラウドから削除し、自社環境から配信する
このようにすることで、以下のような
- 参照頻度の高い新しいメディアファイルは、CDN経由の高速な配信
- 参照頻度の低い古いメディアファイルは、直接配信による低コストの配信
を実現できています。このような柔軟な配信を実現でてきているのも、クラウドならではのメリットだと考えています。
■ おわりに
すでにクラウドはWebサービスを構築する際の現実的な手段の一つとなっています。しかし、Webサービス全体をクラウドにのせることはまだまだ難しいことも多いと思います。そのような環境でもストレージサービスは、最初に導入するクラウドサービスとして適していると思います。
クラウドサービスは、まだまだ発展途上であり、急速な進化を遂げつつあります。これからの数年は、様々なクラウドサービスのいいとこ取りをしながら、賢いシステム構築が重要になると思います。引き続き、各社の動向に注目していきます。
■ マイクロソフト製キーボードとマウス、Azureステッカーをプレゼント!
この記事で紹介したWindows Azureにちなんで、マイクロソフト製キーボードとマウス及び、Windows Azureステッカーを抽選でプレゼントします。応募方法は、この記事をはてなブックマークに追加するだけ。さらに、Twitter連携して記事への感想をお寄せいただいた方には、抽選で「田中慎司賞」をプレゼント!詳しくは、応募要項をご覧ください。
<応募要項>
- 応募期間
- 2010年9月30日(木)から10月17日(日)24時まで
- 賞品
- 【はてなブックマーク賞】マイクロソフト社製Arcキーボード、マウス、Azureステッカー:3名様
- 【田中慎司賞】マイクロソフト社製Arcキーボード、マウス:2名様
- ※Arcキーボードは品番J5D-00020、マウスは品番ZJA-00017(ともにブラック)
- 応募方法
- 【はてなブックマーク賞】この記事をはてなブックマークに追加
- 【田中慎司賞】コメント欄にこの記事への感想を書いて、Twitter連携した上で、はてなブックマークに追加
- ※プライベートモードでご利用の方は対象となりません
- 当選発表
- 賞品の発送をもって替えさせていただきます
- 賞品発送
- 当選発表後、はてな登録メールアドレスまで、はてなからメールにて、送付先情報(送付先住所、受取人氏名、電話番号)をお聞きします