2015年5月30日土曜日

[大規模システムの設計]基本概念(1)

 大規模システムをどのようにして作るか、そのノウハウについて記述する。
 まず最初に、なぜ大規模システムが必要なのかについて説明する。
 大規模システムは、「人にとって役に立つ仕組みを作る」ために必要なものである。何らかの仕組みを作るとき、それが小規模なものであれば目的・用途は自由に決めてよいものだし、作っている途中で変えてもよい。しかし大規模システムの場合、最初に定める目的が間違っていると、途中も最後に出来る成果物にも大きな影響が出てしまう。まずは、基本となる概念をしっかり定める必要がある。
 電子計算機によるシステムは、狭義のシステムである。「システム」とは本来「体制・体系」を示すものであり、元々は電子計算機によらない仕組みである。簡単に言うと「ある条件に合致した場合に、ある動作をする仕組み」である。自動販売機にコインを入れると投入金額が表示され、購入可能な商品のボタンが点灯するが、これは「コインが投入された場合」に「金額を表示する」「購入可能な商品のボタンを点灯する」という「仕組み」が動いているからである。
 およそ人が作り出す決まり事、ルールは「システム」であるということができる。人は集団となって初めて力を発揮することは、今さら確認するに及ばないことであるが、この集団を最大効率で動かすために必要となる決まり事が「システム」なのである。
 「1人で自動車を作れ」といって、できる人間はまずいないであろう。部品1つ作れない人が大半であるはずだし、作り方の全てを把握している人がいたとしても、その人が1人で自動車を作り始めて完成させるまでには途方もない時間が必要になる。しかし実際には、毎日何千台、何万台という自動車が作り出され、世に送り出されている。人は群体でこそ、本当の力を発揮するのである。
 「システム」とは人が作り出すものであり、群体としての強みを極大化し、最大効率を目指すためのものであるということができる。社会そのものを統御、統括していくための仕組みであると、いってもいいだろう。

 システムが担う重要な役割は、次の通り。
 (1) 状況把握に要する時間を極小化する
 (2) 管理に要する時間を極小化する
 (3) 意図した挙動を速やかに実現する

 前述した車の例を考えても明らかである。車に乗る人はエンジンをかけて、アクセルを踏み、ハンドルを握るだけで車という複雑極まりない仕組みを簡単に動かすことができる。最近は故障を知らせてくれるディスプレイも運転席に標準搭載されているし、定期的にディーラーに行けば、1日以内にメンテナンスは完了する。上記(1)~(3)が全て成立しているはずである。
 たくさんの人が関わるイベントを企画するような場合を想定してみてもいいだろう。状況も分からない、作業者が思った通りに動いてくれない、管理に時間がかかる、では企画はすぐにダメになってしまう。そのどれが欠けても、たくさんの人が関わる大規模な仕組みを動かすことはできないのである。
 何か困ったことがあったらお役所やおまわりさんに相談する、急な病気になったら救急車を呼ぶ、これも全て特定の条件が成立したときに動く仕組みのことを指すものである。この社会は様々なシステムの集合体であるということができる。このうち電子計算機によるシステムは、電子計算機だけで完結することができる役割を自動化するものである。
 電子計算機によるシステムはこのように狭義のシステムであるが、役割はそれ以外のシステムと同じである。重要なことなので2回記述する。

 (1) 状況把握に要する時間を極小化する
 (2) 管理に要する時間を極小化する
 (3) 意図した挙動を速やかに実現する

 世の中にある電子計算機によるシステムを見ていると、この要件を満たしていないものが多い。何かトラブルが起きた時にログを開いても手掛かりになる情報が何も出ていない、ほんの1行実装を変更するだけでシステム停止から再稼働まで1日がかりの作業になる、システムを動かしたい場合に必要な手続き(ログインや紙ベースの管理書類提出など)が多くて時間がかかる、そういうシステムを見たことはないだろうか。これは根本的な誤りである。
 大規模システムとは、決して管理可能性を失ってはならないものである。最大効率を目指すものでなくてはならず、煩雑な管理が不要なものでなければならず、いつでもすぐに状況を把握できるものでなければならない。この上更に意図した挙動を速やかに実現して初めて、大規模システムが成立する。
 前段が長くなってしまったが、この原理原則を決して忘れないようにしなければならない。最終的にシステム管理者が内部構造を全く知らない状況でも、バッチを1つ叩くだけで状況を把握でき、問題解決を依頼しなければならない技術者を速やかに判別でき、問題を解決する技術者もどこを修正するのかすぐに判断できてこそ、優れた大規模システムが成立するのである。

0 件のコメント:

コメントを投稿