2014年1月 のアーカイブ


2013年はWEBサイトそのものの面倒を見る機会が何度かあり、その中でサイトにつながりにくくなるという現象に遭遇した。
出来るだけそうならないよう心がけてはいるものの、そうなってしまったのは自分に原因が無くても申し訳ない気持ちになる。

ネットなどでつながらない報告がある時
「光の100メガプランだけどダメ」
といった書き込みを見かけたりする。それでもダメな時は100%無理だったりするけれど、多くの人はそこまでは知らないよねぇ、と思うことがあるので大まかに原因をまとめてみた。

サーバ負荷が高い

重いスクリプトを実行してサーバそのものが重くなっている場合。

例えばスクリプトの中で無限ループが起きればいつまでたってもレスポンスが返ってこないし、そこまで単純なことで無くてもデータベースへの問い合わせが遅いとか、ロジックが複雑で時間がかかるとか、インターネットで無くても手元のPCでだってよく起きている現象。
WEBサーバの場合はそれが複数同時に起きているので負荷が上がり出すと他の処理も巻き込まれてどんどん重くなってしまうケースが多い。

思い切ってapacheを再起動すると瞬間的に軽くなるが、また同じパターンで重くなることが殆どなので、それで嵐が過ぎるのを待つといった消極的な対応をすることもある。

解決策としてはスクリプトの軽量化や負荷が高くなるボトルネックの対応、サーバを増やしてロードバランシングするなど、色々な手法があり、システム屋として一番頑張れるところではある。
ただし実際起きてしまうと即対応がなかなか出来ないという針のむしろを味わうことになる。

負荷試験を行うという場合は大抵はこの負荷を測って改善する作業を想定する。

サーバのネットワーク負荷が高い

インターネットからサーバまでの回線速度はサーバによって様々で、たとえば「さくらのVPS」では、共有100Mbpsで接続されている。ざっくりな理屈の上では「光の100メガ」の人が一人サーバにガッツリ接続して通信してれば他からの通信は割り込めない状態になる。そうなれば他の人達がいくら速い回線でも繋がらない。

現実にはそこまでネットワークが専有される状況というのは滅多に無いのかもしれないけれど、スペックそのものが良くなっていくにつれて通信出来る量も増えていっているので、昔からの感覚があるのであれば、きっとそれよりは起きやすい。

もっとも簡単に起きるケースに巨大ファイルのダウンロード公開がある。
100Mbpsの回線で50MBのファイルを公開して3人が同時にダウンロードしはじめたら…ということを想像すると分かりやすい。単純計算で考えればもう一杯だ。

ちなみにネットワークが原因でつながらない場合はサーバ負荷は比例して高くなるということは無い。50MBファイルのダウンロードであれば頑張っているのはapacheのプロセス3つだけでしかないし、やっているのはバイナリのレスポンスなだけだ。

CDNといったコンテンツの分散がもっとも簡単な対策だけど、利用するにはお金がかかるわけで、その費用が必要であることを説明して理解してもらうには、現状ではまだそれなりの努力が必要だと思われる。

サーバのネットワークまで届いていない

DNSが参照できなかったりでサーバの名前解決ができない場合や、モバイル環境などで通信トラフィックが混んでいてそもそもインターネットまでちゃんと繋がっていない場合。サーバ側には来てないので状況が全然分からないので解決がなかなか難しい。

「光の100メガ」といった、クライアント側の回線の話ではあるのだけど、それぞれのクライアントで状況が違うので、実はもっとも厄介ではある。ただし、そういった報告やクレームが正式にくることは稀で、コミュニケーション出来る相手であればtracerouteしてもらうなんて手段で個別に解決は出来る。