Engine(GCE)に引っ越ししました。今回はGCEと、このサイトの実構成をざっくり説明して、次回以降細かいやり方など書いていこうかと思います。3がソフトバンクに残債ありで登録してしまっているという記事を書きました。A-tak-dot-com反響はすさまじく、3日ほどではてなブックマーク460ぐらい、リツイートも1,200件、Facebookも750件ほどシェアされました。一日中SNSの通知が鳴りっぱなしで、本当にSNSの拡散力には驚かされました。その結果、サイトのアクセスもものすごいことになり、10月9日はこの記事だけで1日に1万8千回もアクセスされました。サイトの負荷も相当なもので、10月9日はほぼ終日、ページが表示されない状態が続きました。使っているサーバーはお名前.comのレンタルサーバーでメモリが2GBで、1接続に60MBぐらいメモリ消費するので、Apache(Webサーバーのアプリ)に使える分のメモリを計算すると、同時に30接続ぐらいしか処理できず、それを超えた分は待たされてしまうという感じでした。30接続以上制限してなかったらメモリ食いつぶしてサーバー全体が死んでしまっていたでしょうね。Apacheの接続をすぐに解放して次の処理に回せるようにKeepAliveをオフにしたり、それなりに対策しましたが、焼け石に水でしたね。黙って嵐が過ぎるのを待つしかないという感じでした(笑)。Engine(GCE)を試してみようかと思って、いけそうだったので思い切ってA-tak.comをGCEに移行してしまいました。GCEはクラウド上に仮想のサーバーを借りられるサービスです。Googleが自社のいろんなサービスに使っている最先端の技術を、個人でもリーズナブルに借りて使えるとんでもないサービスです。いうメモリ0.6GBのサーバーだと1時間$0.008、1$を100円で計算すると0.8円で借りられます。月にすると600円ぐらいですね。実際はディスクの容量とか、通信料によって課金されるので、もっと高くなります。通信料はだいたいGCEから外に出て行くのが1GBあたり$0.12とか、ディスクは1GBあたり一ヶ月$0.04とかですね。ディスクは40GB借りても160円ぐらいだから安いもんですね。通信料はちょっとわからないので実際に一ヶ月使って実績でみてみようかと思ってます。50GB通信あったとしても600円だから、大丈夫だとは思うんですが。追記]一ページのサイズ測ったら、だいたい1.5MBぐらいですね。うちのサイトではこんな負荷が毎日続くことはありえないですが、これだと9,720円(実際は少しディスカウントが入る)。普段でもこれの1/10ぐらいはアクセスあるからこれだけで1,000円近くか?私の理解が間違ってるかもしれないので詳しくはこちらでご確認ください。GCEは最初に無料枠があって、$300もしくは60日間は無料で使えるので、気になる方は試してみるといいですよ。請求先アカウントというところを見ると、実際どれぐらい費用がかかるか見れるので、コストが心配な方も実際に使ってみるといいと思います。私も10月10日に始めたばかりなので無料期間中ですが、普通にこうやってサーバー立てて移行まで、がっつり試せてます。Platformの中には流行のビッグデータを扱うサービスもあったります。TB級のデータをあいまい検索して数秒で結果が返ってくるの見ると、DB技術者の方は感動すると思いますよ。インデックスとかなしで毎回フルスキャンですからね。意味がわかんないです。Engineなら突然の負荷にも柔軟に対応できるコスト面でメリットがあるような感じで書いちゃいましたが、個人のブログ程度だったら正直費用的なところは積み上げていくと、私が前使っていたお名前.comの方が月1,300円ぐらいなので安くなるし、マッチすると思います。それでもGCEを試してみたいなと思ったのは、最先端のクラウド技術を体験したかったのと、突然の負荷にも対応できる懐の広さです。GCEはさっきも書いたように時間単位(正確には最低10分間、その後は1分単位)での課金になります。普段は少ない台数のサーバーを借りて、アクセスが多くなったら追加でサーバーを借りるという柔軟な対応ができます。いうとGCEには「オートスケール」という機能があり、負荷が上がってきたら自動でサーバーの数を増やして分散処理して、負荷が収まったら自動でサーバー減らす仕組みがあります。いつ来るかわからない負荷のためにサーバーを前もってたくさん常駐させて無駄にお金を払う必要がないのです。通常、複数のサーバーに処理を分散するにはロードバランサー(LB)という仕組みが必要ですが、GCEにはLBも用意されています。ハードウェアで買うと50万から数百万もしますが、GCEのLBは月々1,800円程度。性能もかなり良いらしく、アジアのデータセンターで障害が起きてもヨーロッパのサーバーでサービス継続したりもできるという化け物。カッコの付け方インフラエンジニアではないので、国をまたいだ負荷分散の仕組みを独自に作るとどれだけ費用がかかるか想像もできませんが、さすがに月々数千円ではGoogle以外に提供できるところはないでしょうね。オートスケール構成こんな構成にしてみたよいろいろ試して紆余曲折はありましたが、こんな構成で落ち着きました。フロントにはロードバランサ(LB)。後ろにはウェブサーバーがオートスケール構成で負荷に応じて1台から7台(無料期間の制限で8CPUまでのため)まで自動で増減します。WordPressのデータベースは1台のDBサーバーに持たせていて、フロントの各ウェブサーバーから通信を受け付ける構成にしています。GCEにはDNSが設置されていて、インスタンス名で各サーバーが通信できるので、接続設定とか接続許可設定がやりやすくていいですね。DBはMariaDB(MySQL)。仕事だと1台サーバーが壊れても大丈夫なようにマスタースレーブ構成とかにするんですが、そもそも個人のブログなのでそこまではやらなくていいかなと(笑)。この前の負荷の状況見るとDBがボトルネックになっていなさそうだったから、DB負荷についてもあまり気にしてません。WordPressで参照する画像をどこに置くか迷いましたが、DBサーバーにNFSサーバー(ファイルサーバー)機能を持たせて、そこに置くことにしました。Storageに置こうと思いましたが、WordPressの改造を派手にやらないといけないみたいなのでその案は断念しました。次に各Webサーバーに画像をおいてみたのですが、もし一台動かなくなっても他のWebサーバーで独立して動くので、それはそれでいいのですが、画像をアップロードしたときに、すべてのウェブサーバーに同じようにファイルを置かないといけないので、同期の仕組みとか考えるのが面倒。結局、一つのNFSサーバーに置くことにしました。そうそう、ZenCacheというキャッシュプラグインもネックでした。こいつはページの更新があればキャッシュをクリアして再作成してくれるんですが、キャッシュを各ウェブサーバーに置いてしまうと、それぞれのサーバーでどうにかしてZenCacheのキャッシュをクリアして廻らないといけないんですよね。あとWordPressのPHPファイル自体もNFS上においてます。NFSが死んだら全滅です(笑)。WebサーバーアプリもApacheからNginx(エンジンエックス)に変えました。Apacheはアクセスの度にプロセスなりスレッドなりを起動するので、それこそ1接続で60MBもメモリ消費したりするのですが、Nginxは1プロセスで複数リクエストを処理するので、接続が増えるほどにメモリを食うということがないとのことです。@ITPHPなどの動的にページを表示を変える仕組みについてはNginxでは対応してないので、別途PHP-FPMなどのようにPHPを動かす仕組みが必要になります。うちもphp-fpm入れてます。前置きだけで長くなってしまったので、実際の構築については次回以降書いていきます。Apple野郎なおっさんでしたが、ちょっと最近のAppleには飽き気味。A-tak.comは2002年2月から運営(前身のサイトは1999年3月から)。コメントをキャンセルメールアドレスが公開されることはありません。*サイト上に表示された文字を入力してください。コメントデータの処理方法の詳細はこちらをご覧ください。このサイトの使用を継続することで、その使用に同意したとみなされます。コントロール方法を含む詳細についてはこちらをご覧ください。