今回は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を調べたい場合には以下の参考資料を見ると良いでしょう。
コメント
コメントを投稿