JPH0895814A - ソフトウエアの更新のための装置及び方法 - Google Patents

ソフトウエアの更新のための装置及び方法

Info

Publication number
JPH0895814A
JPH0895814A JP7230830A JP23083095A JPH0895814A JP H0895814 A JPH0895814 A JP H0895814A JP 7230830 A JP7230830 A JP 7230830A JP 23083095 A JP23083095 A JP 23083095A JP H0895814 A JPH0895814 A JP H0895814A
Authority
JP
Japan
Prior art keywords
application
node
display
update
time
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP7230830A
Other languages
English (en)
Inventor
N Dudley Fulton Iii
フルトン サード エヌ.ダッドレイ
Yennun Huang
ファン エンナン
Chandra Mohan Rao Kintala
モハン ラオ キンタル チャンドラ
Nicholas John Kolettis
ジョン コレティス ニコラス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
AT&T Corp
Original Assignee
AT&T Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by AT&T Corp filed Critical AT&T Corp
Publication of JPH0895814A publication Critical patent/JPH0895814A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1438Restarting or rejuvenating

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Retry When Errors Occur (AREA)
  • Hardware Redundancy (AREA)
  • Stored Programmes (AREA)

Abstract

(57)【要約】 (修正有) 【目的】システムの実行を停止し、その実行を「真新し
い」状態で再始動させることにより信頼性を改善するソ
フトウエア更新技術を提供する。 【構成】フォルト・トレラント・プロセス103は、揮
発性メモリ105を有し、コード107には、フォルト
・トレラント・アプリケーションコード111と、コー
ド111がコンパイルされた場合にコード111と結合
するlibftコード113とが含まれる。アプリケー
ション・コード111は、libftコード113のル
ーチンを援用し、フォルト・トレラント・プロセス10
3がクラッシュまたはハングアップした場合に回復を実
行する。クラッシュまたはハングアップしてしまった場
合のフォルト・トレラント・プロセス103の再始動
は、watchdデーモン104により行う。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、一般的にフォルト
・トレラント・コンピューティングに関し、そして特に
ソフトウェアシステムがクラッシュまたはハングアップ
することを防止するための技術に関する。
【0002】
【発明が解決しようとする課題】ソフトウェアシステム
は、プロセスにより実行されるプログラムを組み合わせ
た部品で構成されている。以下、これらの部品をアプリ
ケーションと呼ぶ。多くのソフトウェアシステムには、
長時間実行し続けるべきアプリケーションが含まれてい
る。当然、そのようなアプリケーションは、決して機能
停止すべきものではない。しかしながら、ある程度の機
能をもったアプリケーションならば、そのアプリケーシ
ョンが常に正しく走行することを保証するのは、非常に
難しい。アプリケーションをどんなに慎重かつ念入りに
作成し、導入しても、非決定性の(入力と出力の関係や
状態推移が一意に決定できない)バグは除くことができ
ない。このようなバグは、アプリケーションを長い時間
実行するほど、顕在化する可能性が高くなる。このよう
なバグは、一時的な障害であっても、予知不可能な事態
や、後に高価につくような影響を引き起しかねない。例
えば、その障害が、到底その痕跡を残すことなく修復出
来ないほどデータベースを破壊してしまったり、(例え
ば、アロケーション、デアロケーションを繰り返すこと
により)メモリーの亀裂や膨張を引き起こし、これらが
結局はアプリケーションをクラッシュ(故障、暴走、機
能停止)してしまったり、あるいは、他のオペレーティ
ング・システムの資源を徐々に食いつぶし、結局は全体
のアプリケーションを麻痺させてしまったりといったこ
とが考えられる。
【0003】このような一時的障害を解決するために典
型的に採用される戦略は、事実上、反応的、すなわち障
害が発生してからとる行動により構成されているのであ
る。最近まで、そのような解決手段の多くは、手作業に
よるものか、「巧妙な」プログラミングにより、それぞ
れのアプリケーション特有な形で実装されていた。最近
になって、アプリケーションの親として記述されたモジ
ュールなど、プラットホームやアプリケーションから独
立したモジュールが、いくつかのアプリケーションで、
障害が発見された後に、その一時的な障害から回復する
ために使われるようになった。
【0004】これらのモジュール式の回復システムは、
洗練された回復方法を使用してきた。例えば、障害を起
こしたプロセスは、ロールバックが適切であると判断さ
れれば、直前のチェックポイントまでロールバックされ
る。モジュール式の回復システムで使われるより新しい
回復メカニズムは、ロールバックした後に、記録された
メッセージを再配列し、それを再実行することも含んで
いる。これについては、1993年 6月のフランス、トゥー
ルーズにおける第23回フォルト・トレラント・コンピ
ューティング国際シンポジウム会報138 〜144 頁、Y.M.
Wang,Y.Huang,W.K.Fuchs 「分散システムにおけるソ
フトウエア・エラー・リカバリーのための順次的再試
行」("Progressive Retry for Software Error Reco
very in Distributed Systems")で説明されている(19
93年 6月20日の出版)。
【0005】このような反応的フォルト・トレランス・
メカニズム(再始動、回復、ロールバック、再配列と再
実行)は、多くの場合有効に働き、長時間実行されるア
プリケーションにおいて高い可用性とデータの保全性を
保証可能とするには、常に実装すべきものである。この
メカニズムは、アプリケーションの外部で発生するだろ
う障害(例えば、テレコミュニケーションネットワーク
設備が切られた時は、アプリケーションは、回復処理に
入らなければならない。)から回復するのにも有効であ
る。
【0006】反応的なフォルト・トレランス・メカニズ
ムは有効ではあるが、十分ではない。アプリケーション
が障害から回復できないようなバグは依然として存在
し、そういう状況下で回復を試みるのに費やす時間は、
ロスでしかない。その上、反応的なメカニズムでは、障
害を起こす状態に対しては、全く制御できない。また、
ある状態の下では十分な回復時間であっても、別の状態
の下では全く不十分ということもある。本発明に求めら
れ、本発明によって提供されることは、障害の発生を防
ぐための事前処理的な技術である。
【0007】
【課題を解決するための手段】本発明は、あるアプリケ
ーションが障害を起こす可能性は、そのアプリケーショ
ンが走行しつづける時間の長さに従って増加するという
観察に基づいている。したがって、定期的にアプリケー
ションを停止し、真新しい内部状態で再始動すれば、障
害を防げることになる。この処置をここでは、「更新
(rejuvenation)」と呼ぶことにする。アプリケーショ
ンを更新する一つの方策は、新たに作られたプロセスは
真新しい内部状態を持っているという事実を利用するこ
とである。つまり、新たなプロセスによって実行される
よう、現在アプリケーションを実行しているプロセスを
停止し、そのアプリケーションを再始動させることによ
り、アプリケーションを更新することができるというこ
とである。
【0008】好ましい実施例では、アプリケーションが
更新する予定であることを更新ユティリティに示すこと
によって、どんなアプリケーションでも更新することが
できる。そこでユティリティは、現在アプリケーション
を実行しているプロセスを終わらせて、新しいプロセス
でアプリケーションを再始動させる。好ましい実施例で
は、本特許出願の親出願で説明されたwatchdデー
モン(注:デーモン:システムが稼働中、常にバックグ
ラウンドで実行されるプロセスで特別の機能サービスを
提供する役割を持つ)を使って、更新ユティリティは実
働化される。そこで説明したように、あるアプリケーシ
ョンをwatchdに登録してあることもあり、その時
にには、watchdがそのアプリケーションを監視し
ている。もしwatchdが、現在そのアプリケーショ
ンを実行しているプロセスが動作しなくなるか、または
ハングアップしたことを検知したならば、watchd
は新しいプロセスでアプリケーションを再始動させる。
【0009】watchdをアプリケーションを更新す
るのに利用するのに好ましい実施例では、プロセスがa
ddrejuvシェルコマンドを実行する。命令を実行
することにより、そのアプリケーションと、そのアプリ
ケーションをいつ、どのように更新するべきかを指定し
ているメッセージをwatchdに送ることになる。w
atchdは、アプリケーションを現在実行中であるプ
ロセスと、そのプロセスをどのように終わらせるべきか
を指定しているシェルスクリプトを作り、そのシェルス
クリプトをUNIX(UNIXはX/OPENの登録商
標)のcron(注 cron:UNIXがマルチユー
ザー・モード状態の時に走行するプロセス。定期的なス
ケジュールに基づいてコマンドを実行する)ユティリテ
ィに登録することにより、メッセージに応答する。スク
リプトの登録では、watchdは、更新メッセージが
指定した時刻にスクリプトが実行されるべきであること
を指定する。そこで、cronは指定された時刻にスク
リプトを実行する。cronが、更新するべきアプリケ
ーションを現在実行しているプロセスを停止したあと、
watchdはプロセスが動作しなくなったことを検知
し新しいプロセスでアプリケーションを再始動させる。
それによりアプリケーションの更新を完了する。その他
の対象物および優位性については、以下に記述する詳細
な説明と図面とを参照することにより、当業者に明らか
となる。
【0010】
【発明の実施の形態】図中の、参照番号は2つの部分に
別れていて、下2桁は、図の中での項目の番号であり、
残りの桁は、その項目が最初に出現した図の番号であ
る。したがって、参照番号201のつけられた項目は図
2に最初に出てくる。 次に述べる「詳細な説明」では、最初に更新に関する理
論について論じ、そして本特許出願の親出願で記述した
ソフトウエア・フォルト・トレランスのための構成要素
が、どのように更新を実働化するのに用いられるかを示
す。本特許出願の親出願からのソフトウェア・フォルト
・トレランスの構成要素の記述の関連した部分が、本特
許出願に含められる。
【0011】〔更新の理論〕次に述べる理論的な論述で
は、最初に、更新がどのように信頼性を増やすかを、一
般的に示し、そのうえで、故障の為の作業休止時間コス
トと比較した更新のコストを確定するモデルを提示す
る。そして最後に、更新させるべきアプリケーションを
どのように決定するかを示す。 信頼性 RA (t)をアプリケーションAが障害を起こさない、
つまりt単位時間の処理の後もサービスを提供している
確率とする。すると、マルコフ過程の推測によって、R
A (t+δt)は、Aがt単位時間に障害を起こさない
確率R(t)と、その後の区間δt内に障害が起きない
確率(1−λδt)の積に等しい。ここで、λは障害発
生率とする。よって、RA (t+δt)=RA (t)
(1−λδt)となる。RA (0)=1であるから、前
式は解を持ちRA =exp(−λt)となる。よって、
システムの寿命は時間と故障率λについての指数分布に
従うものと仮定する。信頼性を表す一般に使われる別の
測定基準は、∫0∞RA (t)δtで定義される平均故
障間隔(MTBF)である。これは、MTBF=1/λ
で求められる。通常、MTBFは経験的な方法によって
確定される。上記の指数分布の推測によれば、更新が行
われないアプリケーションAの時刻tにおける信頼性
は、
【数1】 である。
【0012】ソフトウエアの更新は、前式を区分連続関
数とすることで、その信頼性分布を不連続なものにす
る。ここで、更新の周期をTとすれば、信頼性Ar は、
【数2】 である。これら2つの信頼性分布(1)と(2)は図6
の実線601と602で例証されており、破線604と
605は次章で論じる2段階型の障害の動きを例証して
いる。
【0013】作業休止時間と作業休止時間コスト:図7
および図8 アプリケーションのパフォーマンス(つまり、そのサー
ビス能力)は、更新の間は、当然損なわれる。そこで、
更新の間の作業休止時間コストは更新(の実施)を決定
するにあったって計算に入れなければならない。更新は
スケジュールされた作業休止時間を含んでいるので、そ
の作業休止時間コストは、障害による予期せぬ作業休止
時間コストよりかなり小さいことが期待される。作業休
止時間コストを計算するため、まず最初に、図7に示さ
れる更新を行わないアプリケーションAの確率状態遷移
を見る。
【0014】あるアプリケーションが始動したとき、図
6の破線604で示されるそのベース寿命間隔に対応す
る期間は極めて頑強な状態S0 にとどまっており、その
後、破線605に示される通常の障害発生率の状態SN
に入る。これは、我々の経験によれば、十分にテストさ
れたソフトウエアシステムは障害が発生し得る状態(多
くの場合、あるプログラムが、その境界線状態に達する
か、そのリソースの一部を漏らすまでには間がある)に
達するまで暫くは、「健康な」状態に止まるからであ
る。このように、ソフトウエアシステムにおいては、図
7における状態S0から状態SN そして状態SN から状
態SF への遷移によって、また、図6の破線604と6
05によって示されるように障害は2段階の行動であ
る。状態S0から状態SF へ推移する確率は、他の確率
に比べて無視できるものと仮定する。前章で説明したよ
うに、Aは確率的平均λでSN からSF に移る。修復後
は、Sf からS0 に戻る。アプリケーションAの修復時
間もまた、定数r1 の指数分布であると仮定する。既
に、図7にてAが平均的確率r1 でS0 からSN に移動
することを示した。現実的には、r2 >>λ、つまりア
プリケーションは2段階の障害行動の最初の段階の移行
は、障害の第2段階よりも速やかに行われる。このよう
な、状態S0 から始まる2段階の障害行動では、等式1
のRA (t)は、図6の破線604と605で示される
ように双曲線関数であるべきである。しかし、r2 >>
λゆえ、指数分布は良い近似である。
【0015】これらの仮定の下に、等式p0 +pn +p
f =1,pn ・λ=p0 ・r2 ,pf ・r1 =pn ・λ
を解くと(ここで、p0 、pn 、pf はシステムが状態
0、SN 、SF にある確率を表す)、そのシステムの定
常使用不可係数、Pf が、1/(1+(r1 /λ)+
(r1 /r2 ))に等しいことが導かれる。そこで、L
単位時間間隔におけるAの総作業休止時間の期待値は、
【数3】 となる。Cf をAの予定していない作業休止時間の単位
当たりの平均コストとすると、L単位時間間隔における
Aの総作業休止時間コストの期待値は、
【数4】 となる。
【0016】ここで、図8に示す更新を伴うアプリケー
ションAの確率状態遷移図801を考えよう。図8で
は、SR は、更新された状態その他は、前述のとおりで
ある。更新率r4 と更新実施後の修復率r3 もまた、指
数分布に従うと仮定する。アプリケーションがt単位時
間経過毎に更新がなされるとすると、r4 は1/tに等
しい。この更新処理を伴うAのモデルから生成される確
率方程式を解くと、各確率状態に対して以下の式を得
る。
【数5】
【数6】
【数7】
【数8】
【0017】L単位時間間隔における更新を伴うAの総
作業休止時間の期待値は、
【数9】 となる。前述の場合に同じくCf を予定していない作業
休止時間の平均コストとし、Cr を更新処理中の平均コ
ストとすれば、L単位時間間隔におけるAの総作業休止
時間コストの期待値は、
【数10】 となる。更新処理を実行しなければr4 =0であるか
ら、数式3と5においては、
【数11】 また、数式4と6においては、
【数12】 となることにより、これを証明できる。アプリケーショ
ンが最も遊休状態にある時間に更新を実行すれば、r3
>r1 かつCf >>Cr であり、それゆえ、数式6で計
算された更新を伴うAの総作業休止時間の期待値は、数
式4で計算された更新を伴わないAの総作業休止時間の
期待値よりも低いだろう。このような更新の境界値につ
いては、次章で議論する。
【0018】更新の境界値 更新率r4 が変化したとき、作業休止時間と作業休止時
間コストがどう変化するのか考えよう。pf およびpr
にその値を代入することにより、数式9は、
【数13】 と書ける。r4 が変化したときの作業休止時間の振る舞
いを調べるため、上記の等式をr4 に関して微分する必
要がある。等式9の分子と分母がr4 について1次関数
であることに注意する。そこで、作業休止時間関数を微
分して、
【数14】 を得る。上記の導関数の分母がいつも正で、そして分子
の符号がr4 から独立した式、[r1 (1+(r2
λ))−r3 ]によって決定されることに注目すると、
興味深い。これは、r4 が変化したときに作業休止時間
が増加するか減少するかは、完全にλ、r1 、r2 およ
びr3 の値によって決まることを意味している。r3
1 (1+(r2 /λ))よりも大きいとき、導関数は
負となり、r4の値が変わるときに作業中止時間が常に
減少することを意味している。
【0019】同様に、r3 がr1[1+(r2 /λ)]
よりも小さいとき、導関数は正となり、r4 の値が変わ
るときに作業中止時間が常に増加することを意味してい
る。ここで、更新率r4 が変化したときの作業休止時間
コストの振る舞いを決定するため、数式6を調べる。数
式6の関数CostA r をr4 に関して微分して、
【数15】 を得る。ここでもまた、上記の導関数の分母がいつも正
で、そして分子の符号はr4 から独立した式[cr −c
f {λ(r2 +r3 )/(λ(r1 +r2 )+r1
2)}]によって決定される。これは、r4 が変化し
たときに総作業休止時間コストの期待値が増加するか減
少するかは、完全にCr 、Cf 、λ、r1 、r2 および
3 の値によって決まることを意味している。
【0020】これにより、非常に興味深い情報が得られ
る。あるアプリケーションに更新を行うべきか否かを決
定するのは、それによって更新が行われる更新率r4
よるのではなく、モデル中の他のパラメータによるので
ある。例えば、あるアプリケーションの更新と障害コス
トCr とCf は条件式cr <cf [λ(r2 +r3 )/
(λ(r1 +r2 )+r12 ](以下、条件式Pとす
る)が満たされるようなものであるかもしれない。その
場合、r4 に関してそのコスト関数の傾きは負であり、
4 が増加するとき、総作業休止時間コストの期待値が
減少することを意味する。これは、そのアプリケーショ
ンが更新によって利益を得ることを意味する。このケー
スでは、r4 が増加するとき総コストは減少しつづける
ことが与えられているので、いつでも、条件式Pが満た
されるかぎり、できるだけ多く更新を行う方が良いこと
になる。同様に、更新コストCr がcf [λ(r2 +r
3)/(λ(r1 +r2 )+r12 ]より大である場
合を考える。仮に、このアプリケーションに更新を実施
すると、更新率r4 が増加するとき総コストは増加す
る。これは、このアプリケーションが更新によって全く
利益を得ないことを意味する。
【0021】上記の議論は、ある境界となる効果が存在
することを表している。r4 =0のとき、更新はなく、
その作業休止時間とコストの値は、先に示した様に計算
できる。r4 が増加したとき、作業休止時間が増加する
か減少するかは、完全に条件式r3 <r1 (1+(r2
/λ))が満たされるか否かにかかっている。同様に、
4 が増加したとき、作業休止時間によって生じるコス
トが増加するか減少するかは、完全に条件式Pが満たさ
れるか否かにかかっている。どちらの条件もr4とは、
独立している。作業休止時間およびコストの関数は、こ
れらの条件が保持される限り、増加または減少し続け
る。
【0022】更新機能の例 更新機能は、AT&T長距離ネットワークを介し、且つ
RBOC(Regional Bell Operating Companies )の数
社で現在展開されているBILLDATSIIコレクタ
ー、請求発行データ収集システム(BILLDATSI
Iは、AT&T社の登録商標)で実施されてきた。この
システムにおける更新の間隔は、保守的に、フィールド
設置(installation)ごとに1週間で設定され、テスト
中のシステムのために確立された基準の寿命に近づく。
更新機能付のBILLDATSIIコレクターのフィー
ルドオペレーションが2年を超えたあと、セクション1
で記述した寿命に影響を与える種類の障害が今までにひ
とつも起こらなかった。これは、BILLDATSII
コレクターシステムは、この2年の間、何であっても障
害がなかったと言うわけではない。それらのすべての障
害の原因分析(RCA:root cause analysis )は、そ
の障害が、更新される構成要素に係わるものでないこと
を示した。
【0023】watchdを用いる更新のインプリメン
テーション BILLDATSIIにおける更新のインプリメンテー
ションは、そのシステムにとって特有のものである。好
ましい実施例では、いかなるユーザーレベルのアプリケ
ーションにも更新を適用できるようにソフトウエアのフ
ォルト・トレランスのためにもともと開発された構成要
素のセットが用いられる。これらの構成要素の次の説明
は、本特許出願の親出願からのものである。ソフトウエ
アのフォルト・トレランスのための構成要素の標準セッ
トは、自動フォルト検出を与えるためのモニタと、どの
ようにアプリケーション状態がセーブされ回復されるべ
きかを決定するためいかなるアプリケーション・プログ
ラムによっても使用されうるプログラムの再始動機能お
よびフォルト・トレラント・ライブラリとを含む。次の
説明は、モニタ(ここでは、watchdデーモンまた
は単にwatchdと呼ぶ)と、フォルト・トレラント
・ライブラリ(ここでは、libftと呼ぶ)と、共同
してアプリケーションレベルのフォルト・トレラント・
コンピューティングを許容する方法の概要を示し、ま
た、それらのインプリメンテーションの詳細を示す。
【0024】単一ノードにおけるwatchdおよびl
ibftの概要:図1 watchdおよびフォルト・トレラント・ライブラリ
libftは、プロセッサおよびメモリを含む単一ノー
ドからのみ構成されるシステムにおいて、または、ネッ
トワークに接続される複数のそのようなノードからなる
システムで実現されてもよい。概要は、単一ノードにお
けるwatchdおよびlibftを説明することから
開始し、その後、複数のノードにおけるwatchdお
よびlibftを説明する。好ましい実施例では、ノー
ドは、同じオペレーティングシステムを実行するワーク
ステーション、例えば、SUN OS4.1やUNIX
オペレーティングシステムのバージョン(UNIXは、
AT&T社の登録商標)であり、watchdは、UN
IXユーザープロセスを用いて実現され、libft
は、C言語で書かれたプログラムのライブラリとして実
現される。
【0025】図1は、単一ノードにおけるアプリケーシ
ョンレベルのフォルト・トレラント・コンピューティン
グに用いるシステム101を示す。システム101は、
ひとつ以上のフォルト・トレラント・プロセス103を
含む。ノード内で実行するオペレーティングシステムの
観点からすると、フォルト・トレラント・プロセスはそ
れぞれ、ユーザープロセスである。このため各フォルト
・トレラント・プロセス103は、揮発性メモリ(VM
EM)105を有する。コード107には、フォルト・
トレラント・アプリケーション(FTA)コード111
と、コード111がコンパイルされた場合にコード11
1と結合するlibftコード113とが含まれる。ア
プリケーション・コード111は、libftコード1
13のルーチンを援用し、フォルト・トレラント・プロ
セス103がクラッシュまたはハングアップした場合に
回復を可能にするさまざまなオペレーションを実行す
る。フォルト・トレラント・プロセス103がノードプ
ロセッサ上で実行している場合、矢印103で示される
ようにコード107における指令を実行し、揮発性メモ
リ105に記憶されたデータ109のオペレーションを
実行する。
【0026】libftコード113におけるルーチン
によれば、クリティカルメモリ(CR MEM)115
としてデータにささげられる揮発性メモリ105の一部
を部分指定できる。矢印119により示されるようにl
ibftコード113における他のルーチンは、フォル
ト・トレラント・プロセス103に、図1にクリティカ
ル・メモリ・コピー(CR MEMC)125として示
されている持続性メモリ123へCR MEM115の
データを書き込ませる。このオペレーションは、「チェ
ックポインティング」と呼ばれている。ハングアップま
たはクラッシュしたあとプロセス103が再始動される
場合、(矢印121によって示されるように)libf
tコード113における別のルーチンは、プロセス10
3に、それぞれ矢印119および121により示される
ように125におけるコピーからCR MEMC115
内のデータを回復させる。持続性メモリ123はまた、
ログファイル127を含んでもよい。ログファイル12
7は、libft113により与えられる特別なI/O
読み込み書き取りオペレーションからの結果データのロ
グを含む。これらのオペレーションは、それぞれ矢印1
31および129として示される。プロセス113が再
始動されるとき、他のファイル上のI/Oを実行し始め
る前にログファイル127におけるメッセージのすべて
を使い果たす。
【0027】クラッシュまたはハングアップしてしまっ
た場合のフォルト・トレラント・プロセス103の再始
動は、watchdデーモン104により行われる。w
atchdデーモン104は、次の2つのリスト:デー
モンがモニタするためのノード内のフォルト・トレラン
ト・プロセスを列挙しているフォルト・トレラント・プ
ロセス(FTP)リスト139と、グループ内のいずれ
かのフォルト・トレラント・プロセス103がハングア
ップまたはクラッシュした場合に再始動されなければな
らないフォルト・トレラント・プロセスのグループを列
挙しているフォルト・トレラントグループ(FTPグル
ープ)リスト141とに関連している。後にさらに詳し
く説明するように、リスト139内のフォルト・トレラ
ント・プロセス103の入力は、いずれのログファイル
127のみならずプロセス103がいかにしてモニタさ
れるかを示す。
【0028】デーモン104は、フォルト・トレラント
・リスト139で指定された方法でフォルト・トレラン
ト・リスト139で指定されたフォルト・トレラント・
プロセス103をそれぞれモニタし、矢印133が示す
ようにプロセス103がハングアップまたはクラッシュ
したか否かを決定する。モニタリングは、能動であって
も、すなわち、watchdデーモン104は、プロセ
ス103をポーリングし、その状態を決定しても、受動
であっても、すなわち、プロセス103により実行され
る場合デーモン104に信号を送信し、時間的間隔を指
定するlibft113内のルーチンがあってもよい。
デーモン104がその間隔の最後に至る前にルーチンか
ら別の信号を受けない場合は、デーモン104は、プロ
セス103は、ハングアップもしくはクラッシュしたも
のと仮定する。
【0029】デーモン104がフォルト・トレラント・
プロセス103がクラッシュしたものと決定した場合、
デーモン104は、プロセス103と、グループリスト
141に特定されるプロセス103を含むいずれのグル
ープに属するいかなる他のプロセス103とを再始動さ
せる。再始動プロセスは、次の通り:プロセスが再始動
された後、クリティカルメモリ115はいずれも、クリ
ティカル・メモリ・コピー125から回復される。ログ
ファイル127が存在する場合は、再始動プロセスは、
ログファイル127内のメッセージを使い尽くす。
【0030】フォルト・トレラント・コンピューティン
グ101のシステムには、次の記載すべき特徴がある。
まず、システム101は、システムが作動するところの
ノードのハードウエアまたはオペーレーティングシステ
ムが何であれ修正を必要としない。フォルト・トレラン
ト・プロセス103は、通常のユーザープロセスであ
り、watchdデーモン104は、ユーザープロセス
を用いて実行される。さらに、libftおよびwat
chdデーモンにより実行されるコードは、C言語で書
かれ、さまざまなオペレーティングシステム下で走行す
るよう容易に適合される。第二に、watchdデーモ
ン104を有するノードにおいては、プロセスにより実
行されるコードにlibft113からのルーチンを取
り込むことにより、いかなるプロセスも容易にフォルト
・トレラント・プロセス103に成りえる。アプリケー
ション・プログラマーがアプリケーション・コードにお
いてフォルト・トレラント機能を引き続き再度インプリ
メンテーションする必要はもはやない。第三に、システ
ム101は、高い汎用性を提供する。libft113
におけるルーチンを用いると、アプリケーション・プロ
グラマーは、そのプログラマーのアプリケーションに要
するフォルト・トレランスの量を正確に有するプログラ
ムを提供できる。オプションは、watchdデーモン
104をともなうプロセスを単に位置決め(resisterin
g )することに及び、このため、必要であれば、プロセ
スのメモリの一部がクリティカルメモリ115であると
宣言し、クリティカル・メモリ・コピー125にクリテ
ィカルメモリ115を定期的にセーブすることによりプ
ロセスを監視し、再始動させることができ、このためプ
ロセスがログファイル127におけるクリティカルメッ
セージのログを作成するためにデーモン104によって
再始動されたあと回復され、再始動されたプロセスは、
メッセージを使い尽くすことができる。
【0031】複数のノードを有するシステム内のwat
chdおよびlibftの概略:図2単一のノードのハ
ードウエアまたはオペレーティングシステムが決して故
障しない場合には、図1に示されたシステムは妥当であ
るが、ハードウエアまたはオペレーティングシステムが
故障した場合には役に立たない。この問題は、分散型シ
ステム特有の冗長度の利点を使用することにより解決さ
れるはずである。分散型システムに与えられたノードが
故障しても、システム内のすべてのまたはほとんどのノ
ードが同時に故障することは非常に稀である。したがっ
て、ひとつのノード上のフォルト・トレラント・プロセ
ス103が別のノード上で再始動されうる場合、プロセ
ス103は、最初のノード上のハードウエアおよびオペ
レーティングシステムのフォルトに対して耐性を有する
こととなる。
【0032】図2は、そのような分散型システムを示
す。システム201は、それぞれA、BおよびCでラベ
ル付けされた3つのノード203を有する。ノードはそ
れぞれ、他のノードのうちの少なくとも一つと接続する
ためのコミュニケーションリンクのみならず、少なくと
も一つのプロセッサとメモリとを有する。ノードはそれ
ぞれ、watchdデーモン104を有し、したがって
フォルト・トレラント・プロセス103をも有する。図
2には3つのフォルト・トレラント・プロセス103:
103(0)、103(1)および103(2)が存在
している。各ノードのデーモン104は、そのためのプ
ロセスの現状だけでなく、他のノード203の現状をも
モニタする。好ましい実施例では、watchdデーモ
ン104とそれが監視するノード203との関係は、シ
ステム201内のノード203がフォルト診断のための
適応リング211を形成するほどのものである。このよ
うにして、デーモン104(A)は、ノード203
(B)を監視し、デーモン104(B)は、ノード20
3(C)を監視し、デーモン104(C)は、ノード2
03(A)を監視する。デーモン104がどのノード2
03を監視するかは、ノードリスト(NL)205によ
り決定される。ノードリスト205の等しいコピーは、
各ノード内のデーモン104に利用される。ノード20
3(i)が故障した場合、その事実は、watchdデ
ーモン104により示され、watchdデーモン10
4は、残存しているノードにメッセージを伝達し、ノー
ドリスト205を修正して、ノード203(i)のロス
を反映する。
【0033】もちろん、ノード内のwatchdデーモ
ン104が別のノードからのフォルト・トレラント10
3を再始動させるものである場合、そのプロセス103
の状態のコピーを有さなければならない。このようにし
て、システム201内のデーモン104の別の機能は、
プロセッサ103の状態のコピーを保持することであ
る。その状態は、ファイル内に記憶され、クリティカル
メモリ125のいずれのコピーおよびそのプロセスのた
めのいずれのログファイル127をも含む。プロセス状
態のコピーは、プロセス番号と、ノード203(C)上
のノード203(A)からのプロセス103(1)の状
態の103(1)’および、ノード203(A)上のノ
ード203(B)からのプロセス103(0)の状態の
コピー103(0)’で示されたような「’」マークに
よって図2に示されている。図2に見られるように、プ
ロセス状態は、監視されるノード203からwatch
dデーモン104のノード203にコピーされる。コピ
ーは、デーモン104により監視されるノード内に作成
され、ウオッチング・デーモン124ヘ随時送られ、ク
リティカル・メモリ・コピー125またはプロセス10
3のためのログファイル127においてかなりの変更が
存在する。システム201では、単に単一のコピーが作
成され、それゆえシステム201のリング211内の2
つの隣り合うノードが故障しない限り再始動が可能であ
る。たとえば、デーモン104(A)は、デーモン10
4(C)へプロセス103(1)の状態のコピーを供給
することができ、次にデーモン104(C)は、デーモ
ン104(B)へプロセスの状態のコピーを供給でき、
またこの場合、プロセス103(1)を再始動不能とす
るためにはシステムのすべてのノードが故障しなければ
ならない。
【0034】前述の説明から明らかなように、各デーモ
ン104は、各フォルト・トレラント103が、システ
ム201のどこで走行しているかを知らなければならな
い。この情報は、ステータス・テーブル207に含ま
れ、この各デーモン104は、まったく同じコピーを有
する。後述するように、ステータス意テーブル207
は、他のすべてのwatchdデーモン104に対して
始動または再始動させるときメッセージを送るwatc
hdデーモンをそれぞれ有し、また、メッセージにより
要求されるようにステータス・テーブル207をアップ
デートすることによりそのようなメッセージに対応する
デーモン104をそれぞれ有することにより一貫されて
いる。
【0035】ノード203(i)が使用状態に戻ると
き、そのノード内のwatchdデーモン104(i)
は、デーモン104により監視されるノード内でデーモ
ン104からステータス・テーブル207のコピーを入
手する。ステータス・テーブル207は、ノード203
(i)とそれらのプロセスを再始動するために必要な状
態を含むファイルとへ局所的なプロセス103をどのノ
ード203が現在実行しているかを示す。デーモン10
4(i)は、現在プロセスを実行しているノードからフ
ァイルのコピーを入手し、コピーを使用するプロセスを
再始動させる。上述したように、デーモン104(i)
がプロセスを再始動させるとき、システム201内の他
のデーモン104にメッセージを送る。そして、デーモ
ン104が再始動されたプロセスを走行させている場
合、そのデーモン104は、プロセスの走行を中止し、
プロセス103が現在ノード203(i)上で走行して
いることを示すようにステータス・テーブル207を修
正する。他のすべてのデーモン104は、ちょうど示さ
れたようにそれらのステータス・テーブル207を修正
するだけである。
【0036】デーモン104はそれぞれ、次のアルゴリ
ズムにしたがって作動する。アルゴリズムでは、フォル
ト・トレラント・プロセス103はそれぞれ、(iで示
される)識別子を有する。加えて、プロトコル内で使用
される4つの補助変数がある。 1.pi:プロセスiが走行すると思われるところの主
要ノードの名称;この情報は、ステータス・テーブル2
07から得られる。 2.fi:プロセスiの連続する故障の数。 3.LocalHost:ローカルホストの名称。 4.MyWard:私が監視しようと思うノードの名
称。 5.MyOldWard:私がすでに監視したノードの
名称。 アルゴリズムのクリティカル状態ファイルは、クリティ
カル・メモリ・コピー125とプロセスのためのログフ
ァイル127を含む。プロセスにより実行されるプログ
ラムの開発者により供給されたメカニズムによりこれら
ファイルは保持されることが可能であり、libftフ
ォルト・トレラントライブラリ113により供給された
メカニズムにより保持されてもよい。
【0037】1./ * 初期化* / (a)作動中のノード2ー3から(任意に選択)ステー
タス・テーブル205および207を得る;有効な他の
ノード203がない場合は、ステータス・テーブルを初
期化する; (b)局所的に走行すべきプロセスiそれぞれにつき、 i.ステータス・テーブルからpiを得る; ii.ノードpiからプロセスの最も最近の状態を得
る;。 iii.プロセスを再始動させ、ステータス・テーブル
を全体的にアップデートする; 2.ループ永久的: 開始 (a)プロセスiそれぞれについてループ; 開始 i.ステータス・テーブルからpiを得る; ii.pi=LocalHostであれば A.プロセスiが有効であり、ハングアップしていない
場合、 fi=0; 継続する; B.増分fi; C.fi<maxであれば、プロセスiを再始動させ、
ステータス・テーブルを全体的にアップデートする;も
しくは、fi=maxであれば、プロセスiを回復する
ためバックアップノードを知らせる;もしくは、fi>
maxであれば、緊急忠告メッセージをプリントアウト
する; iii.もしくは、ノードMyWardがちょうど故障
した場合、 A.MyOldWardをMyWardにセットする; B.私の新しいワードを見つけ、MyWardを私の新
しいワードにセットする; C.pi=MyWardであれば、/ * わたしはプロセ
スのバックアップとなる* /MyWardからのプロセ
スiのクリティカル状態ファイルすべてをコピーする; D.もしくは、pi=MyOldWardであれば、/
* プロセスのための主要ノードがちょうど故障* /プロ
セスiを再始動させ、ステータス・テーブルを全体的に
アップデートする;クリティカル状態ファイルをすべて
私のバックアップにコピーする; iv.もしくは、 A.プロセスiが局所的に走行している場合、プロセス
の走行を中止する; 終了; (b)事故(時間切れ、または、プロセスクラッシュ)
のためウエイトする; 終了;
【0038】ノード故障および使用状態への復帰の例 どのようにしてノードが故障し、使用状態に復帰するか
をさらに詳しく示すために、ノード203(A)と20
3(B)と203(C)とを有する前のシステムを一例
として考慮する。説明を簡素化するため、yeastd
と称される単一のプロセス103にのみついて考える。
プロセスは、yeastd.staと称されたファイル
上にその状態を定期的に保存し、ログファイルyeas
td.logを有するものと仮定する。ノードAは、ノ
ードBを監視し、ノードBは、ノードCを監視し、ノー
ドCは、ノードAを監視する。まず、これらすべてのノ
ードは、有効であり、プロセスyeastdは、ノード
A上で走行している。では、次のシナリオで考えてみよ
う。 1.ノードCがダウン: ●ノードAは、なにもしない; ●ノードBは、ノードAからファイルyeastd.s
taとyeastd.logとをコピーし、ウオッチン
グ・ノードAとプロセスyeastdとを始動させる; 2.ノードCがシステムに再度加わる: ●ノードAは、なにもしない; ●ノードCは、ノードAからファイルyeastd.s
taとyeastd.logとをコピーし、ウオッチン
グ・ノードAとプロセスyeastdとを始動させる; ●ノードBは、ウオッチング・ノードAを停止し、ウオ
ッチング・ノードCを開始する; 3.ノードAがダウン: ●ノードCは、プロセスyeastdを再始動させ、ス
テータス・テーブル207およびノードリスト205を
全体的にアップデートし、ウオッチング・ノードBを始
動させる; ●ノードBは、ノードCからファイルyeastd.s
taとyeastd.logとをコピーし、ウオッチン
グ・ノードCとプロセスyeastdとを始動させる; 4.ノードAがシステムに再度加わる: ●ノードAは、ノードCからファイルyeastd.s
taとyeastd.logとをコピーし、ステータス
・テーブル207およびノードリスト205を全体的に
アップデートし、ウオッチング・ノードBを始動させ
る; ●ノードCは、yeastdプロセスを停止し、ウオッ
チング・ノードBを停止し、ウオッチング・ノードAを
始動させる; ●ノードBは、ウオッチング・プロセスyeastdを
停止する; 5.yeastdプロセスがクラッシュ、ノードAのみ
有効 ●ノードAは、プロセスを再始動させる;再始動が特定
の回数失敗した場合、ノードAは、ノードCにプロセス
を回復するよう知らせる; ●ノードCは、何もしないか、または、ノードAにより
指示された場合にyeastdプロセスを再始動させ、
ステータス・テーブル207を全体的にアップデートす
る; ●ノードBは、何もしないか、または、プロセスがノー
ドCにより再始動された場合にノードC上でウオッチン
グ・プロセスyeastdを始動させる。デーモン10
4はそれぞれ、ステータス・テーブル207を保持す
る。プロセスがあるノード上で再始動される場合、その
ノードのデーモン104は、すべての他のノードにアッ
プデートメッセージを送る。
【0039】なお、ネットワーク・トランジエントの故
障が起こった場合や、ノード203がシステムを再度加
える場合、プロセス103の1つ以上のコピーが同時に
走行することができる。プロセスのたったひとつの有効
なコピーがどの時点でも走行していることを確実にする
ために、watchdデーモン104はそれぞれ、いく
つかの別のノード103上で走行すると思われるプロセ
ス103も局所的に走行しているかを定期的に確認す
る。もし、そうであれば、デーモン104は、プロセス
に終了信号を送ることにより、プロセス103を走行さ
せることからそのノード103を停止しなければならな
い。たとえば、前述の例でのシナリオ4を考えて見よ
う。ノードAが故障したあと、ノードA上で走行してい
たプロセスyeastdは、ノードC上で再始動され
る。その後、ノードAは、修復され、システムに再度加
わる。ノードAの上のwatchdデーモンは、フォル
ト・トレラント・プロセス・リスト139を読み込み、
ノードAがプロセスyeastdを走行すべきであるこ
とを知る。まず、作動中ノードから最も最近のステータ
ス・テーブルを読み込み、プロセスyeastdが現在
ノードCで走行していることを見つける。yeastd
プロセスを走行させるる応答性を引き継ぐため、ノード
Aは、まず、ノードBからプロセスの状態ファイルをコ
ピーし、そしてプロセスを再始動させる。プロセスが首
尾良く再始動された場合、ノードA上のwatchdデ
ーモンは、それらのステータス・テーブル207をアッ
プデートするために他のすべてのノードにアップデート
メッセージを広める。アップデート後、ノードCは、ノ
ードAが上げられ、yeastdプロセスがノードA上
で走行していたことを見つける。ゆえに、ノードCは、
もはやプロセスを走行させなければならない。この場
合、デーモン104(C)は、ノード203(C)で走
行するプロセス103に終了信号を送る。なお、プロト
コルは、ノードAが、システムに再度加わるときに、プ
ロセスyeastdを引き継ぐようにする。このステッ
プは、ロードのバランシングのために必要である。この
ステップなしでは、すべてのプロセス103が、遂に
は、最後に故障するノード203上でのみ走行してしま
う。
【0040】リング変形(reconfiguration )の例 リング211が(故障または修復により)変形される際
は常に、ノード203間のクリティカル状態をコピーす
る必要がある。上述の例でのシナリオ3(複製の度合を
2とする)を考えて見よう。ノードAが故障する前に、
ノードA上のプロセスyeastdは、ノードBにでは
なく、ノードCにその状態をチェックポイントする。し
たがって、ノードBは、プロセスyeastdの状態を
持たない。ノードAが故障した際、ノードCは、その前
の状態とともにプロセスを再始動させ、同時に、ノード
Bは、ノードCからそのプロセス(すなわちyeast
d)の状態ファイルをコピーする。ノードCからノード
Bへの状態ファイルのコピーは、回復におけるノードC
の故障の可能性を処理するために必要出ある。いぞれに
せよ、チェックポイントが確立される前にノードCが再
度故障した場合は、ノードBは、プロセスの状態を持た
ないためプロセスを回復できない。
【0041】watchdデーモンの詳細 図3は、いかにしてデーモン104が好ましい実施例で
実現されるのかを示している。図3において、実線の矢
印は、情報のフローを示し、点線の矢印は、プロセス間
の親子関係を示す。watchdデーモン104は、2
つのユーザープロセス:モニタ(MON)301と状態
サーバー(STATE SRVR)303とによって実
施される。この設計には2つの理由がある。 ●デーモン104が故障する可能性を最小限にするた
め、不正確な実行が極めてありえないように十分に単純
な構成要素を含まなければならない、また、 ●デーモン104は、時間依存式と非同期式の両方のオ
ペレーションを実行できなければならない。非同期式の
オペレーションが時間依存式のオペレーションを妨げる
ことは許容されない。モニタ301で開始する場合、モ
ニタ301は、以下に述べることを行う: ●モニタ301が走行を開始するとき、状態サーバー3
03を作り出すため、UNIXオペレーティングシステ
ムのFORK機能を用いることを含む初期化オペレーシ
ョンを実行する; ●初期化後、モニタ301は、以下に列挙することを行
う: 1.クラッシュしたか否かを決定するためプロセス10
3をポーリングする; 2.状態サーバー303にメッセージを送る時間か否か
を決定するためにクロック302を監視する; 3.ポーリングが、プロセス103が停止したことを、
もしくは、タイムメッセージが送られる必要があるとき
を示す場合、状態サーバー303にメッセージを送る; 4.状態サーバー303がクラッシュした場合、モニタ
301は、状態サーバー303を再始動させる。
【0042】モニタ104の他のすべてのオペレーショ
ンは、状態サーバー303により実行される。特に、状
態サーバー303は、監視されるノード209が有効で
あるか否か、および、プロセス103がクラッシュまた
はハングアップしたか否かをポーリング以外の方法で決
定し、テーブル139、141、205、および207
を保持し、他のノードへプロセス状態のバックアップコ
ピーを供給する。より詳しくモニタ301により実行さ
れたオペレーションで引き続くと、信号0で使用された
場合、チェックされているプロセスの動作に影響を及ぼ
さないが、プロセスが停止された場合エラー値を戻すU
NIXオペレーティングシステムのキル・システム・コ
ールを使用することによりフォルト・トレラント・プロ
セス103がクラッシュしたか否かを決定するため、モ
ニタ301はポーリングを行う。ポーリングは、図3に
示されている。モニタ301がプロセス103が停止さ
れたことを検出した場合、プロセスを再始動する状態サ
ーバー303にメッセージ(矢印305で示される)を
送る。モニタ301は、時間がかなりであることを示す
状態サーバー303からのメッセージに応じてかなりの
時間を見失わないようにする。かなりの時間が生じたと
き、モニタ301は、その時間を示すメッセージを状態
サーバー303(矢印305により示される)に送る。
モニタ301は、プロセスの親がその子供が停止したと
きに受けるUNIXオペレーティングシステムのSIG
CHLD信号によって状態サーバー303がクラッシュ
したことを検出する。
【0043】デーモン104の残りのオペレーション
は、状態サーバー303によって実行される。状態サー
バー303は、矢印311で示されたように、他のノー
ド203内のデーモン104と通信し、矢印306で示
されたように、ポーリング以外の方法で局所的に走行し
ているフォルト・トレラント・プロセス103の状況、
および、矢印209で示されたように、リング211内
の次のノード203の状況をモニタする。状態サーバー
303は、そのノードのデーモン104にメッセージを
送付することにより次のノード203の状況をモニタす
る。デーモン104が反応しなかった場合は、次のノー
ド203は、ダウンすると予測される。次のノード20
3がダウンすることを検出すると、状態サーバー303
は、そのノードがダウンすることを示すメッセージを他
のデーモン104に送り、そのノード203内でリング
211を変形するため必要な作業を行う。局所的フォル
ト・トレラント・プロセス103が停止したかハングア
ップしたかを決定するために状態サーバー303により
用いられる方法は、次のことを含む。図3に示されたよ
うに、モニタ104が属するノード203上で作動する
すべてのフォルト・トレラント・プロセス103(局所
的フォルト・トレラント・プロセス(図3では、LFT
PS))は、状態サーバー303の子供である。したが
って、そららのプロセス103のうちのひとつが停止し
た場合、状態サーバー303は、その子供のひとつが停
止したことを示すUNIXオペレーティングシステムか
らのSIGCHILD信号を受ける。
【0044】状態サーバー303は、さらに、UNIX
オペレーティングシステム・メカニズムを用いることに
より、フォルト・トレラント・プロセス103がハング
アップしたか否かを積極的に決定する。別のプロセスの
特定されたポートがメッセージを受け入れることができ
ないときにビジービットをセットし、そのビジービット
が取り除かれたときにメッセージを送るプロセスを遮断
する。状態サーバー303は、プロセスにメッセージを
送り、その後、時間的間隔(時間的間隔の終わりは、モ
ニタ301からのメッセージにより示される)をウエイ
トする。ビジービットがその時間的間隔の間に取り除か
れない場合は、状態サーバー303は、プロセス103
がハングアップしたことを決定する。最後に、状態サー
バー303は、libft113により供給されるハー
トビート機能を実行するときは常に、プロセスがモニタ
301に送るメッセージをウエイトすることにより、フ
ォルト・トレラント・プロセス103がハングアップし
たか否かを決定することができる。その機能に送られた
メッセージは、プロセス103からの次のメッセージが
到着する前に、超えられてはならない間隔を特定し、状
態サーバー301が特定された間隔が尽きる時間までに
次のメッセージを受け取らなかった場合、状態サーバー
303は、プロセス103がハングアップしたことを決
定する。また、そのタイミングは、モニタ301により
実行される。
【0045】好ましい実施例においては、モニタ301
と状態サーバー303のどちらかが、局所的フォルト・
トレラント・プロセス103がハングアップまたはクラ
ッシュしたことを決定した場合、状態サーバー303
は、UNIXオペレーティングシステムのFORKシス
テムコールを用いることによってプロセス103を再始
動させて、クラッシュしたまたはハングアップしたプロ
セスと同様のコードを実行する新たなプロセスを作り出
し、クラッシュしたまたはハングアップしたプロセス1
03のために存在するするクリティカル・メモリ・コピ
ー125および/またはログファイル127を用いる
(矢印135)。再始動されたプロセス103が再度ク
ラッシュまたはハングアップした場合、状態サーバー3
03は、ウオッチング・デーモン104にメッセージを
送り、ウオッチング・デーモン104のノード内のプロ
セス103を再始動すべきであることを示してもよい。
もちろん、再始動されるべきプロセス103がクリティ
カル・メモリ・コピー105および/またはログファイ
ル127を有する場合、コピーおよびログファイルは、
ウオッチング・デーモン104のノードにコピーされた
はずである。
【0046】デーモン104が属するノード203がダ
ウンし、オペレーションを回復している場合、状態サー
バー303は、ノード203がダウンしたことを示す他
のデーモン104のすべてに対してメッセージを送り、
同時に、状態サーバー303は、別のノード203上に
コピーを有するフォルト・トレラント・プロセス104
が状態サーバー303のノード内で再始動されるときは
常に他のデーモンのすべてにメッセージを送る。加え
て、プロセス103のクリティカル・メモリ・コピー1
25またはログファイル127のコピーが、モニタ10
3が属するノードを監視するノード203に送られる必
要があるときは常に、状態サーバー303は、ウオッチ
ング・ノード内のデーモン104にコピーされるべきデ
ータを含むメッセージを送る。好ましい実施例では、状
態サーバー303は、次の追加の機能を有する。 ●フォルト・トレラント・プロセス103により援用さ
れるあるlibft機能に応答する(矢印307); ●モニタ301から(矢印305)、他のデーモン10
4から(矢印311)、および、局所的フォルト・トレ
ラント・プロセス103から(矢印307)のメッセー
ジに応じてテーブル139、141、205および20
7を保持する; ●局所的フォルト・トレラント・プロセス103と、。
他のノード203のためのそのようなコピーを提供し他
のノード203のためのコピーを受け取ることによりバ
ックアップノードとして(矢印313)ノードが機能す
るところのフォルト・トレラント・プロセス103との
プロセス状態コピー315を保持する。これらの機能の
ほとんどは、フォルト・トレラント・プロセス・テーブ
ル139と、フォルト・トレラント・プロセス・グルー
プ・テーブル141と、ノードリスト205と、ステー
タス・テーブル207とを含む。好ましい実施例では、
これらのテーブルのすべては、ファイル内に保持され
る。以下、これらのテーブルを詳しく考える。
【0047】リスト207、139、および141の詳
細:図4 図4は、これらのテーブルのうち3つ:ノードリスト2
07とフォルト・トレラント・プロセス139とフォル
ト・トレラント・プロセス・グループ141とを示す。
ノードリスト207について始めると、システム201
におけるノード203はそれぞれ、リスト207内に単
独のノードリスト・エントリ401を有し、ノードのエ
ントリはそれぞれ、単にノード203の名称403を含
む。リスト207の順番は、リング211の形状を決定
し、すなわち、リスト207内のエントリ403(j)
を伴う与えられたノードのためのデーモン104は、エ
ントリ403(jー1)を伴うノード203を監視し、
エントリ403(0)を伴うノード203のためのデー
モンは、エントリ403(n)を伴うノード203を監
視する。
【0048】状態サーバー303は、監視しているノー
ド203がダウンしたことを検出するか、または、ノー
ド203がダウンしたことを示す別のデーモン104か
らのメッセージを受け取るとき、状態サーバー303
は、ノードリスト205からノードのためのエントリを
取り除き、この取り除きがモニタ301が監視すべきノ
ード203に影響を及ぼす場合、状態サーバー303
は、そのノードの監視を開始する。状態サーバー303
は、デーモン104が走行しているところのノード20
3がシステム201に再度加わっていることを示すデー
モン104からのメッセージを受けるとき、要求された
ようにノードリスト205をアップデートし、アップデ
ートにより必要とされる場合、異なるノード203の監
視を開始する。前述の説明より明白なように、システム
201内のノード203それぞれは、ノードリスト20
5と等しいコピーを有する。
【0049】フォルト・トレラント・プロセス・テーブ
ル139で引き続くと、デーモン104が属するノード
上で現在有効であるもしくは有効となるであろうフォル
ト・トレラント・プロセス103はそれぞれ、テーブル
139内にエントリ(FTPE)405を有する。エン
トリはそれぞれ、プロセス103についての次の情報を
含む: ●フォルト・トレラント・プロセスの名称407;好ま
しい実施例では、これは、プロセスによって実行される
プログラムのためのパスネームである。 ●プロセス103がクラッシュもしくはハングアップし
たか否かを決定するためモニタ301がメッセージをお
くるべきポートのポート番号409; ●ノード203が終了(up)の場合、プロセス103が
走行すべきところのノード203の最初のノードの名称
411; ●プロセス103のためのクリティカル・メモリ・コピ
ー125とログファイル127とを含むファイルのリス
ト、クリティカル・ファイル413;および、状態サー
バー303がプロセス103がハングアップしたという
結論に達する前に待つべき最大時間であるタイムリミッ
ト(TL)415。
【0050】フォルト・トレラント・プロセス・エント
リ405内には、2つの情報源がある。その最初のノー
ドがテーブル139が属するノードであるプロセス10
3のエントリ405の場合、情報は、プロセス103と
デーモン104を有するいかなるクリティカル・メモリ
・コピーおよび/またはログファイル127とを登録す
るlibft内の機能により提供される。このような場
合、最初のノード411は、テーブル139が属するノ
ードの名称を含む。その最初のノード203が他の所に
あるプロセス103のエントリ405の場合は、状態サ
ーバー303が最初のノード203内にエントリを作る
場合、最初のノードをバックアップするためのひとつ以
上のノード203内にwatchdデーモン104にエ
ントリの内容を送り、関連したノード203内の状態サ
ーバー303がそれらのフォルト・トレラント・プロセ
ス・テーブル139へその情報を加える。特定されたひ
とつのバックアップノードが存在する場合は、そのwa
tchdデーモン104が最初のノードを監視するノー
ドとなり、また、複数のバックアップノードが存在する
場合は、そのデーモン104が第1のバックアップノー
ドなどを監視するノードとなる。
【0051】フォルト・トレラント・グループ・テーブ
ル141について述べると、エントリ417はそれぞ
れ、フォルト・トレラント・プロセス421の名称と、
そのフォルト・トレラント・プロセスが属するグループ
を示すグループ番号419とを含む。あるグループに属
するあるプロセス103が再始動されなければならない
場合、そのグループのすべてのプロセス103は同時に
再始動される。テーブル141の情報源は、テーブル1
39の情報源と同じであり、局所的フォルト・トレラン
ト・プロセス103の場合、情報は、libft機能に
より得られ、他のノードからコピーされたものについ
て、その情報は、バックアップされているノードごとに
デーモン104により得られる。フォルト・トレラント
・プロセス・テーブル139およびフォルト・トレラン
ト・グループ・テーブル141の内容から明らかなよう
に、異なる非局所的フォルト・トレラント・プロセスに
ついての情報が状態サーバープロセス303が属するノ
ード203に格納されるべき方法で、システム201か
らのノード203の除去またはシステムへのそのような
ノードの再設置がリング211を変更するごとに状態サ
ーバーデーモン303はそれらのテーブルをアップデー
トする。好ましい実施例では、状態サーバープロセス3
03がリング211の変更を知らされるとき、状態サー
バープロセス303は、ノードリスト205をアップデ
ートし、リング211の新しい形状が与えられるとテー
ブル139および141にコピーされるべき情報を含む
ノード203にメッセージを中継ぎして伝える。テーブ
ル139および141の内容は、もちろん、与えられた
ノードで走行する局所的フォルト・トレラント・プロセ
ス103と与えられたノードのリング211内の位置と
によって、ノード203へのノード203とは相違す
る。
【0052】ステータス・テーブル207の詳細:図5 前述したように、システム201内のすべてのノード
は、ステータス・テーブル207と同じコピーを有す
る。システム201で走行するすべてのフォルト・トレ
ラント・プロセス103のためのステータス・テーブル
207内にエントリが存在する。各エントリは、次のフ
ィールドを含む: ●フィールド503には、プロセスの名称が含まれてい
る; ●フィールド505には、プロセスが現在実行している
ところのノード203の名称が含まれている; ●フィールド507には、現在のノード上のプロセスと
連通するために用いられるポート番号が含まれている; ●フィールド509には、現在のノード上のプロセスの
ためのプロセス識別子が含まれている; ●フィールド511には、信号の詳細が含まれている。
この信号は、好ましい実施例が実施されるUNIXオペ
レーティングシステムが、プロセスを終了することによ
りこの信号に応答するものである; ●フィールド513は、プロセスのためのクリティカル
・ファイルのリストである。
【0053】上記テーブル内の情報は、次の方法により
得られる:ノード203が(新しいノードであるためや
回復オペレーションであるために)システムに加えられ
た場合、状態サーバー303は、すでに走行中のノード
203からステータス・テーブル207のコピーのため
問うメッセージを送る。コピーが戻った場合、状態サー
バー303は、テーブルからそれのステータス・テーブ
ル207を作る。すでに述べたように、どのノード上の
状態サーバー303がフォルト・トレラント・プロセス
103を始動または再始動する時はいつも、すべての他
のデーモン104にメッセージを送る。そのメッセージ
は、プロセス名と、プロセスを始動しているノードの名
称と、ポート番号と、プロセスIDと、クリティカル・
ファイルのリストとを特定する。与えられたノード20
3内の状態サーバー303がメッセージを受けたとき、
ステータス・テーブル207内のプロセスのためのエン
トリを作る。ステータス・テーブル207内のプロセス
のための別のエントリが存在する場合は、状態サーバー
303は、そのエントリを削除する。状態サーバー30
3はまた、メッセージで特定されたプロセス103を現
在走行させているか否かを決定する。プロセス103の
ためのフォルト・トレラント・プロセス・テーブルエン
トリ405が存在し、そのエントリが別のノード103
を最初のノード411として示す場合、状態サーバー3
03は、プロセスの局所的実行を終了する。この手段に
より、2つの結果が得られる:まず、システム201内
のステータス・テーブル207のすべてのコピーが終始
一貫され、次に、フォルト・トレラント・プロセス10
3が、最初のノードが停止またはいずれにせよプロセス
を走行できない限り、常にその最初のノード203で走
行するようになる。
【0054】テーブル139、141、205および2
07の腐敗(Corruption)防止 好ましい実施例では、状態サーバー303がテーブルを
照会するごとに、腐敗のために得るデータをチェック
し、腐敗の証拠が見つかった場合は、状態サーバー30
3は、別のノード203からステータス・テーブル20
5およびノードリストの新しいコピーを取り出し、それ
らのテーブルからすべてのテーブル139、141、2
05および207のすべてを再構築する。同様に、状態
サーバー303がテーブルをアップデートまたは置換す
るときはいつも、テーブルをアップデートまたは置換
し、その後腐敗のチェックをする。もし何かが見つかっ
た場合は、テーブルの新しいコピーが取り出され、上述
したように作られる。 フォルト・トレラント・システム101および201の
オペレーション フォルト・トレラント・システム101および201
は、好ましい実施例ではUNIXオペレーティングシス
テムのシェルプロセスによって実行されるコマンドによ
り、またlibft113ルーチンにより制御される。
システム101および201のオペレーションがコマン
ドおよびlibftルーチンの説明によって以下に開示
される。
【0055】watchdデーモン104のためのコマ
ンド ノード上のwatchdデーモン104を始動させるた
めに、 watchd [n] を用いる。ここでn(複製の度合)は、デーモン104
が走行するところのノード203上を走行するプロセス
の状態コピー315を有するノード203の合計数であ
る。複製の省略時の度合は2である。このnが大きくな
ればなるほど、プロセスは頑丈となる。たとえば、nが
2の場合、プロセスは、2つのノードが同時に故障した
場合、回復不能となる。一方、nが2の場合、2つのノ
ードが同時に故障した場合についても常に回復可能であ
る。しかしながら、nが大きくなればなるほど、オペレ
ーションのチェックポイントのための諸経費がかかる。
長い寿命と短い停止時間をともなう実際上のシステムに
おいては、システムの有用性の点で、複製の度合は2が
最適である。Y.HuangおよびP.Jalote
「最初のサイトアプローチの反応時間分析におけるフォ
ルト・トレランスの効果(Effect of Fault tolerance
on Response Time-Analysis of Primary Site Approac
h)」コンピュータに関するIEEE会報41(4):
420−428、1992年4月、参照。
【0056】ノードから他のノードへフォルト・トレラ
ント・プロセスを移動するために、moveproc
〈proc〉〈node〉を用いる。ここにおける、
〈node〉は宛先ノードである。なお、ステータス・
テーブル207から見つけることができるのでソースノ
ードは必要ない。このコマンドの目的は、ロードの釣り
合いである。より軽くロードされたノードにプロセスが
移動させられるようにし、プロセスの反応時間を改善す
る。もちろん、プロセスが移動させられた場合、フォル
ト・トレラント・プロセス・テーブル139および関連
するノード内のフォルト・トレラント・グループ・テー
ブル141は、したがってアップデートされ、移動され
たプロセスは、新しいノード内で実行し始めた場合、シ
ステム内のステータス・テーブル207は、以前記述し
たようにアップデートされる。
【0057】システム内のフォルト・トレラント・プロ
セスをオンラインで加えるまたは削除するために、ad
dwatch〈name or pid〉〈path〉
〈port〉〈node〉〈time〉[〈file
s〉]delwatch〈name〉を用いる。ここに
おける〈node〉はプロセスが〈name〉が走行し
ている最初のノードである。〈node〉は、局所的機
械名のためのキーワードである、ノードのシステム名ま
たは名称localである。〈port〉は、プロセス
が使用しているソケットポート番号である(ソケットが
なければ0)。〈path〉は、プロセス〈name〉
または〈pid〉のバイナリを見つけることのできる全
経路を意味する。この情報は、論点(argument)〈fi
les〉がプロセス状態コピー315を含むファイルの
リストである場合に必要とされる。たとえば、プロセス
ydは、マシンgryphon上で走行している。wa
tchdデーモンにプロセスを監視させるために、ad
dwatch yd/usr/local/bin/y
d 0 gryphon 0 また、これらのコマンドの実行は、テーブル139、1
41および207に変更をもたらす。システム内のノー
ドをオンラインで追加または削除するために、 addnode〈node〉 delnode〈node〉 これらのコマンドに応じて、すべてのデーモン104
は、それらのノードリスト205を変更し、リング21
1の形状に直接影響を受けるこれらデーモンは、プロセ
ス状態コピー315を移動し、フォルト・トレラント・
プロセス・テーブル139およびフォルト・トレラント
・グループ・テーブル141を形状により要求されたよ
うに変更する。ノード203の削除の場合は、そのノー
ド上を走行するプロセス103のためのエントリをステ
ータスリスト207から取り除く。
【0058】watchdデーモン104を管理するた
めのlibft機能 libft113は、watchdデーモン104を管
理するための数多くの機能を含む。それらには、デーモ
ン104を有するプロセス103を登録するための機能
と、プロセス103からデーモン104に心拍信号(he
artbeat signal)を提供する機能と、プロセス状態コピ
ー315を操作する機能とがある。 デーモン104を有するプロセス103を登録 機能regwatchは、デーモン104を有するプロ
セス103を登録する。登録後、デーモン104は、監
視するプロセス103を始動させる。 ========================== int regwatch(proc,port,time) char *proc; int port; int time; ==========================
【0059】この機能は、3つのパラメータ:プロセス
名であるprocと、プロセスがプロセッサ間連絡のた
めに用いるポート番号であるportと、最大タイムア
ウトを規定するためのtimeとを取る。この機能の実
行により、これらのパラメータを用いる状態サーバー3
03にメッセージを送って、フォルト・トレラント・プ
ロセス139内およびプロセス103のためのステータ
ス・テーブル207内にエントリを作り、他のデーモン
104にメッセージを送ることにより、それらのデーモ
ンは、それらのステータス・テーブル207をアップデ
ートすることができる。パラメータは、プロセス103
のためのフォルト・トレラント・プロセス・リスト・エ
ントリ405内のフィールド407、409および41
5のために用いられる。watchdデーモンには、プ
ロセス103がハングアップしたか否かを検出する必要
がない場合、time=0とすることができる。心拍信
号をwatchdデーモンに送る
【0060】前述したように、状態サーバー303は、
プロセス103から「心拍」信号を聞くことができる。
そのような信号は、libft機能hbeat()によ
り生成される。機能hbeat()は、論点として整数
値を取る。この値は、状態サーバー303がプロセス3
03からの心拍信号を待つべき最大間隔を特定する。状
態サーバー303がその間隔内で心拍信号を受け取らな
かった場合は、状態サーバー303は、プロセスがハン
グアップしていると考え、それを再始動させる。
【0061】更新のインプリメンテーションの詳細:図
9および図10 好ましい実施例における更新のインプリメンテーション
は、アプリケーションを現在実行しているプロセスを終
了させることと、次のプロセス上でアプリケーションの
実行を再始動させることにより、アプリケーションのた
めの真新しい内部状態を生成する。これを行うために
は、インプリメンテーションは、watchdデーモン
104と、UNIXオペレーティングシステムのほとん
どにあるcronデーモンとを使用する。Stephe
n G.Kochan氏およびPatrick H.W
ood氏による「UNIXシステムの研究(Exploring
theUNIX System )」HaydenBooks、インデ
ィアナポリス、1987年、277〜278ページまた
はUNIXオペレーティングシステムの書類の一部であ
るmanページにおいて詳しく述べられているように、
cronは、ユーザーにより決められた時間にユーザー
のためにシェルスクリプトを行う。その実行は、一度で
もまたは繰り返されてもよい。
【0062】図10は、インプリメンテーションの外観
図である。デーモン104を用いるアプリケーションを
更新するには(図1参照)、どのプロセスが更新を実行
されるか、どのようにして又いつ更新が行われるかを特
定するためにaddrejuvシェルを用いる。add
rejuvは、複数のプロセス1003のためのシェル
により実行される。この実行の結果、プロセス1003
は、プロセス間の連絡(IPC)、addrejuvメ
ッセージ1005をwatchdデーモンのプロセスの
うちのひとつに送る。好ましい実施例では、メッセージ
を受け取るプロセスは状態サーバー303である。wa
tchdデーモン104は、スクリプトがcronデー
モン1007に実行されるべき時間とともにシェルスク
リプトを提供する。cronデーモン1007がシェル
スクリプトを実行するとき、終了信号1009をアプリ
ケーションプロセス1011に送信する。アプリケーシ
ョンプロセス1011も終了信号1009もシェルスク
リプト901で特定されている。上述のwatchdデ
ーモンの説明で詳しく述べたように、アプリケーション
プロセス1011は、状態サーバープロセス303の子
供であり、ゆえに、状態サーバー303は、アプリケー
ションプロセス1011が終了したときにSIGCHL
D信号1013を受信する。状態サーバー303は、監
視しているプロセスがアプリケーションを新たなプロセ
ス1011’を生み出すことにより停止および再始動し
た時に行う通りに反応する。新たなプロセス1011が
アプリケーションを実行し始めたとき、watchdお
よびlibftの説明で前述したようにセーブしたクリ
ティカルメモリを用い、ログされたメッセージを消費す
る。
【0063】さらに詳しくは、addrejuv100
2のシンタックスは、addrejuv<app_na
me><cmd|signal:[elapsedti
me]><signal:[elasedtime]>
<time>である。<app_name>は、更新を
実行されるアプリケーションの名称である。<cmd|
signal>は、アプリケーションを現在実行してい
るプロセスを終了するために用いるコマンドまたはオペ
レーティングシステム信号番号である。このコマンド
は、1プロセスまたはプロセスのグループを停止できる
シェルスクリプトと成りうる。コマンド名の代わりに整
数が得られる場合、その整数は、信号番号として考えら
れ、watchdは、更新の時にプロセスに信号を送
る。[elasedtime]パラメータは、特定され
た信号が送られる時間と、次の信号が送られる時間との
間を経過する時間を特定する任意のパラメータである。
好ましい実施例では、省略時の経過時間は、15秒であ
る。第3の論点は、<signal>である。この信号
は、第1の<cmd|signal>が実行されたの
ち、プロセス[elasedtime]に送信される。
この遅れは、このアプリケーションのプロセスがその状
態を真新しくし、終了するよう力が加えられる前にそれ
自身で終了することを許容する。もちろん、libft
ルーチンは、アプリケーションが再始動されるときに必
要となるであろう状態を確保するために用いられる。プ
ロセスが確実に終了されるために、SIGKILL信号
が、第2の信号<signal>がプロセスに送信され
たあとにプロセス[elasedtime]に送信され
る。<time>は、更新が行われる時間である。この
時間は、独立的に特定されても、または現在の時刻に関
連して特定されてもよい。<time>のシンタックス
は、UNIXオペレーティングシステムのatシェルコ
マンドに用いられたタイムフィールドとまったく同じで
ある。
【0064】addrejuvの使用例は、次の通り:
addrejuv aa 15:30 3:20 no
w+1 minute これは、aaと名付けられたアプリケーションを現在実
行するプロセスに信号15(SIGTERM)が送信さ
れることを特定しており、この信号は、それを受信する
プロセスが終了することを示すものであり、30秒後
に、信号3(SIGQUIT)が送られ、この信号は、
プロセスが中止および停止することを示すものであり、
また20秒後に信号9(SIGKILL)が送られ、こ
の信号は、プロセスがプロセス自身で終了しなかった場
合にプロセスを停止する。最後の論点now+1 mi
nuteは、第1の信号がaaを現在実行しているプロ
セスに今から1分で送られることを示す。addrej
uvにより送信されたIPCを受信すると、デーモン1
04は、フォルト・トレラント・プロセス・テーブル1
39をチェックし、addrejuvコマンドで特定さ
れたアプリケーションのためのエントリ405が存在す
るか否かを確認し、もし存在した場合は、エントリ40
5のフィールド407内にaaが現われる。エントリ4
05がない場合は、デーモン104は、単に、addr
ejuvを実行したプロセスに対する事実を示すメッセ
ージを送り返す、また他の実施例では、デーモン104
が特定されたプロセスをフォルト・トレラント・プロセ
ス・テーブル103に加えてもよい。そのようなエント
リ405が存在する場合、デーモン104は、addr
ejuvおよびエントリ405のための論点における情
報を使用し、addrejuvコマンドで特定されたア
プリケーションを現在実行しているプロセスをどのよう
に又いつ終了させるかを特定するシェルスクリプト90
1を構築する。
【0065】図9は、そのようなシェルスクリプト90
1の一例である。スクリプト901がシェルによって実
行された場合、903でラベル付けされたスクリプトの
第1の2つのラインは、シェルにより使用されるプリン
タへ引用符(引用文)および日付により示されたメッセ
ージを出力する。次のライン904は、更新が行われて
いることを示すwatchd状態サーバープロセス30
3(プロセス識別子(PID)2604で示されてい
る)に信号を送信する。状態サーバープロセス303
は、終了されたプロセスに応答し始める前にある時間間
隔待つことにより信号に応答する。この待ち(ウエイ
ト)は、共に終了されなければならないグループ内のす
べてのプロセスがwatchdデーモン104がアプリ
ケーションの実行を再始動し始める前に終了されること
を保証する。次のライン905は、addrejuvの
第2の論点で特定されたSIGTERM信号をアプリケ
ーションaaを現在実行しているプロセスに送信する。
ここで、そのプロセスは、プロセス識別子(PID)2
613を有しており、これは、watchdデーモン1
04がアプリケーションaaのためにステータス・テー
ブル207内のステータス・テーブル・エントリ501
内のフィールド509から得るものである。次のライン
907は、シェルスクリプト901を実行するプロセス
に第2の論点で特定された時間である30秒間休止させ
る。そして、ライン911では、第3の論点で特定され
たように、信号3はプロセス2613に送信される。ラ
イン913では、シェルスクリプト901を実行するプ
ロセスがまた、第3の論点で特定された20秒間休止す
る。その後、再度、SIGKILL信号9をプロセス2
613に送信し、実際に停止したことを確認する。そし
て、シェルスクリプト901を実行するプロセスにより
さらに15秒の休止が存在する。次に、addreju
vコマンドは、上述した論点とともに実行される。第4
の論点で特定された次の更新のための時間は、オリジナ
ルのaddrejuvコマンドに特定されているのと同
じである。最後に、メッセージは、更新が終了したこと
を示してプリントされる。
【0066】addrejuvコマンドは、シェルスク
リプト901に含まれているので、watchデーモン
104は、プロセス1011’上のアプリケーションを
再始動させるだけでなく、cronデーモン1107か
らのaddrejuvメッセージ1005’を受信し、
watchdデーモンがプロセス1011’を特定する
スクリプト901’(図示せず)を供給することにより
上述したようにcronデーモン1107に応答し、c
ronデーモン1107は、上述したようにスクリプト
901’を実行する。このメカニズムの結果、addr
ejuvコマンドで特定されたアプリケーションは、定
期的に更新される。例えのスクリプト901は、1分走
行したあとアプリケーションaaを更新するようにす
る。どのアプリケーションにも利用可能となるような方
法でアプリケーション更新を実施するのにwatchデ
ーモン104を使用することには利点が数多くある。ま
ず、watchデーモン104がユーザープロセスを作
り上げ、そのようにしてハードウエアまたはオペレーテ
ィングシステムを修正することなく、いかなるシステム
上でも走行することができるということである。さら
に、アプリケーションがlibftライブラリ・ルーチ
ンを使用する場合、更新されたプロセスに求められる真
新しい内部状態の種類が、正確に画定される。
【0067】しかしながら、他のインプリメンテーショ
ンも可能である。一般的に、更新は、アプリケーション
の実行が「真新しい」内部状態で再始動されるようにす
る技法によって成し遂げられてもよい。たとえば、更新
は、アプリケーションを実行しているプロセスを一時停
止し、プロセスの現在の内部状態を真新しい内部状態と
取り替え、プロセスを復活させることにより成し遂げら
れる。さらに、コンピュータシステム上で実行するアプ
リケーションに一般的に利用可能な更新を行う別の方法
がある。たとえば、オペレーティングシステムは、UN
IXオペレーティングシステムが現在cornを提供す
るのと同様のやり方で更新のユーティリティを提供する
こともできる。そのようなアプリケーションでは、ad
drejuvに応答された何であっても、更新を実行さ
れるアプリケーションの更新ユーティリティに知らせ、
そのユーティリティは、更新を行う。そのようなアプリ
ケーションは、更新システムの構成要素間の連絡に、プ
ロセス間連絡やシェルスクリプト以外の方法を用いても
よい。
【0068】結論 上述の詳細な説明は、アプリケーションの故障の可能性
を減らすためにいかにして更新が用いられ、与えられた
アプリケーションが更新により利益を得るかどうかをい
かにして決定するかを、ソフトウエア・フォルト・トレ
ランスにおける当業者に開示した。この詳細な説明は、
さらに、本特許出願の親出願で開示されたソフトウエア
・フォルトレランスを提供するためのシステムが、いか
にして、どのアプリケーションにも利用可能な更新を行
うように用いられるかをも開示した。上記で指摘したよ
うに、他の方法がそのような有用性を提供するために用
いられることも可能であり、また、他のインプリメンテ
ーションが親出願のシステム内で可能であることは、当
業者であれば容易に理解できるであろう。上述のすべて
において、詳細な説明は、すべて具体的かつ例証的およ
び非限定的なものとしてみなされるべきものであり、こ
こで開示された発明の範囲は、特許法により許される最
大範囲を持つものとして添付の特許請求の範囲によって
のみ決定されるべきものである。
【0069】
【発明の効果】以上の説明から明らかな通り、本発明に
よれば、新たなプロセスによって実行されるよう、現在
アプリケーションを実行しているプロセスを停止し、そ
のアプリケーションを再始動させることにより、アプリ
ケーションを更新させることができ、また本発明による
更新は、どんなアプリケーションにも適用できる。
【図面の簡単な説明】
【図1】単一ノードにおける本発明のソフトウェア・フ
ォルト・トレランスのためのシステムの概観図である。
【図2】複数ノードにおける本発明のソフトウェア・フ
ォルト・トレランスのためのシステムの概観図である。
【図3】本発明の好ましい実施例の説明図である。
【図4】好ましい実施例で使用されるテーブルの説明図
である。
【図5】好ましい実施例で使用される追加のテーブルの
説明図である。
【図6】更新を行う場合と行わない場合のアプリケーシ
ョンの信頼性を示す説明図である。
【図7】更新が行われていないアプリケーションの状態
遷移図である。
【図8】更新が行われているアプリケーションの状態遷
移図である。
【図9】好ましい実施例で採用されるシェルスクリプト
の説明図である。
【図10】好ましい実施例の処理を示す説明図である。
【符号の説明】
101 システム 103 フォルト・トレラント・プロセス 104 watchdデーモン 105 揮発性メモリ(VMEM) 111 フォルト・トレラント・アプリケーション(F
TA)コード 113 libftコード113 115 クリティカルメモリ(CR MEM) 123 持続性メモリ 127 ログファイル 139 フォルト・トレラント・プロセス(FTP)リ
スト 203 ノード 207 ステータス・テーブル
───────────────────────────────────────────────────── フロントページの続き (72)発明者 エンナン ファン アメリカ合衆国 08807 ニュージャーシ ィ,ブリッジウォーター,リンバーガー ドライヴ 33 (72)発明者 チャンドラ モハン ラオ キンタル アメリカ合衆国 07059 ニュージャーシ ィ,ウォーレン,マウンテン アヴェニュ ー 29 (72)発明者 ニコラス ジョン コレティス アメリカ合衆国 08520 ニュージャーシ ィ,ハイツタウン,ガーデンヴュー テラ ス ナンバー18 51

Claims (20)

    【特許請求の範囲】
  1. 【請求項1】 コンピュータシステム内で実行するアプ
    リケーションの故障の発生を減少させるための装置にお
    いて、 コンピュータシステム内で実行されているプロセスに一
    般的に使用可能であり、アプリケーションのうちのひと
    つのアプリケーションが更新を行われるべきであること
    を示す更新表示を提供するための手段と、 更新表示に応答するコンピュータシステム内の手段で、
    アプリケーションの実行を停止し、実行を停止する前の
    アプリケーションの内部状態とは異なる内部状態で実行
    を再開することによりアプリケーションを更新する手段
    とからなることを特徴とする装置。
  2. 【請求項2】 前記更新表示は、アプリケーションが更
    新を行われるべき時間を示す時間表示を含み、 前記更新表示に応答する手段は、前記時間表示により示
    された時間にアプリケーションの実行の停止を開始する
    ことを特徴とする請求項1に記載の装置。
  3. 【請求項3】 前記更新表示に応答する手段は、アプリ
    ケーションを定期的に更新することを特徴とする請求項
    1に記載の装置。
  4. 【請求項4】 前記更新表示は、ある時間の間隔を示す
    時間表示を含み、前記更新表示に応答する手段は、前記
    時間表示により特定された時間の間隔を用いてアプリケ
    ーションを定期的に更新することを特徴とする請求項1
    に記載の装置。
  5. 【請求項5】 前記装置は、アプリケーションにより使
    用可能で、前記異なる内部状態を特定するための手段を
    さらに有し、 前記更新表示に応答する手段は、特定された内部状態で
    実行を再開することを特徴とする請求項1に記載の装
    置。
  6. 【請求項6】 前記更新表示は、ひとつ又はそれ以上の
    オペレーションを示すコマンドを含み、 前記更新表示に応答する手段は、アプリケーションの実
    行を停止するときオペレーションを実行することを特徴
    とする請求項1に記載の装置。
  7. 【請求項7】 前記更新表示は、どのように実行が停止
    されるかを示した停止方法表示を含み、 前記更新表示に応答する手段は、まず、前記停止方法表
    示により特定されたように実行を停止し、そのうえに、
    実行を完全に停止することを特徴とする請求項1に記載
    の装置。
  8. 【請求項8】 前記コンピュータシステムは、アプリケ
    ーションを実行するための複数のプロセスを供給する手
    段を含み、 アプリケーションは、第1のプロセスで実行しており、 アプリケーションを更新する手段は、第1のプロセスを
    終了し、第2のプロセスで実行を再始動させることによ
    り更新を行うことを特徴とする請求項1に記載の装置。
  9. 【請求項9】 アプリケーションを更新する手段は、 終了表示を提供し、前記第1のプロセスの終了を検知す
    ると、前記第2のプロセスで実行を再始動させることに
    よりそれに応答することにより更新表示に応答する第3
    のプロセスと、 前記第1のプロセスを終了することにより前記終了表示
    に応答する第4のプロセスとを有することを特徴とする
    請求項8に記載の装置。
  10. 【請求項10】 前記装置は、アプリケーションにより
    使用可能で、前記異なる内部状態を特定するための手段
    を有し、 前記第3のプロセスは、特定された異なる内部状態を用
    いて前記第2のプロセスで実行を再始動させることを特
    徴とする請求項9に記載の装置。
  11. 【請求項11】 前記第3のプロセスは、ハングアップ
    および/またはクラッシュしたプロセスを再始動するた
    めのデーモン・プロセスであり、 前記第4のプロセスは、特定された時間でオペレーショ
    ン指定で特定されたオペレーションを実行するためのオ
    ペレーティング・システム・ユーティリティであり、 前記第4のプロセスに前記特定された時間を提供し、さ
    らに、オペレーション指定として終了指定を提供するこ
    とを特徴とする請求項10に記載の装置。
  12. 【請求項12】 前記異なる内部状態を特定するための
    手段は、アプリケーションに使用可能なそのライブラリ
    内のルーチンであることを特徴とする請求項10に記載
    の装置。
  13. 【請求項13】 前記更新表示は、ひとつ又はそれ以上
    のオペレーションを表示するコマンドを含み、 前記第3のプロセスは、前記終了表示内のコマンドを含
    み、 前記第4のプロセスは、前記第1のプロセスを終了する
    とき、前記コマンドにより表示されるオペレーションを
    実行することを特徴とする請求項9に記載の装置。
  14. 【請求項14】 前記更新表示は、どのように実行が終
    了されるかを示した終了方法表示を含み、 前記第3のプロセスは、前記終了表示内に前記終了方法
    表示を含み、 前記第4のプロセスは、まず、終了方法表示により特定
    されたように実行を終了し、そのうえに、完全に実行を
    終了することを特徴とする請求項9に記載の装置。
  15. 【請求項15】 前記更新表示は、アプリケーションが
    更新を行われるべき時間を示す時間表示を含み、 前記第3のプロセスは、前記終了表示内に時間表示によ
    り示される時間を含み、 前記第4のプロセスは、前記終了表示に示された時間で
    終了表示に応答を開始することを特徴とする請求項9に
    記載の装置。
  16. 【請求項16】 前記更新表示内の前記時間表示は、時
    間の間隔を示し、 前記第4のプロセスは、前記終了表示に示された時間の
    間隔で、終了表示に定期的に応答することを特徴とする
    請求項15に記載の装置。
  17. 【請求項17】 前記時間表示は、更新表示が提供され
    る時間に関する時間を示し、 前記第3のプロセスは、終了表示における更新表示を含
    み、 前記第4のプロセスは、前記第1のプロセスの実行を終
    了したあと、更新表示を提供し、 これによりアプリケーションは、定期的に更新が行われ
    ることを特徴とする請求項15に記載の装置。
  18. 【請求項18】 コンピュータシステム内で実行される
    方法であり、コンピュータシステム内で実行するアプリ
    ケーションの故障の発生を減少させる方法において、 前記コンピュータシステム上で実行するいかなるプロセ
    スにおいて、アプリケーションが実行されるべきことを
    示すコンピュータシステム内の更新表示を提供する工程
    と、 アプリケーションの実行を停止し、実行の停止前のアプ
    リケーションの内部状態とは異なる内部状態で実行を再
    開することにより前記更新表示に応答してアプリケーシ
    ョンを更新する工程とからなることを特徴とする方法。
  19. 【請求項19】 前記コンピュータシステムは、アプリ
    ケーションを実行するための複数のプロセスを提供し、 アプリケーションを更新する工程は、 アプリケーションが実行する第1のプロセスを終了する
    工程と、 第2のプロセスで実行を再始動させる工程とを含むこと
    を特徴とする請求項18に記載の方法。
  20. 【請求項20】 前記方法は、 第3のプロセスにおいて、終了表示を提供することによ
    り前記更新表示に応答する工程と、 第4のプロセスにおいて、前記第1のプロセスを終了す
    る工程を実行することによって終了表示に応答する工程
    と、 前記第3のプロセスにおいて、前記第1のプロセスの終
    了を検出し、前記第2のプロセスで実行を再始動させる
    工程を実行することによりそれに応答する工程とをさら
    に有することを特徴とする請求項18に記載の方法。
JP7230830A 1994-09-08 1995-09-08 ソフトウエアの更新のための装置及び方法 Pending JPH0895814A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US30330394A 1994-09-08 1994-09-08
US08/303303 1994-09-08

Publications (1)

Publication Number Publication Date
JPH0895814A true JPH0895814A (ja) 1996-04-12

Family

ID=23171439

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7230830A Pending JPH0895814A (ja) 1994-09-08 1995-09-08 ソフトウエアの更新のための装置及び方法

Country Status (4)

Country Link
EP (1) EP0701209B1 (ja)
JP (1) JPH0895814A (ja)
CA (1) CA2152329C (ja)
DE (1) DE69528428T2 (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004288196A (ja) * 2003-03-20 2004-10-14 Microsoft Corp オーディオ処理オブジェクトによるアクセス違反時の障害回復
KR100455566B1 (ko) * 2000-06-30 2004-11-09 인터내셔널 비지네스 머신즈 코포레이션 코드 갱신을 위한 장치 및 방법
JP2006216023A (ja) * 2005-02-01 2006-08-17 Microsoft Corp アクセス制限されたバッファを用いる際のセッション状態を保持するためのメカニズム
WO2013146252A1 (ja) * 2012-03-30 2013-10-03 日本電気株式会社 ソフトウェア延命時期決定システム、ソフトウェア延命時期決定方法、およびプログラム
US8789045B2 (en) 2009-04-23 2014-07-22 Nec Corporation Rejuvenation processing device, rejuvenation processing system, computer program, and data processing method
US8984123B2 (en) 2009-04-23 2015-03-17 Nec Corporation Rejuvenation processing device, rejuvenation processing system, computer program, and data processing method
CN109726118A (zh) * 2018-11-19 2019-05-07 北京达佳互联信息技术有限公司 一种应用程序开发方法、装置、电子设备及存储介质

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6457063B1 (en) * 1998-04-30 2002-09-24 Sun Microsystems, Inc. Method, apparatus & computer program product for dynamic administration, management and monitoring of daemon processes
US6810493B1 (en) * 2000-03-20 2004-10-26 Palm Source, Inc. Graceful recovery from and avoidance of crashes due to notification of third party applications
US6810495B2 (en) * 2001-03-30 2004-10-26 International Business Machines Corporation Method and system for software rejuvenation via flexible resource exhaustion prediction
CN116860508B (zh) * 2023-08-31 2023-12-26 深圳华锐分布式技术股份有限公司 分布式系统软件缺陷连续自愈方法、装置、设备及介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2602891B1 (fr) * 1986-08-18 1990-12-07 Nec Corp Systeme de correction d'erreur d'un systeme a multiprocesseurs pour corriger une erreur dans un processeur en mettant le processeur en condition de controle apres achevement du redemarrage du microprogramme a partir d'un point de reprise
US4979105A (en) * 1988-07-19 1990-12-18 International Business Machines Method and apparatus for automatic recovery from excessive spin loops in an N-way multiprocessing system
JPH03188528A (ja) * 1989-09-27 1991-08-16 Hitachi Ltd ジョブ実行管理方法およびシステム
CA2106280C (en) 1992-09-30 2000-01-18 Yennun Huang Apparatus and methods for fault-tolerant computing employing a daemon monitoring process and fault-tolerant library to provide varying degrees of fault tolerance

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100455566B1 (ko) * 2000-06-30 2004-11-09 인터내셔널 비지네스 머신즈 코포레이션 코드 갱신을 위한 장치 및 방법
JP2004288196A (ja) * 2003-03-20 2004-10-14 Microsoft Corp オーディオ処理オブジェクトによるアクセス違反時の障害回復
JP4589645B2 (ja) * 2003-03-20 2010-12-01 マイクロソフト コーポレーション オーディオ処理オブジェクトによるアクセス違反時の障害回復
JP2006216023A (ja) * 2005-02-01 2006-08-17 Microsoft Corp アクセス制限されたバッファを用いる際のセッション状態を保持するためのメカニズム
US8789045B2 (en) 2009-04-23 2014-07-22 Nec Corporation Rejuvenation processing device, rejuvenation processing system, computer program, and data processing method
US8984123B2 (en) 2009-04-23 2015-03-17 Nec Corporation Rejuvenation processing device, rejuvenation processing system, computer program, and data processing method
WO2013146252A1 (ja) * 2012-03-30 2013-10-03 日本電気株式会社 ソフトウェア延命時期決定システム、ソフトウェア延命時期決定方法、およびプログラム
CN109726118A (zh) * 2018-11-19 2019-05-07 北京达佳互联信息技术有限公司 一种应用程序开发方法、装置、电子设备及存储介质
CN109726118B (zh) * 2018-11-19 2022-07-22 北京达佳互联信息技术有限公司 一种应用程序开发方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
EP0701209A2 (en) 1996-03-13
DE69528428D1 (de) 2002-11-07
CA2152329C (en) 1999-02-09
EP0701209A3 (en) 1999-09-22
DE69528428T2 (de) 2003-06-18
EP0701209B1 (en) 2002-10-02
CA2152329A1 (en) 1996-03-09

Similar Documents

Publication Publication Date Title
US5715386A (en) Apparatus and methods for software rejuvenation
US7516361B2 (en) Method for automatic checkpoint of system and application software
US6332200B1 (en) Capturing and identifying a complete and consistent set of checkpoint files
EP0590866B1 (en) Apparatus for fault-tolerant computing
AU752844B2 (en) Method and apparatus for providing failure detection and recovery with predetermined replication style for distributed applications in a network
US6195760B1 (en) Method and apparatus for providing failure detection and recovery with predetermined degree of replication for distributed applications in a network
JP3675802B2 (ja) 計算の状態を再構成する方法ならびにシステム
US6978398B2 (en) Method and system for proactively reducing the outage time of a computer system
JP3737695B2 (ja) 透過的時間ベースの選択的ソフトウェア若返りのためのシステム及び方法
US5590277A (en) Progressive retry method and apparatus for software failure recovery in multi-process message-passing applications
US7716520B2 (en) Multi-CPU computer and method of restarting system
JP3748339B2 (ja) 複数のデータストアの同期をとってデータ整合性を達成する方法
JPH0895814A (ja) ソフトウエアの更新のための装置及び方法
US20080256387A1 (en) Automated error recovery of a licensed internal code update on a storage controller
JPH10116261A (ja) 並列計算機システムのチェックポイントリスタート方法
US20050278701A1 (en) Substitute manager component that obtains state information of one or more software components upon failure of a first manager component
JP2006092055A (ja) 計算機システム
WO1997000476A1 (en) Persistent state checkpoint and restoration systems
JPH05216855A (ja) マルチcpu制御方式
Deconinck et al. A framework backbone for software fault tolerance in embedded parallel applications
JPH1125062A (ja) 障害回復システム
CN116089164A (zh) 故障点前滚恢复方法、装置及存储介质
CN111563010A (zh) 一种基于双机冗余系统的数据同步方法、系统及存储介质
Cao et al. r-Kernel: An operating system foundation for highly reliable networked embedded systems
JPH10269124A (ja) チェックポイント情報の管理方法およびチェックポイント情報管理システム

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20020812