先日、「乙武さん不倫の謝罪ホームページに見るプロの犯行」という記事が話題になりましたね。ネタがネタだけに、僕も超おもしろツイートをつぶやいたのですが、1ふぁぼで沈死しました。
新潮買ってきてしまった。「五体不満足からの一本大満足」というフレーズが思い浮かんだ。
— 高橋文樹『アウレリャーノがやってくる』 (@takahashifumiki) March 25, 2016
さて、上述した記事ですが、バズった当日は503エラーを頻発して見られませんでした。はてなブックマークのブコメでもそのようなコメントが頻発しています。たぶんなのですが、さくらVPSあたりでWordPressを立てており、アクセス急増で憤死したという次第でしょう。
村上総裁といえば、面白いWebサービスをバンバン立ち上げることで有名で、その技術力が低いはずはないのですが、やはりバズった時に落ちてしまうと同業者から「おいおい」みたいなコメントが寄せられがちです。
僕も何度かアクセス急増を経験したことがあるのですが、体感的に1日ではてぶ500越えパターンだと、キャッシュなしでは落ちますね。VPSやレンサバでできるキャッシュにも幾つかあるのですが、それぞれ次のようなデメリットを感じました。
- Nginxのプロキシキャッシュ
- こうやってやるのですが、同時アクセス1,000を超えるとサーバスペックを問われる感じがしました。ちゃんとした人がやればさくらVPS512で、Yahoo!砲食らっても WordPress を平常運転らしいのですが、僕はそこまで耐えられなかったですね。あと、そもそも設定がめんどくさいですね。
- W3TotalCacheなどのプラグイン
- 導入が簡単なのですが、上記と同じく、ある程度の閾値を超えるとサーバスペックが問われます。
- AWS CloudFront
- 負荷対策という点ではほぼ無敵だが、転送量が1ページあたり1MB(画像などコミコミ)だとすると、10万PVで100GBぐらいなので、バズ一発で1,680円の転送料金がかかる(よね?)。テック系の記事だとGoogle AdsenseのRPMが200円超えなかったりするので、10万PV / 1000 * 200円で2,000円となり、あんまり意味ない。従量課金はビジネスとして正義! そりゃあんだけ純利益稼ぐわ。
とういうわけで、それぞれ一長一短あるのですが、やはりバズったタイミングでサーバが落ちてしまうと「なに落ちてんだよププ」みたいなブコメが、生まれてから一度もバズらないまま死ぬんだろうなっていう同業者からついて、ムカつくじゃないですか。とはいえ、AWSもそんな安くないし。
そこでCloudFlareパイセンの登場です。とある科学の超電磁砲TMによって、サイトを堅牢にしてくれます。
CloudFlareのいいところ
僕としてはAWSとほぼおなじ料金でだいたい似たような性能を持っているCloudFlareをお勧めします。このCloudFlareを使うと、WordPressのように動的なサイトでも強力にキャッシュでき、なおかつ無料から始められるんですね。
僕はたまたま月額$20の有料ユーザーなのですが、当時はSSLが有料だったのでそのまま払い続けいてるだけで、いまは無料でもSSL使えると思います。キャッシュへの負荷が有料/無料によってどれだけ違うのかはよく知りません。
で、普通にググるとW3TotalCacheなどを使って連携する方法が出てくるのですが、これは画像やJSなどをホストする設定なんですよね。
たしかにそれはそれで効果あるのですが、大量アクセスのときには真っ先にDBが死ぬので、ページキャッシュにCloudFlareを使いたいのですよ。CloudFlareはデフォルトだと静的ファイル(画像, JS, CSSなど)しかキャッシュしないので、DBにアクセスするPHPはキャッシュしてくれないんですね。
で、そのキャッシュ設定(ページルールというものを使います)については、こちらの記事に以前書いたので、参考にしてみてください。個別のページが /article/1234
だったとしたら、/article
以下をキャッシュするような感じですね。あ、そうそう、あとコメントフォームはデフォルトのものを使用せず、DisqusやFacebookコメントなどの外部サービスを利用することをおすすめします。
さて、一度キャッシュしてしまったら後は二度と削除されなくても構わない男前ブロガーには関係ありませんが、普通は削除や更新がありえますよね。
「ラーメン食べたみがあるな」とブログに書こうとして「おっぱい揉みたみがあるな」と書いてしまい、それが一年にわたってインターネッツの海に漂い続けるのもまた人生ですが、投稿を更新・削除したらキャッシュも消えて欲しいわけです。
そこでどうしたらいいのかというと、まず一つ目はなにかあった場合はCloudFlareの管理画面に入ってキャッシュを消すというアプローチ。大変めんどくさいですが、これはこれでありだと思います。
というのは、「消すのがめんどくさい」という制約があなたのブログ念能力を高めるんですね。クラピカ縛りですね。
[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)
昔の小説家は今の小説家よりも文章を削ることが上手だったと個人的には思うのですが、それは絶対に「直すのがめんどくさいから」なんですよね。いまだったら簡単じゃないですか。なので、自分のブログにおいてはあえて削除をめんどくさくするという手はありだと思います。
よりも無難なアプローチとしては、投稿に変更があったらCloudFlareのAPIを叩いてキャッシュを消しに行くです。僕が採用しているのはこちら。やり方を説明しようと思いましたが、もう眠いのでGithubのファイルを見てください。
CloudFlareの絶大な効果
さて、いままで色々と書いてきましたが、ようするに、こうなるわけですよ。僕が以前書いた代理店やSIerを褒め称える記事では、ブコメ1002で一日10万PVぐらいあったのですが、その転送量はこんな感じ!
どうですか。ほとんどサーバ本体には来ていません。
というわけで、「やろうと思えばAWSで複数台構成も余裕だけど自分でブログ立てる分にはそこまでめんどくさいことをしたくない、とはいえ突発的なバズでサーバを落としたくもない、なぜならブコメを書く奴らが許せないから」というブロガーにはさくらVPSのWordPressの前段にCloudFlareを置く構成をオススメいたします。
なお、僕はCloudFlareに金を貰っているどころか払っているユーザーであり、特に知り合いもいません。Facebookグループに投稿してもまったく反応がなかったので、いつか書こうと思っていただけです。というわけで、終わり。
[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)