プロセスその4
このあたりの作り方の仕組みは、Windowsでは殆ど継承されていない。というのは、WindowsではJobという概念が必須のものではなくなっていたからだ。実際Windows NT 4.0までJobという概念はなく、Windows 2000からJob Objectという形で「新機能として」追加される形になったからだ。6.6 ジョブオブジェクト(上巻P427~)にこのあたりの話が記載されているが、要するに「必要ならJob Objectという形で複数のプロセスをまとめて管理できる」というのがその骨子であり、逆に言えば新規プロセスの生成時に、それを含むJobが自動生成されることはない(上巻P352の図6-5でもこれは明らか)。これはなぜか、といえば使い方の違いがあったためだろう。以前も書いたとおり、Jobという概念は1つの処理が複数のプログラムから構成されるケースが多いところでは必須だし、またメインフレームにおけるバッチ処理の様な使い方をする際には便利だが、Windowsの様に原則としてインタラクティブ処理がメインとなるケースでは、必ずしも使い勝手が良くない。
では何故WindowsにJobという概念が追加されるようになったかというと、Windowsがバックエンドのサーバーなどにも使われるケースが多くなってきたからだ。Windowsで言えばDatacenter ServerとかCluster Serverといった製品は、もはやGUIでインタラクティブ処理を行うには向いていない。GUIはせいぜい運用管理画面が出ている程度だろうし、それすらも集中管理で行うのが一般的だ。また行う処理も、GUIで動かすにはあまり向いていない。例えば販売業であれば、日次処理(その日1日の売り上げを〆る処理)などがこれにあたるわけだが、小さな商店ならともかく、日本中に支店を構える大規模なチェーン店の本店だと、売り上げ件数が数十万とか、売り上げ金額も億とかになるわけで、そんなものをGUIでいちいち見ていても仕方が無い。それよりは集計が終わってから、まとめてレポートを出してくれたほうが遥かにマシである。また日次に合わせて在庫の更新とか自動発注、平均在庫期間のレポート更新、etc...など行うべき処理は一杯ある。こうしたものを1つのプログラムで順次行っていたらキリがないので、当然ながら複数の処理を同時に実行するといった形になるが、当然ながら日次処理が終わってから在庫の更新、それが終わってから自動発注になるだろうし、これに並行して日次処理→損益集計とか在庫の集計→平均在庫期間のレポート更新なども行われる事になる。こうした複数の処理を手作業でやってたら大馬鹿なので、自動化を考えねばならない。こうしたものは、相変わらずバッチ処理が有効だし、バッチ処理そのものの制御は各アプリケーションにあわせて新規で作るにしても、ベースとなる部分で複数プロセスの管理をまとめて行えるJobの概念を追加するのは有用だ、という判断であろう。
もう一つJobの概念が有効なのはClusterである。日本語では「粗結合マルチプロセッサ」などと呼ばれるが、要するに複数のマシンを比較的高速なネットワークでつなぎ、全体でまとめて作業するといった仕組みだ。各マシンは物理的には別々のOSが動いているが、環境は同じくしている。これで何をするのか? という話はここで説明するよりもこちらを見ていただいたほうが早いが、要するにハードウェア障害があっても作業を継続するための仕組みを提供するというものだ。Load Balancingでは、クライアントからあるリクエストが発行され、それが特定のサーバーで動く(どのサーバーで動くか、は動的に決定される)事になるが、かりにその最中にサーバーが物理的障害でダウンすると、出したリクエストが帰ってくる事はない。まぁこれはクライアントがリクエストを再送すれば良いという話(Webとかだとこれは通常許容される)が、Clusterの場合その先を行く。つまりあるCluster Memberがダウンした場合、そのMemberが実行していたJobを他のMemberが引き取って継続する、という仕組みが提供される。先のページにもあるとおり、これは完全なFail Overではない(つまりあるJobが実行中にダウンして他のMemberが引き継いだ場合、原則としてそのJobは最初からやり直しになる)ものの、「朝来たらマシンが止まっていて、Jobは何も終わっていない」という事態は避けられる事になる。
こうしたCluster環境では、そもそもProcess単位での管理はそぐわない。Processはある特定のOSの範囲でしか動作しないからだ。ところがJobの場合、これをCluster全体で管理する形に拡張することが可能であり、実際Windowsにしろ、VMSにせよ、Cluster Wide Jobというものが存在する。本書ではこうしたCluster Wide Jobについて説明が無いが、こちらにはWindows Server 2003ベースでのCluster Wide Jobの使い方の説明がある。こうしたものを利用可能とするために、Windows 2000以降でJobの概念を追加したのであろう。(続く)