カイワレの大冒険 Third

技術的なことや他愛もないことをたまに書いてます

サービスの安定化を目指す(2)

第一弾の続きです。第一弾では、サーバの処理能力を超えないよう、限界を知り、必ず上限を設けておく・無理はさせないということを述べました。

100の力しか出せないサーバなら、100以上は求めない。8割9割の力しか出せないようにしておく。安定させて稼働させるためにはそういう視点が必要だと述べました。

今回は、その視点を24時間365日持ち続けるための工夫について書いてみます。

常にデータを追う

はてな本で有名な言葉ではありますが、「推測するな、計測せよ」という言葉があります。確かに、10割求めるような設定はしないようにしたわけですが、それは「常に」維持されたものなのでしょうか?

たとえば、MySQLで立ち上がってるスレッド数をメモリから考えて、100に設定した場合に、100スレッドも立ち上がっているようだとやはり怖いわけです。これはapacheであろうとなんであろうと。やはり、アイドル状態の割合が高くて、ピーク時でもビジー状態のプロセスが5割超えないようにしておくぐらいが精神的に安心します。

では、どうやってその「状態」を「常に」追うことができるのでしょうか?
それがリソースモニタリングであります。

リソースモニタリングの活用

たとえば、この図を見てみましょう。

これはとあるサーバのMySQLのコネクションに関する情報を描画させたものです。リソースモニタリングツールとしては、Cactiというものを使っています。

ほとんどアクセスがないサーバなので、3スレッドしか立ち上がっていません。コネクションも1ないわけです。ただし、max_connectionとして、1K設定されています。

ここから何を読み取ればよいでしょうか。
確かにこのサーバにはほとんどDBアクセスが発生しません。このままデータを取得し続け、24時間単位、一ヶ月単位とデータを切り替えたとしても大したことは得られないかもしれません。

ただし、何かをきっかけに急にDBへのアクセスが急増したとします。そして、このサーバは最大で1000コネクション捌く設定がされています。このような状態ですから、おそらくそのピーク時にはロードアベレージがあがり、1000スレッド立ち上がる可能性も出てくるでしょう。

しかしながらこのサーバは1000スレッドさばけるほどの能力があるのでしょうか?これが前回述べた上限を設けるということで、おそらくこのサーバには1000スレッドさばけるほどの能力はないでしょう。

そのため、サービスは不安定に陥り、ピーク時が深夜帯であれば、エンジニアは眠れない夜を過ごすことになります。

色々データを取っておこう

上に挙げた例は極端ではありますが、サービスによって大体の特性はつかめるでしょうから、早いうちに今プロセスがどれほど立ち上がっているのか、ビジー状態なプロセスはどれくらいなのか、上限に対してどれほど余裕あるのか、リソースモニタリングツールを使って傾向を把握しておきましょう。

たとえば、ロードアベレージも同様にグラフ化できます。

そのほかにも、ネットワーク転送量(IN/OUT)、apacheプロセス数、ディスク使用量、iノード数、キャッシュヒット数などなどなどなど。取れそうなものは無理ない限り取っておきましょう。

また、リソースモニタリングツールも様々な種類があります。上記のはCactiのものですが、Muninだと以下のようなグラフになります。

ツールに関しては会社のなかで既に決まっている場合もあるでしょうし、個人であれば見やすいものが選べばよいでしょう。

最後に

いずれにしても、自分が使いやすく、そしてカスタマイズしやすいものが選べるとよいでしょう。キャッシュシステムとして、memcacheを使っていたけど、redisを使うことになって、redisのデータが欲しくなるかもしれません。

そのとき、すぐ拡張できるものを利用しておくのがよいでしょう。

そうして、てなずけておくことで、ディスクの使用が激しいな、トラフィック高くなりすぎだな、ピーク時のロードアベレージちょっとあがりすぎだな、キャッシュヒットしてなくないか、この調子だとこの倍アクセスきたら多分落ちるなとか、色々想定して、その対策も取ることができます。

もちろん、これだけやっても常に安定させることは「絶対」できるとは言えないでしょう。できるのは現状把握と、それを元にした今後の想定であり、想定外が起きた場合に対応できるかはまた別の問題になります。

ただし、データは取っておいたほうがよい。自分の中で基準が出来てくるし、綺麗な描写がされるとやはり精神的に安心できて、余計な心配をしなくて済みます。

そういう自己防衛のためにも、自社サービスの防衛のためにも、データを取って、モニタリングを続けるということは大事であると思い、書いてみました。

ホント寝られないサービスとか怖い過ぎて、絶対安定させるようやっておいたほうがよいよ!と最後にもう一度主張しておく。