1

重要なシステムを制御するために使用される 2 つの産業用コントローラーがあります。1 つのコントローラーに障害が発生すると、もう一方のコントローラーが自動的に引き継ぐという考え方です。スワップ オーバーがシームレスに行われるようにするには、各スタンバイ コントローラーが常にオンライン コントローラーの状態をミラーリングする必要があります。

コード化と文書化が不十分なソリューションがあります。問題は、そのようなシステムまたはオープン ソース ソフトウェアを実装する共通の設計パターンがあるかどうかです。これらは、コントローラーや PC に使用でき、任意の数を許可するように拡張できる汎用ソリューションを作成するために使用できます。コントローラがスタンバイ ルーチンとして機能します。

4

6 に答える 6

1

アプローチは「キャッシュコヒーレンス」です。市販の製品(たとえば、タンゴソル)はこれを行います。

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

SOAはそれほど難しくないので HTTPプロトコルを使用して独自のロールを作成し、1つのコントローラーがそのシャドウコントローラーにステータスをPOSTできるようにすることができます。

于 2009-06-04T10:05:33.120 に答える
1

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

そうは言っても、この問題に対する洗練された解決策については、Buddy Replicationに関するこの投稿をご覧ください。

于 2009-06-04T10:16:10.620 に答える
0

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

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

于 2009-06-04T10:08:59.450 に答える
0

リアルタイムで重要なシステムを制御する際に採用される従来のアプローチは、2 つのユニットをロックステップで実行することです。Tandem は、この手法を使用して、非常に優れたフォールト トレラント マシンを何年も構築してきました。

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

于 2009-06-04T10:46:22.493 に答える
0

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

あなたの状況では、どのコントローラーが故障したかをどのように判断しますか? 決定マシンも単一点障害と見なされますか?

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

2 つの間で状態情報が変化する速さは?

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

于 2009-06-11T05:15:21.787 に答える
-1

多分共有SQLiteデータベースまたは同様のもの?

于 2009-06-04T10:03:11.487 に答える