昔初めてサーバを購入することになったときサーバスペックをどのように決めたらいいか大いに悩んだものです。今振り返ってみれば出入り業者さんの提案も結構いいかげんで、当時ずいぶんとオーバースペックなマシンを購入させられたものです。そこで今回は購入サーバスペックの決め方について一般論を述べてみたいと思います。
大前提
どのようなサービスを行うにしてもサービスの内容及び想定している同時接続ユーザ数がある程度決まってないと判断のしようがないです。これは企画者かもしくはプロジェクトマネージャが決めるものだと思いますので決めてもらってください。
常識的に考える
サーバスペックの決め方には一応の目安が存在するにはしますが最終的には勘や経験則での判断になることが多いです。しかし特に初めての場合だと決めようがないですね。ではどうすればよいか。ここで私は「常識的に考える」という方法を提案します。
これはどういうことか。たとえばDBの場合は明らかにCPUを駆使しそうだしディスクI/O負荷がかなり高そうだ。なのでCPUやHDDを高スペックにしよう、という感じです。サーバがボトルネックとなりうる主要素は何度かご紹介している通り「CPU使用率」「メモリ使用量」「ディスクI/O」「TCPコネクション数」の4つになりますので、4つの要素それぞれについて考えていくことになります。
考え方一例
私がサーバスペックを決める場合は、例えばこのように考えます。
- WEBサーバ(動的コンテンツなし)・・・4要素いずれもそんなに負荷がかからないので最低スペックでOK(例:CPU1個,メモリ512M以上、HDD36GB回転数5400rpm以上)。このスペックのサーバを複数台購入しロードバランサー配下に設置します。
- WEBサーバ(動的コンテンツあり)・・・CPUとメモリを駆使する場合が多いです。サービスによってはディスクI/Oも高い可能性があります(例:CPU2個,メモリ1GB以上、HDD36GB回転数10krpm以上)。
- APサーバ・・・CPUとメモリを駆使する場合が多いです。サービスによってはディスクI/Oも高い可能性があります(例:CPU2個,メモリ1GB以上、HDD36MB回転数10krpm以上)。
- DBサーバ・・・CPU、メモリ、ディスクI/O全て駆使する場合が多いです。またディスク容量が当然データ量以上必要になります。あとRAID構成も必須だと思います。(例:CPU2個以上,メモリ2GB以上、HDD73GBx3回転数15krpm以上(RAID5))
※ご注意:ここで挙げた例では最適解をご紹介しているわけではありません。考え方の筋道を述べる上で直感的に理解しやすいようにとりあえず挙げた結論です。実際にスペックを詰めていく際にはシミュレーションや場合によっては実測まで行ってください。
最後に
今回サーバのスペックを決める上で「常識的に考える」という方法を提案しました。「常識的に考える」と言うと主観的に聞こえるかもしれませんが、これは言い換えると「仮説を立てる」ということに他なりません。仮説を立てる上で4つのサーバボトルネック要素を押さえるだけでもかなり精度の高いサーバスペック決定が行えるものと確信しております。立てた仮説をテスト環境で実測できる場合もありますが私が過去に関わったケースでは超大規模サイトであったため想定ユーザ数が多すぎて実測ができませんでした。それでもサービスイン後の結果を見る限り常にほぼ仮説通りでした。