Database JUNKY

MySQL,MariaDBを中心としたブログです

Amazon S3の利用料節約を考えてみる1(VPSを利用してCDNを作成する)

ことの始まり

最近になって、自宅サーバ最高だぜ!から、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 サービス会社選定

転送速度とか、そもそもコストを抑えるために利用するのだから、当然価格が安いのもたいせつですよね。良さげなところをいくつかチョイスしてみました

GMOクラウド

GMOさんの回線速度は他社と比較しても高速です!

DTI SERVERMAN

なんと月額467円で利用することができます!!エントリレベルでは、これで十分だし。こちら、467円でもディスクが大きいのも魅力です

sakura internet

特に説明はいりませんね。VPSと言えば、sakura

Conoha by GMO

実は結構ここを利用させていただいておりますが、基本的には、GMOさんなので、GMOクラウドと同じといってもいいかも

【ConoHa VPS】月額976円・メモリ1GB・CPU2コア

ミドルウェア選定

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

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で済んでしまうわけです。数値的には・・ってだけですが。。

次回、時間がある時に細かな設定をどうしたかを書いていきたいと思います。

今回はここまで!!