1

現在、他のサービスからリアルタイム情報を送信するソケットからデータを収集する NodeJS プログラムがあります。

このデータは、前述のインスタンスによってデータベースに保存されます。このプロセスは、ストリームをリッスンするだけです。オブジェクトを解析し、その情報でデータベースを更新します。

次に、別のサービスがデータベースからデータを読み取るだけです。これは、ユーザーが情報を得るためにポーリングするものです。

私の質問は:

このコードの 2 つのインスタンスが実行され、2 つの別々のデータ センターで実行され続けていることを確認するにはどうすればよいですか? そのため、1 つのインスタンスがダウンしても、もう 1 つのインスタンスがデータベースの更新を開始するだけです。他のプロセスを修正している間。

ここで私が考えていたこと:

  1. 各データセンターに 1 つずつ、2 つの PosgresSQL サーバーを実行することを考えていました。マスターおよびスタンバイモードで実行中。これにより、両方のデータ センターの Web サービスがデータベースからデータを読み取ることができるようになりますが、マスターがまだ稼働している間はデータを更新することはできません。私が望む唯一の更新を私に与えます。

  2. しかし、もう 1 つの問題は、NodeJS インスタンスが停止した場合です。私はそれを知る方法がありませんか?ハートビート システムを実装することはできますが、もっと良いものがあるはずです。

  3. キューを使用して Rabbit MQ サービスを実行することも検討しましたが、これでは単一障害点が発生します。

これについてしばらく考えていましたが、機能するアーキテクチャが見つからないようです。何かアドバイス ?

4

1 に答える 1

1

基本的に、何らかの方法で、ある種の Shoot The Other Node In The Head ソリューション (愛情を込めて STONITH と呼ばれます) が必要です。これは、ある種のハートビート プログラムから、または手動で起動できます。理想的には、次の 2 つの側面があります。

  1. 頭の中の他のノードを撃ちます。写真から取り出してください。やめさせろ。

  2. トラフィックを実行中のノードに転送します。

これを行おうとすると、いくつかのレイヤーを調べます。特定のタイプの障害 (致命的な障害と呼びましょう) では、nodejs インスタンスがフェイルオーバー プロセスを開始してから終了します。応答を停止することが確認された場合、ハートビートはフェイルオーバーを開始し、プロセスを強制終了します。

于 2013-06-05T08:42:56.763 に答える