2017-02-08 5 views
0

に二つのプロセスのメモリ内のデータ構造をしてください。どちらのプロセスも同じプロセス(サーバー)です.1つはアクティブで、もう1つはスタンバイです。スタンバイは、クラッシュなどの場合に引き継ぐ必要があります。スタンバイがアクティブを引き継ぐためには、インメモリのデータ構造を同期させておく必要があります。 Virtual Synchronyを使用できますか?助けてくれる?もし私が使用できるライブラリがあれば?私はWindows(Visual Studio)上のC++でコーディングしています。私は2つのプロセス間で同期して、メモリ内のデータ構造を維持するにはどうすればよいの同期

これは解決策ではない場合は、私が参照できる良い解決策は何ですか?

TIA

答えて

1

実装するための最も簡単な解決策は、あなたがフェイルオーバーしたときに、スタンバイがちょうど同じデータベースを使用し続けるように、別のデータベースに状態を保存することです。データベースのクラッシュを心配している場合は、メインデータベースとスタンバイデータベースを持つために必要なコストと複雑さを犠牲にしてください。これは、フェイルオーバーを介して状態を処理する複雑さをデータベースにプッシュする試みです。もちろん、データベーストランザクションのオーバーヘッドがボトルネックになることがあります。このためにはNoSQLを試してみるのが魅力的かもしれませんが、従来のデータベースでACIDを保証することにおそらく頼っていることに注意してください。これらを破棄し、通常は最終的な一貫性を得るには、フェイルオーバーでどのような意味があるのか​​考える必要があります。フェイルオーバーに関する最近の情報を少し失うことはありますか?手入れする?

仮想同期が面白く見えます。私はこのように、研究グループによって生成ソースソフトウェアを開くためのリンクがあり、同様のものを検索しhttp://www.cs.cornell.edu/ken/、そのうちのいくつかのようなアカデミックなページを発見しました。私はそれらを一度も使用していません。私は、非常に良好な接続性を備えた少数のマシンではうまく機能したとの報告を覚えているようですが、スケーラビリティに問題があります。

以前は、プロセスが共有メモリまたはメモリマップファイルを介して通信することによって、Unixマシン上にマルチプロセスシステムを構築していました。非常に単純なデータ構造の場合、これを動作させることができます。あなたが持っている1つの問題は、プロセスの1つが共有データを変更することで途中でクラッシュした場合です - これが他のプロセスを混乱させますか?これらの問題を解決することはできますが、最初の段落で説明したデータベース内のすべてを実装していることを発見する危険性があります。

0

memcachedやredisのようなメモリデータベースを利用できます。そのため

+0

うわー、ありがとう!私はあなたの返事を昨日見ました。私は赤ちゃんについて研究しました。私は巨大なコードでこれを使用したいと思います。おそらく、500クラスやその他のデータ構造が好きかもしれません。では、これらのクラスのコンストラクタを追加して、redisとdestructor/other setter関数の情報を取得し、その変更をredisにコミットする必要がありますか? –

関連する問題