設計の事始め(その2)~論理的なシステム設計のために

設計の事始め(その1)
http://www.moonmile.net/blog/?p=427

の続きです。

先のエントリでは図を使ってチェックポイントを洗い出しました。簡単なシステムならばこの程度でいいのですが、二重化を考えたり、多数のクライアントが参加している場合は、もう少し論理的な(数値的な)計算が必要になります。

というわけで、典型的なWEBサイトを例に、4つのチェックポイント(CPU/DISK/MEMORY/NETWORK)を調べていきます。

<001>
20091106_01

この図を Excel の表に直します。

<002>
20091106_02

いくつかのチェックポイントが増えているのは、表にしたときに考えた直したものです。
図には無かった、HUBやルータが入っています。インターネットを媒介しているので、ネットワーク速度が不明なところがあるのですが、大まかな数値を入れておきます。

これをハードの現状とします。

さて、これに対して要求仕様から「機能外要件」を入れます。機能外要件は、毎分何回の応答数を返すのか、1回につきどの位のデータ量が流れるのか、という要件です。
実は、この機能外はソフトウェア構成が決まらないと、正確に決定できません。たとえば、WEBサイトからダウンロードするデータ量なんてのは、Flashで組んだときと、典型的なHTMLで組んだときとは大きく違います。システムを Flash で組むのか、HTML で組むのかを要件定義の段階で決めることも可能なのですが(大抵は顧客の要望として、どちらかが決められます)、「言語に依存せずにシステム設計を行う」という(わたくし的な)指針に従えば、ここで Flash か HTML かを決めるのは適切ではありません。

ですが、現実問題として、

・どのくらいのサーバーが必要なのか?
・どのくらいのネットワーク容量を必要とするのか?

を決めないと、ハードを購入する手続きが間に合わないことが多いのです。
なので、ここは大雑把にでも決めないと仕方がないことがあります。

また、既存システムを移行する場合は、ネットワークの回線がそのままだったり、サーバーがそのままだったりすることがあります。そのような場合は、「制約」としてハードの現状が決まってきます。

さて、この「制約」としてのハードの現状に合わせて、ソフトの要件が満たせるのかをチェックします。あるいは、その制約を活かした形で、ソフトウェアを設計するための土台を作ります。

<003>
20091106_03

この表が、ソフトウェアが要求するハード要件になります。

少し詳しく表を見ていきます。

クライアントのPCは、決して非力ではありません。CPU 2.0GHz でブラウザを使って閲覧する(あるいは、専用のブラウジングソフトをインストールする)場合でも、そんなに小さいものではありません。ですが、考慮しないといけないのは、

・CPUパワーは 10% 以下に抑える
・メモリの使用量は、100MB 以下に抑える。

というところです。また、ネットワーク回線も 100KB/s 程度に抑えたほうがいいでしょう。

これらの上限は、本ソフトが動いている間でも他のソフト(Wordなど)が快適に動く条件を示しています。大抵、これを忘れてしまうので落とさないために表にします。

同様に、クライアントPCの回線は、ADSLルータの速度に縛られることを忘れないでください。
いきおい、重たいFTPなどを行った場合、ADSLルータは 100KB/s を確保できないかもしれません。その場合に備えた、ソフトウェア設計が必要になります。

逆にWEBサーバーのほうは、同時接続数(プロセス数)を計算に入れます。
ここでは100台のPCがアクセスすることを考えます。

そうなるとクライアントPCから100KB/sの要求を受けるので、サーバー側のネットワークは、10MB/sぐらいは必要ってことになります。
WEBサーバーのCPUを早くしたり、MEMORYを積んだとしても、ここのNETWORKが遅ければ、このシステムは成り立たないことが「すぐに」分かりますね。
逆に、10MB/s のネットワークが確保できない場合は、別なソフトウェア設計が必要になります。

・瞬間風速時にはシーケンシャルに100台をこなす。
・瞬間風速時には、50台分はエラーを返す。

最近のチケット販売やオークション受付のシステムは上記のどちらかを取っています。
もうひとつ、忘れてならないのは、

・ネットワークのデータ量を100KB/sから 1KB/sに減らす

という方法です。100分の1に減れば、ボトルネックはnetworkでは無くなりますね。
この方法は、ソフトウェア設計でしか解決できません。
# どう解決するかは、ご自分の頭で、・・・というか、ソフトウェア設計のエントリまで待っててください。

さて、もう少し表を詳細に見ていくと、WEB Server の両方に HUB が入っているのが分かります。
この HUB はネットワーク的に同じものを示しています。

つまり、

ルータ → HUB → WEB Server
     ↓
     DB Server
    
という構成を想定しているわけです。

そんな訳で、このHUBにも結構な負荷がかかりますね、ってことです。

構成的には、スイッチングHUBを入れるのが普通なのですが、

ルータ → HUB → WEB Server → HUB → DB Server

のように WEB サーバーにネットワークボードを2枚差しにするのもアリですよね。
あるいはルータ直結にして、

ルータ → WEB Server → HUB → DB Server

という構成も考えられます。

これらの発想は、先の図だけでは分かりません。
ここに示した Excel シートのように実際に数値を書かないとボトルネックが分からないものです。

そんな訳で、システム構成/設計はおしまいです。
値段とかネットワークの取り回し、OSライセンスの購入などについては専門のSEにお願いするといいでしょう。
値段については、いくつかのHPやDELLなどのいくつかの購入サイトを押さえておけば、そんなに難しくはありません(って言っていいのか?)。ただし、安い構成、切り替えの可能な構成などを考える場合には、マザーボードの種類やメモリの種類、HDDの種類まで関わってくるので、専門のSEにお願いしたほうがよいでしょう。

というわけで、次回はソフトウェア設計について書く予定です。

カテゴリー: 設計 パーマリンク