More than 1 year has passed since last update.

ことの始まり

最近になって、自宅サーバ最高だぜ!から、24時間部屋の中でなるファンの爆音が辛い歳になってきて、さてさて、パブリッククラウドを使うようになった自分ではありますが、AWSってほんとなんでも揃っているデパートですごいなと実感してきました。一昔前は、かなり否定派だったのですが、いざつかってみると、こんなに簡単にいろいろできちゃうものなのか?と本当に感動・・

といいつつ、実際、私はまともに利用していないのですが、知り合いの会社さんから、「こんなんなってます・・」という相談を持ちかけられて、見せてもらったところ、結構びっくりしました。

それは、利用料金・・
ryokin.jpg
うげぇ・・・。企業から見ればそうでもない額なのかもしれないけど、私から見れば、一日でお給料がすっ飛びそうなお値段・・

そんでもってこれを限りなくコストをゼロな構成することができるか、ほぼ趣味で考えてみました。

S3の料金体系

調べようと思いましたが、わかりずらいので(汗)
S3の料金体系が分かりにくいと聞かれたので纏めた
を参考にさせていただきました。kawazさん曰く、

一番高いインターネットへのデータ送信だけ考えておけばよいと思います

まさしくこれです。データ送信のところをなんとかすれば、コストを下げれるのではないかと思いいろいろと試したことをメモします。

知り合いさんのサービスについて

いろいろな理由で教えてくれませんでした(汗)じゃあ書くな!
ざっと聞いた感じでは、S3から何かを持ってきて表示させているものなのかなー?くらいです。そしてここまで料金がかさむってことは、その何かをリクエストのたびに提供しているってこと?(あたりまえか)

たとえばですが、10MBのファイルを10人の人が、クライアントからリクエストすれば、10MB X 10人で、100MBのネットワーク転送量になりますね。それが、100人だったら、1000人だったら、100000だったら?って考えれば、いろいろ納得な感じで、「あぁ、いろんな意味ですごいなS3」ってなるのが納得いただけるかと思います。

・・余談はさておき

じゃあ、さっそく策について考えてみたいと思います

データ送信量を抑えるために

CloudFront を利用すれば?

色々な方から提案をいただきましたこのCloudFront
詳しくはアマゾンのサイトを見ていただくとして、

サイトの説明を要約すると
Amazon CloudFront はコンテンツ配信ネットワークです。これは他のアマゾン ウェブ サービスを統合し、開発者や事業主に、短い待ち時間と高速なデータ転送速度、および契約なしに、エンドユーザーにコンテンツを配信する簡単な方法を提供します。

ということなのですね。ふむふむつまり、CDNかぁ。。そうか!CDNってコンテンツデリバリーサービスの略だったのか!と初めて知ったところで、ん?まてよ?たしかに説明を見る限りでは、むちゃむちゃすごいのですが、前述の

一番高いインターネットへのデータ送信だけ考えておけばよいと思います

を考えると、どんだけ早く配信できたとしても、ネットワーク転送料はかわらないじゃん。つまり、コスト削減の近道ではない。。

なので、CloudFrontは、もっと規模が大きくなって収益が見込めるときに使ったほうが良いと判断しましたので提案からは除外しました。

AWSやめてVPSとかオンプレミスにすれば?

色んな意味でぶん殴られそうな気がしましたのでこの提案はやめました。そりゃそうですよね。便利だからAWS使っているんですもん。ちょっと触った僕もそう思いましたし。

CDNを自作する?

どうやらここに落ち着きそうな気がしてきました。そして、これをどのように実現するのかを自分なりに考えてみました。つまりこの苦労話を今後書くわけです

自作CDNを作ろう

そもそもCDNが何の略かもしれない私が考えてるわけなので、本来のCDNとは大幅にずれた話になりそうな気がしますので、色々な意味でこの話についてのつっこみは無しでお願いします。たぶん説明されても私には何のことがわからない人だと思いますので。

ネットワーク転送量で課金されないクラウドを選択

ネットワーク転送量がコストのネックになっている部分であれば、つまりは、ネットワーク転送量で課金されないところを選択すればいいんじゃないのか?つまり、先ほど自己否定していた、VPSとかオンプレミス(データセンター)・・とは言っても私には、データセンターを紹介する力量はないので、必然的に、VPSを選択することになります。

VPS サービス会社選定

どこも評判の良いVPS事業者ですが、その中でも私が良いと思ったのは

sakura internet

Conoha by GMO

でした。

どちらも通信速度が安定しておりますし、サービスも良さそうです。
また、Conoha は萌えます。

ミドルウェア選定

静的コンテンツをキャッシュするミドルウェアは何がいいのかな?ということで、プロキシーサーバをどれにするか迷いました。あ、リバースプロキシ的な使い方をすることが前提で。です。

Squid

大昔に自宅サーバでこれを使っていましたが、改めて見ると設定めんどくせーー。と感じましたのでこちらは見送りました。

Varnish cache

名前もなんとなくかっこいいし、設定もそんなに難しくなさそうだったのですが、いかんぜん情報があまりあがっていなく、ちょっとどう提案してよいのかわからなかったため、こちらも、見送りました。

Nginx

ん、なんかかっこよい名前だし、最近人気がありますね。これにしようと・・明確な基準もないまま、Nginxで考えることにしました

自作CDN 構成

こうすれば、コストを抑えられるのでは的な考えで作ってみたのが以下の構成です

jisaku_cdn.jpg

とまあ、なんか事故レベルでセンスのない構成図になってしまいましたが

要約すると

  • 初回アクセスは、自作CDNから取得しようと試みるも、キャッシュがないので、S3から持ってきたものを返す -> ここで、自作CDNにキャッシュされる
  • 2回目以降同様のファイルにアクセス要求がある場合は、キャッシュから取得する、つまり、S3へのアクセスはない
  • 複数 nginx があるのは、DNSラウンドロビンでアクセスを分散させるため

です。

この構成が、ばちっと決まれば、

10MB X 10人で、100MBのネットワーク転送量になりますね。それが、100人だったら、1000人だったら、100000だったら?って考えれば、いろいろ納得な感じで、「あぁ、いろんな意味ですごいなS3」ってなるのが納得いただけるかと思います

の話でたとえると、S3のアクセスは10MB X 3人の 30MBで済んでしまうわけです。数値的には・・ってだけですが。。

さてさて・・・結果はこちらにのせましたのでぜひご覧くださいませ

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.