ワードプレスの同時アクセス数過多でのサーバーダウン対策を語る
同時アクセスに強くする。
ワードプレス運営者の永遠の課題と言える。
自分もテレビの影響でのやばい集中アクセスで格闘してきたので強くなれた。
ここの考え方等を語りたい。
1、まず同時アクセスとは?
「1秒間に同時にアクセスするユーザー数」と考えていい。
言葉の通り多くのユーザーが同時にアクセスする状況です。
処理が完了していない状態で次から次へとアクセス。
重たいブログ・弱いサーバーだとダウンしてしまう。
ググると間違った情報が多く、
アクセス解析画面の「現在の閲覧数」を同時アクセスと説明しているサイトが目立つ。
それは接続完了して現在見ているユーザー数なので全然違う。
ということで、いかに1秒間に裁けるユーザー数を増やすか?
ブログ運営者はここの勝負となってくる。
2、ワードプレスはメモリ使用量が多い
メモリが多いほど高速化処理ができる上、ダウンしにくい。
ワードプレスはメモリを多く使います(PHPだけで1回表示で約10MB)。
これにMySQLのメモリ消費なども加わる(1回あたりは未調査)。
単純計算で同時アクセス100人なら1GB以上のメモリを使用してしまう。
さらにメモリを活用した「高速化」の仕組みがあり、
同時アクセスが多いと次に備えてプロセスを増やしてメモリを多量に使います。
プロセスあたり数十MBは使うので、すぐ数GBのメモリを使ってしまう。
当然、それに合わせてCPUの使用率も激増していく。
せっかくの高速化の仕組みなのですが、
負荷・同時接続数がみるみる上がり、レンサバは制限がかかって503エラーになるだろう。
したがって、対処方法は下記となる。
・メモリ使用量を減らす
・CPUをできるだけ使わない処理にする
・良いサーバーにする
これらの方法を解説します。
3、メモリ・CPUの使用量を減らす
ワードプレスの処理を簡単にすることで減らせる。
ワードプレスは莫大なPHPファイルを読み込み、そしてDBへのアクセスをします。
そのデータをキャッシュする仕組みもあり、メモリをたくさん消費してしまう。
特にDBへのアクセスはメモリとCPUを消費します。
そのため基本的な対策は「DBのアクセスを減らす」ことです。
具体的には「ほぼメインクエリーの発行だけにする」です。
記事ページを読み込むと必ずメインクエリーと添付画像用のクエリーを発行するのですが、
それ以外は読み込まないようにします。
「記事一覧」の表示はDBを使わず、自力でキャッシュしたデータで表示させます。
記事内の「関連記事」の表示も当然キャッシュから。
とにかく「WP_Query」を使わない。
あとはプラグインですね。
記事表示やデータ解析に絡むプラグインはメモリを多く消費します。
プラグインは最小限にしよう。
ワードプレスのメモリ・CPU対策はほぼこのくらいです。
これ以上はキャッシュプラグインを使っての静的化か、
DBを使わない独自システムに改良するしかない。
4、良いサーバーにする
制限が緩くCPU・メモリが良いサーバーに移管したい。
レンサバの同時アクセス耐性は表面上のスペックではわかりません。
各社ごとに「独自の制限」が設けられています。
その制限を超えると「503エラー」となる。
例えば、さくらレンタルサーバーは制限が厳しく、エックスサーバーは緩い。
そのため、レンサバならエックスサーバーなど制限が緩いところを選び、
かつ高スペックのプランにすることが対策となります。
ここは情報がほぼ無いので、どこが最強かはわからない。
完璧な対策はやはりVPS・クラウド・専用サーバーです。
これらは制限が無いので、スペックを限界まで使えます。
表面上のスペックで選べばいい。
一番良いのは複数台での処理分散です。
VPSを5台借りて、アクセスをその5台に振り分けて処理をする。
いくらでも増やせるので対策としては完璧です。
1分間3万アクセスとかを処理するとなると、これしか無理と思います。
5、理想の対策
ワードプレスを使わないことです。
ワードプレスというメモリ大量消費システムを使うから同時アクセスに苦しむ。
キャッシュプラグインを使うという手もありますが、
完全に静的になってしまうので、DBを使わないPHPシステムでの構築が望ましい。
メモリとCPU消費量さえ抑えればレンサバでも同時アクセスに気にすることは無くなる。
お金も安く済むので、悩む人は挑戦してみてほしい。
挑戦できない人はお金をかけるしかない。
いろいろお金かけてやるより、「脱ワードプレス」です。
結局はプログラミングが勝利する。
同時アクセス数対策はそんな世界。