ShinbiLayer: BluemixのCDN機能（ベータ版）

#はじめに
BluemixにもCDNがベータ版でリリースされたようなので、試してみました。
2016年3月3日現在の主な制約として、

- 「米国南部」でのみ本サービスを選択できるようです。
- HTTPはサポートしているが、HTTPSはサポートしていないようです。

#1. ランタイムアプリケーションの購入とドメイン設定

1. ランタイムとして「SDK for Node.js™」を購入。アプリケーション名は、shinobilayer01とする（よってホスト名は`shinobilayer01.mybluemix.net`となる）。
2. 「経路とアプリ・アクセスの編集」を選択<br>
![002.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/1a229bc3-87e9-4400-c852-32218cfc3b61.jpeg)
3. 「ドメインの管理」を選択<br>
![003.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/4a6cda5d-44f1-2a9a-237e-45eed8f770d2.jpeg)
4. ドメインを追加する。今回は私はmysl01.comというドメインを持つDNSを持っているので、そのDNSドメインを登録。<br>
![004.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/a0234d8b-e178-dd5b-d328-e9475b63a82b.jpeg)
5. 再度「経路とアプリ・アクセスの編集」を選択<br>
![002.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/1a229bc3-87e9-4400-c852-32218cfc3b61.jpeg)
6. 追加したドメインに下してホスト名を追加。
![005.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/0809756f-bfaa-453f-55e1-248d86952d0b.jpeg)

これにより、このアプリケーションにて

- shinobilayer01.mybluemix.net（システムドメイン: ORIGIN ROUTEに相当 ）
- bluemixcdn01.mysl01.com（カスタムドメイン：APP URLに相当）

が追加されたことになります。


#2. CDNサービス購入と設定

1. CDNを購入<br>
![001.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/eb890755-768c-42ad-65bb-394bd58eee1b.jpeg)
2. APP URL（カスタムドメインベースのURL）とORIGIN ROUTE（システムドメインベースのURL)を入力。これにより、**CNAMEがcdn.bluemix.netになることがわかる。**　エラーは出ているけどいったんここでは無視してよい。<br>
![006.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/29e87779-3978-3ed0-aee9-701443c412e2.jpeg)
3. （オプション）デフォルトのTTLはお試し用途としては長すぎるので60秒にする。
![007.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/39ee09a5-d505-3e21-11a2-6a290a1b7a37.jpeg)



#3. DNS設定
bluemixcdn01.mysl01.comのCNAMEとしてcdn.bluemix.netが登録するために、DNSを編集する。
![009.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/2a2d872a-5f89-5140-99f3-6ff0a670a975.jpeg)


#4. テストと考察。

```
# curl -I http://bluemixcdn01.mysl01.com/
HTTP/1.1 200 OK
X-Backside-Transport: OK OK
Cache-Control: public, max-age=0
Content-Type: text/html; charset=UTF-8
Etag: W/"347-15337a80e90"
Last-Modified: Wed, 02 Mar 2016 14:07:54 GMT
X-Cf-Requestid: 4fd791c8-4b75-4c62-654d-6e3474315bad
X-Powered-By: Express
X-Client-IP: xx.xx.xx.xx
X-Global-Transaction-ID: 593764285
Content-Length: 839
Accept-Ranges: bytes
Date: Wed, 02 Mar 2016 16:10:08 GMT
Via: 1.1 varnish
Age: 11
Connection: keep-alive
X-Served-By: cache-nrt6133-NRT
X-Cache: HIT
X-Cache-Hits: 2
X-Timer: S1456935008.369276,VS0,VE0


# curl -I http://cdn.bluemix.net -H "host: bluemixcdn01.mysl01.com"
HTTP/1.1 200 OK
X-Backside-Transport: OK OK
Cache-Control: public, max-age=0
Content-Type: text/html; charset=UTF-8
Etag: W/"347-15337a80e90"
Last-Modified: Wed, 02 Mar 2016 14:07:54 GMT
X-Cf-Requestid: 0747a0f3-eb19-4677-4d82-28872e8068f4
X-Powered-By: Express
X-Client-IP: xx.xx.xx.xx
X-Global-Transaction-ID: 702885789
Content-Length: 839
Accept-Ranges: bytes
Date: Wed, 02 Mar 2016 16:09:13 GMT
Via: 1.1 varnish
Age: 21
Connection: keep-alive
X-Served-By: cache-nrt6129-NRT
X-Cache: HIT
X-Cache-Hits: 6
X-Timer: S1456934953.943458,VS0,VE0

# nslookup cdn.bluemix.net
Server:         10.0.80.11
Address:        10.0.80.11#53

Non-authoritative answer:
cdn.bluemix.net canonical name = global.prod.fastly.net.
global.prod.fastly.net  canonical name = global-ssl.fastly.net.
global-ssl.fastly.net   canonical name = fallback.global-ssl.fastly.net.
Name:   fallback.global-ssl.fastly.net
Address: xxx.xxx.xxx.xxx
```

- BluemixはSoftLayerの上で稼動しているので、てっきりこのCDNサービスもEdgeCastで動いているものだと思っていたが、Fastly CDNっぽい。
- X-CacheがHITになっていたらキャッシュヒット。X-Cache-Hitsでヒット回数が確認できるようだ。
- 繰り返し実施してみると、「X-Served-By」の箇所が頻繁に変更されて、なかなかX-Cache-Hitsの数が増えない。5回Webアクセスしたら4回キャッシュされるという訳ではなく、5回とも別々のEdgeServer経由でアクセスされたために全てが1st Hitでしたということもありえそう。
- よくアクセスが詰まる・・・。
- 必要に応じてキャッシュをクリア（Purge Cache）を実施するとよい。
![008.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/f8191ab4-9bab-c324-70d2-b8de7e4f5623.jpeg)