2ヶ月くらい前にCDNをAkamaiに切り替えたので、知見を公開。 (追記 2015年8月18日 私個人の認識不足で用語の使い方に問題があったので一部修正しました s/SLA 100%/高可用性構成/g
)
TL;DR
- Kaizen Platform, Inc.で利用しているCDNをAkamaiに切り替えた
- Akamaiはスタートアップでも利用出来るコスト感
- 高可用性構成のAkamaiを利用することでCDNの可用性というインフラエンジニア的に頭の痛い問題が減った
CDN第一世代 AWS CloudFront CDN (-2015年1月)
- CDNにCloudFrontを利用
サービスで利用しているインフラのほとんどがAWSで稼働しており、 その関係でCDNもCloudFrontを選択。
CDN第二世代 CloudFront + CDN77 (2015年1月-5月)
- AWS CloudFrontにおいて、2014年11月、12月と立て続けに障害が発生し、 CloudFrontの障害がサービス提供に与える影響が大きいため、対策を実施。
- Route53のDNSフェイルオーバーとCloudFront + CDN77を利用し、CDNを冗長構成
対策を講じるにあたりヌーラボさんの下記のブログが大変参考になった。
ヌーラボさんの記事を参考に予備系CDNの調査と選定
当時のCDNの必須要件
- 専用 IP 独自 (SSL Dedicated IP Custom SSL) が利用出来る。
- Amazon S3をバックエンドに利用出来る
- 日本とUSにエッジがある
- 予備系なので従量課金が良い
- AWSとは別の独自ネットワーク上に構成されている
当時6社くらいのCDN検証と問い合わせを行い、上記条件を満たすCDNとしてCDN77.comが最適だったので、 Route53のDNSフェイルオーバーとCloudFront + CDN77を利用し、CDNを冗長構成にした。(ヌーラボさんで利用していたKeyCDNは当時調査していたときSNI Custom SSLしか提供しておらず要件を満たさず)。 余談ですがCDN77は結構込み入った技術的な質問にも1時間以内で返信してきて、 サポート体制が素晴らしかったのも選定要因になりました。
CDNの冗長構成を構築したんですが、幸か不幸か、CloudFrontに障害が発生しなかったため、 予備系のCDN77が稼働することは無かった。
CDN第三世代 Akamai(2015年6月-)
- CDNにAkamaiを利用
- Akamaiは
SLA100%なので利用することはないと思いますが高可用性構成のため利用することはほぼ無さそうですが、予備系としてそれまで稼働していたCloudFrontを残す(追記 2015年8月18日 誤解を招く表現なので修正しました)
CloudFront + CND77の冗長構成の懸念点
- 検証としてCloudFrontを
Disable
にしたときには自動でCDN切り替わったが、CloudFrontが実際に障害になったときの挙動が検証不可のため、自動で切り替わるか確認出来ず- Route53のDNSフェイルオーバーに10〜20分程度要する(CloudFrontが完全に反応無くなるまでコンテンツが返ってくるためフェイルオーバーが実行されない)
- CloudFrontの障害発生頻度として、年に1〜2回程度なので、そこで正常に冗長構成が稼働するか不安がある
Akamaiを選択した理由
- 高可用性構成
- 私を含めインフラのメンバー全員前職などでAkamaiを利用していたので、特徴などを把握している
- 数年間Akamaiを利用した経験の中で障害無し
- 担当営業の方の頑張り&ボリュームディスカウントがあり、スタートアップでも利用できる、財布に優しいコスト感
Akamai With ChatOps
ngs/hubot-cloudfront で、SlackからCloudFrontのInvalidateを実行していた部分を hubot-akamai-ccu を導入し、 SlackからAkamaiのキャッシュのInvalidateを実行出来るようにもした。
この手の話はあまり外に出すような話じゃないかと思うんですが、 Kaizen Platform, Inc.のエンジニア行動指針というのが、社内Qiita Teamにあって、 冒頭にCEO @sudokenのmessageが載っていて、 その中に
様々な国や地域で多くの人が前向きに協力したくなるようなオープンな組織や事業でいよう
というのがあり、この情報が役に立つ人達もいると思うので公開しました。 CDNの可用性はインフラエンジニア的にかなり頭の痛い問題だと思いますし、 参考になれば幸いです。
先日Hashicorp Product Meetupに 参加したときに、KAIZENのエンジニア行動指針を見たいとの意見を頂いたので、 その他の行動指針を一部公開すると下記のような感じになってます。