2009-06-04 13 views
1

重要なシステムを制御するために使用される2つの産業用コントローラがあります。その考え方は、あるコントローラが故障すると、他のコントローラが自動的に引き継ぐということです。スワップオーバがスムーズになるように、各スタンバイコントローラは常にオンラインコントローラの状態をミラーリングする必要があります。2つのマシン間の状態を維持

私たちは、コード化されていないと文書化されている解決策を持っています。問題は、コントローラーやPCに使用できる汎用ソリューションを作成するのに使用できる同様のものを実現する、そのようなシステムまたはオープンソースソフトウェアを実装する共通のデザインパターンがあることです。コントローラをスタンバイ・ルーチンとして動作させることができます。

答えて

-1

おそらく共有SQLiteデータベースか類似したものでしょうか?

1

アプローチは「キャッシュの一貫性」です。商用製品 - たとえばTangosol - これを行う

もう1つのアプローチは、エンタープライズサービスバス(ESB)またはサービス指向アーキテクチャ(SOA)の軽量バージョンです。ほとんどのSOAベンダーはこれに対応した製品を持っています。私はTibcoから始めるでしょう。あなたはこれに使うことができる軽量コンポーネントセットを持っています。

SOAはであるため、ハードなものではないため、HTTPプロトコルを使用して自分自身をロールバックすることができます。

0

クラスタリング、分散アーキテクチャおよびレプリケーション(http://en.wikipedia.org/wiki/Database_replication)をサポートするほぼすべてのDBMSで使用されている標準のマスター - スレーブパターンがあります。

非常に基本的に、マスターマシンは状態を維持し、スレーブはマスターの状態から自分の状態を更新する以外は何もしません。マスターがダウンすると、スレーブはマスターがもはや存在しないと見て、スレーブの状態から自分の状態を更新したマスターが再び使用されるだけで、状態の制御を引き継ぐことができますマスターはアクティブではありません)。

1

フェールオーバーとトランスペアレントフェールオーバーには違いがあります。透過的なフェールオーバーの要件は本当にありますか?もしそうなら、あなたはそれを支払うことになります(コストと複雑さの両方で)。

これは、問題の洗練された解決方法についてはBuddy Replicationのこの記事を参照してください。

0

リアルタイムクリティカルシステムを制御する従来のアプローチは、lockstepで2つのユニットを実行することです。タンデムは、この技術を長年にわたって使用している、非常に印象的なフォールトトレラントなマシンを構築しています。

ただし、ロックステップはハードウェアレベルのソリューションです。純粋にソフトウェアレベルでクラシックロックステップを実装できるとは思いません。少なくとも、まっすぐではない。おそらく、ベクトルクロックの交換によって同期された状態マシンを使用するか、それとも同様にプロペラヘッドを使用しますか?

0

スペースシャトルコンピュータにも同様の状況があります。その状況では、彼らは5台のコンピュータを使い、1台のマシンが遅れていたり、他のマシンと遅れたりしていた場合、それは(本質的に)島から投票されました。

状況によっては、どのコントローラーが不良になったかをどのように判断しますか?決定マシンもシングルポイント障害と考えられていますか?

2つのコントローラ間で使用できる通信レベルはどれですか?共有メモリ、イーサネット、または何かがさらに遅い?

状態情報が2つの間でどのくらい速く変化しますか?

両方のコントローラに同じ情報を入力することは可能ですか?両方のコントローラが同じ状態遷移を計算しますか?

関連する問題