スキップしてメイン コンテンツに移動

ObjectStorageのCDNについて

今回はSoftLayerのObjectStorageのCDNについて調べてみました。

SoftLayerのObjectStorageは大量のファイルの保存に適したクラウド・ストレージ・サービスです。CDN(Contents Delivery Network)は世界各地に点在しているキャッシュサーバを使った負荷分散サービスで、この機能を使うことでユーザーは地理的に一番近い場所にあるキャッシュサーバからアップロードしたデータをダウンロードすることができます。SoftLayerのObjectStorageは、CDNと併用して利用することができます。今回は、ObjectStorageに実際にファイルをダウンロードし、CDNによりどれだけ速度が向上されるのかを実験してみます。また、一緒にAPI経由でCDNを制御する方法をご紹介します。

詳細

CDNというアクセス速度の改善の手段

CDN(Contents Delivery Network)とは、Webコンテンツを配信するために最適化されたネットワークのことです。キャッシュサーバーを通してWebコンテンツのダウンロードを行い、エンドユーザーから最も近いキャッシュサーバーを選んで通信に使うことで、Webコンテンツを高速に配信することができます。

CDNとは

CDN(Contents Delivery Network)とは、Webコンテンツを配信するために最適化されたネットワークのことです。キャッシュサーバーを通してWebコンテンツのダウンロードを行い、エンドユーザーから最も近いキャッシュサーバーを選んで通信に使うことで、Webコンテンツを高速に配信することができます。

CDNのキャッシュ・サーバーの拠点について

ObjectStorageのキャッシュ・サーバーは、世界中に何十箇所もあります。アジアでは東京、大阪、香港、シンガポールなどにキャッシュ・サーバーの拠点が存在します。キャッシュ・サーバーの詳しい場所に関しては以下のリンクの参照をお願いします。

APIからのファイルのダウンロード速度

カスタマー・ポータルの使い方、ObjectStorageの購入方法、APIによるファイルのアップロードについてはソフトレイヤー活用技術資料を参照しましょう( https://gg-web.jp/document/ConfigGuide/docframe.html )。

ここでは、あらかじめアップロードしておいた21MBの動画ファイルのダウンロード時の通信速度を測定してみます。今回はデータセンターdal05からのダウンロード速度を測定しています。ダウンロードにはcurlというファイルのアップロード、ダウンロードを行うことのできるコマンドラインツールを利用しています。

curl -H "X-Auth-Token: AUTH_tkd8465f8f92554cb1a4d0474cb007aeda" \
    -X GET https://dal05.objectstorage.softlayer.net /v1/AUTH_3ec97bc7-8e2f-4073-95f7-72905540axxxx/sample/sample.mov \
  -o download.mov

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 20.7M  100 20.7M    0     0   570k      0  0:00:37  0:00:37 --:--:--  607k

測定結果は570kBpsでした。

CDN有効時のファイルダウンロード速度

次にCDNが有効になったURLからのダウンロードを行ってみます。
まずはコンテナのStaticURLとCDNを有効にしてみましょう。次のようなコマンドによって任意のコンテナのStaticURLとCDNを有効にすることができます( http://docs.openstack.org/api/openstack-object-storage/1.0/content/Examples_for_static_web-dle4025.html http://sldn.softlayer.com/reference/Object-Storage-CDN/Modify-Container-CDN-Enabling )。

ObjectStorageにアクセスするためのCDNのURLを取得するためには、以下のようにリクエストヘッダーに「X-Context: cdn」を付加してHEAD送信しレスポンスのヘッダーを見ることでわかります( http://sldn.softlayer.com/reference/Object-Storage-CDN/Retrieve-CDN-URLs )。

curl -i -H "X-Context: cdn" \
  -H "X-Auth-Token: AUTH_tkd8465f8f92554cb1a4d0474cb007xxxxx" \
  -X HEAD https://dal05.objectstorage.softlayer.net/v1/AUTH_3ec97bc7-8e2f-4073-95f7-72905540axxxx

HTTP/1.1 200 OK
Content-Length: 0
X-Search-Items-Offset: 0
X-Search-Items-Count: 0
X-Cdn-Url: http://12b8a.http.dal05.cdn.softlayer.net
X-Cdn-Stream-Flash-Url: rtmp://12b8a.flash.dal05.cdn.softlayer.net
Content-Type: text/plain
X-Search-Items-Total: 0
X-Trans-Id: tx40efc025f58d49fe9e525-005493e5c3
Date: Fri, 19 Dec 2014 08:45:58 GMT

この場合、「 http://10167.http.sng01.cdn.softlayer.net 」を通してObjectStorageにアクセスすることでCDNを通した最適化された通信ができます。

curl -i -H "X-Auth-Token: AUTH_tkd8465f8f92554cb1a4d0474cb007xxxxx" \
     -H "X-Web-Mode: true" \
     -H "X-Container-Read: .r:*,.rlistings" \
     -X POST https://dal05.objectstorage.softlayer.net/v1/AUTH_3ec97bc7-8e2f-4073-95f7-72905540axxxx/sample

これによって、curlから認証なしでCDNを使ってアクセスできるので実際にダウンロードして速度を測定してみます。

curl -X GET http://12b8a.http.dal05.cdn.softlayer.net/sample/sample.mov \
  -o download.mov
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 20.7M  100 20.7M    0     0   543k      0  0:00:39  0:00:39 --:--:--  558k

測定結果は543kBpsでした。今回の測定ではAPIからのファイルのダウンロード速度と変わらない速度でダウンロードされていますね。何度かダウンロードしてみましたが、大きな速度変化は見られませんでした。もっとの多くのリクエストが同時にあったときにCDNの負荷分散が効果を発揮し、ダウンロードの速度が向上することでしょう。

CDNをAPIから操作する方法

キャッシュできていることを確認するには?

任意のオブジェクトストレージのコンテナにアクセスする際にキャッシュが効いているかは、以下の様なコマンドで確認することができます。

curl -i -X HEAD https://dal05.objectstorage.softlayer.net/v1/AUTH_3ec97bc7-8e2f-4073-95f7-72905540axxxx/sample -H "X-Auth-Token: AUTH_tkd8465f8f92554cb1a4d0474cb007xxxxx"

HTTP/1.1 204 No Content
Content-Length: 0
X-Container-Object-Count: 1
X-Container-Meta-Key: Value
X-Container-Meta-Memo: Mask
X-Container-Meta-Web-Error: error.html
X-Timestamp: 1415358127.92418
X-Container-Read: .r:*
X-Container-Bytes-Used: 18920
X-Container-Meta-Web-Index: index.html
Content-Type: text/plain; charset=utf-8
Accept-Ranges: bytes
X-Trans-Id: tx278c66baead04e36a67f6-0054644c27
Date: Thu, 13 Nov 2014 06:13:59 GMT

レスポンスヘッダに「X-Container-Read: .r:*」が含まれている場合、CDNのキャッシュは効いています。

キャッシュしているファイルを削除するには?

キャッシュしているファイルを削除するには以下の様にコマンドを実行します。リクエストヘッダに「X-CDN-Load: true」を追加してHEADを発行しています。

curl -i -X HEAD https://dal05.objectstorage.softlayer.net/v1/AUTH_3ec97bc7-8e2f-4073-95f7-72905540axxxx/sample/sample.mov -H "X-Context: cdn" -H "X-Auth-Token: AUTH_tkd8465f8f92554cb1a4d0474cb007xxxxx" -H "X-CDN-Load: true"

HTTP/1.1 200 OK
X-Cdn-Url: http://12b8a.http.dal05.cdn.softlayer.net/sample/sample.mov
Content-Length: 21767866
Accept-Ranges: bytes
Last-Modified: Fri, 19 Dec 2014 08:05:42 GMT
Etag: 71c652f5c0363fafde45a45404bcea26
X-Timestamp: 1418976341.51495
X-Cdn-Stream-Flash-Url: rtmp://12b8a.flash.dal05.cdn.softlayer.net/sample/sample.mov
Content-Type: video/quicktime
X-Trans-Id: txd868942206ca46a1abcca-005493e7b2
Date: Fri, 19 Dec 2014 08:54:11 GMT

キャッシングされる時間(TTL)を設定するには?

キャッシュされる時間(TTL)を以下の様なコマンドで設定することができます。
リクエストヘッダに「X-Cdn-Ttl: 86400」を付加し、HEAD命令を発行します。

curl -i -X HEAD https://dal05.objectstorage.softlayer.net/v1/AUTH_3ec97bc7-8e2f-4073-95f7-72905540axxxx/sample \
-H "X-Auth-Token: AUTH_tkd8465f8f92554cb1a4d0474cb007xxxxx" -H "X-Cdn-Ttl: 86400"

HTTP/1.1 204 No Content
X-Container-Meta-Web-Listings: true
Content-Length: 0
X-Container-Object-Count: 1
X-Container-Meta-Web-Error: error.html
X-Timestamp: 1418972204.84548
X-Container-Read: .r:*
X-Container-Bytes-Used: 21767866
X-Container-Meta-Web-Index: index.html
Content-Type: text/plain; charset=utf-8
Accept-Ranges: bytes
X-Trans-Id: tx16ce600103df4c3c949d5-005493e840
Date: Fri, 19 Dec 2014 08:56:33 GMT

あらかじめキャッシングしておくには?

任意のオブジェクトをあらかじめキャッシングしておくには、以下の様なコマンドを実行します。
リクエストヘッダに「X-CDN-Load: true」を付加してPOST命令を発行します。

curl -i -X POST https://dal05.objectstorage.softlayer.net/v1/AUTH_3ec97bc7-8e2f-4073-95f7-72905540axxxx/sample/sample.mov \
  -H "X-Context: cdn" -H "X-Auth-Token: AUTH_tkd8465f8f92554cb1a4d0474cb007xxxxx" -H "X-CDN-Load: true"

HTTP/1.1 202 Accepted
Content-Length: 20
Content-Type: text/html; charset=UTF-8
X-Trans-Id: txecf43461862c4561b31bf-005493e951
Date: Fri, 19 Dec 2014 09:01:05 GMT

Object Load Accepted

全てのObject Storage CDNのAPIを調べたい場合には以下の参考資料を見ると良いでしょう。

参考資料

Object Storage CDN

コメント

このブログの人気の投稿

はじめまして!

はじめまして!
株式会社MNUで新しくブログを始めます。
主に、プログラムに関する技術的なことを中心に社員が持ち回りで書いていきます。
皆様のお役に立てれば幸いです。

どうぞ、これからよろしくお願いします。


ここから下はコードを表示するサンプルです。

int x = foo(); /* This is a comment This is not code Continuation of comment */ int y = bar(); // This is line 4. foo(); bar(); baz(); boo(); far(); faz(); shfor target do WORKDIR=$(mktemp -d "$EXTRACTHOMEDIR"/XXXXXX) case "$target" in *.[Tt][Gg][Zz]|*.[Tt][Aa][Rr].[Gg][Zz]|*.[Tt][Aa][Rr].[Zz]) tar vzxf "$target" -C "$WORKDIR" move_to_currentpath "$WORKDIR" "$target" ;; *.[Tt][Bb][Zz]|*.[Tt][Aa][Rr].[Bb][Zz]2) tar vjxf "$target" -C "$WORKDIR" move_to_currentpath "$WORKDIR" "$target" ;; *.[Gg][Zz]) gzip -d "$target" move_to_currentpath "$WORKDIR" "$target" ;; *.[Zz][Ii][Pp]|*.[JjWw][Aa][Rr]) check_required_program unzip /usr/p…