Ads by Google
新しい記事を書く事で広告が消せます。
まず最初は、データベースの利用の仕方に問題があるというものです。
あるある、と思われた方もいらっしゃるのではないでしょうか。とてもよくある原因なので、私は設計時にもっとも警戒するようにしています。
大量のデータを高速に扱えるデータベースは便利です。レコード数が10000件ある中から1件のレコードを0.0005秒で読み込んでのけますが、これは10000行のファイルから読み込んでいたとしたらありえない数字です。
ですが、便利なために多用しすぎたり、あるいはデータベースの設計を誤ったりといった原因により、ここが遅さの原因になることがよくあるのです。
あまりに過負荷がひどいとデータベースがダウンしてシステムが停止することすらあるので要注意です。
また、運用開始時は大丈夫でも、運用していくうちにデータがたまって問題を引き起こすことがあります。これも注意が必要です。
どのような対策が必要になるかは別途専用の章を設けますのでそちらをご覧ください。
これはマッシュアップサイト系のみに当てはまる事項です。(みんなの動画サーチはマッシュアップサイトなので当てはまります)
WEB APIはかなり処理時間を食います。そのため、WEB APIを多用しているページは遅くなりがちです。すぐれたインフラを持つ大規模サービスのWEB
APIでも油断は禁物、1ページに2つ、3つと使えばまず応答時間の問題が発生します。
外部の問題なので、こちらが管理できることはあまりありません。
私が複数のWEB APIを使う場合、AJAXをはさむことで処理をわけることが多いのですが、それはこの遅さが理由の一つです。
キャッシュファイルが貯まりっぱなしになっている、ログのローテーションができていない、長期間VACUUMをしていないPOSTGRESQLを運用している、といった、問題のある運用を行っているケースです。運用開始時は動くので最初は問題がないのですが、時限爆弾と同じで、いつか爆発します。
ちなみにこれらは全部実例です。私がやったこともあれば、他人がやったのを見た/聞いたこともあります。
対策としては、運用マニュアルをしっかり策定してそのとおり実行する、ということにつきます。
運用マニュアルを作成していない場合は要注意。やりがちです。
必要な帯域と比べて利用している回線が細すぎるケースです。
画像や動画、ZIPなどの重いファイルを取り扱う場合は特に注意が必要です。また、WEB APIを多用する場合も応答が遅れるため問題になります。
回線を高速なものに変えるか、もしくは回線を多重化することが必要になります。
ハードディスクのI/Oが原因で遅いというものです。キャッシュの利用などによりディレクトリ内にファイルが大量に格納される、出力ファイルが大きい/多い、といった場合に問題になりやすいケースです。
適切なディレクトリ設計、出力の定時パッチ処理化などが必要になります。場合によってはハードディスクのRAID1+0やRAID5の採用や、ATAタイプを使っているならSCSIタイプのものにするなどハードウェア的な対処も行います。
一度にAPACHEで大量のユーザーをこなしている、データベースが巨大、もとからメモリが少なすぎる、といった原因でメモリが足りていないケースです。たいていメモリを増やすことになりますが、異常なループがあるといった処理自体に問題があることがたまにあり、その場合はそちらを修正しなければなりません。
大量のプロセスを走らせている、巨大なデータを処理する、ffmpegなど高い負荷がかかる処理をバックで走らせている、といった原因により、CPUの処理速度が追い付いていないケースです。処理内容そのものを変更するか、数量を制限するか、そうでなければCPUやサーバーを増設する必要があります。
これはPHPでの開発というよりはサーバーの運用にあたるテーマですが、機器の故障が原因で応答速度が悪化することもあります。そんなこともある、とは覚えておいたほうがいいでしょう。よくあるのはHDDの故障ですが、NICなどこまかい部品の故障もたまにあるようです。サーバーではなくネットワーク構成機器、たとえばHUBやルータの故障が原因になるケースもあります。
上記はすべてみんなの動画サーチでも起こりえるのですが、これらの中でも特に警戒しているのは、
1)データベース接続
2)ハードディスクI/O
3)WEB APIを使った外部接続
です。そのため、開発はこの3点への対策を考えながら行いました。
みんなの動画サーチ 現在の人気動画