問題タブ [distributed-system]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
301 参照

replication - レプリケーションでマスターをプロモートする

多くのスレーブ間でマスターを昇格させるために、レプリケーションアルゴリズムを設計しています。Paxosよりも速くてシンプルにしたいと思っています。基本的な考え方は次のとおりです。

  1. 各ノードに「プロモーション優先度」を割り当てます。たとえば、5つのノードの場合、優先度は50、40、30、20、10、50が最高、10が最低になります。
  2. マスターを選出する必要がある場合、すべてのスレーブは他の4つのノードにマスターになることを要求するメッセージを(同時に)送信しますが、確認メッセージですべてのスレーブによって確認されるそのマスターのみが選出されます。スレーブは、自身の「プロモーション優先度」が要求ノードよりも低い場合、または優先度の高い要求ノードがタイムアウトして自身の要求に対して拒否メッセージを発行した場合に、確認メッセージを送信します。
  3. スレーブが「プロモーション優先度」の高いスレーブから拒否メッセージを受信した場合、その手順は中止されます。
  4. 同じ優先度のノードがあってはなりません。
  5. マスターになるためにスレーブが収集する必要のある確認メッセージの最小数があります。

すべてのスレーブが並行してマスターを選出し、優先順位がプロセスの高速化に役立つため、このアルゴリズムはより高速である必要があります。

あなたはそれについてどう思いますか?優先度の高いマスタープロモーションのための他のアルゴリズムはありますか?

0 投票する
1 に答える
415 参照

version-control - バージョン管理vs.自動配布vs.依存関係管理

数百台のコンピューター(ノード)のグループにインストールされた分散ソフトウェアシステムを想像してみてください。ノードは、スケジュールされたタスクを自動的に実行する責任があります。何百ものタスクがあり、すべてのタスクは約5〜10ノードで実行されるようにスケジュールされています。ノードは数日間停止する場合があり、システムから削除される場合があります。すべてのタスクは、1つ以上のソースファイルとノード固有の構成ファイルによって定義されます。コードはノード上で直接開発およびテストされます(リモートアクセスを使用)。これらのノードのみに特別なハードウェアが装備されており、タスクの実行に必要なネットワークコンテキストがあります(別のテストシステムを構築するとコストがかかりすぎます)。すべてのタスクのソースファイルは共有ソースファイル(ライブラリ)を参照し、ライブラリは他のライブラリを参照する場合があります。タスクとライブラリの依存関係ツリーは複雑です。

分散バージョン管理システムの経験はありませんが、このシステムはDVCSを中心に構築できると思います。さまざまなライブラリ、およびさまざまなタスクのソースファイルには、独自のリポジトリがあります。特定のタスクを実行するすべてのノードには、そのタスクのリポジトリのインスタンスが必要です。ノードの少なくとも1つのタスクで使用されるすべてのライブラリのリポジトリも、そのノードに存在する必要があります。開発者はcommit、ノード上でローカルに変更およびコーディングし、DVCS技術を使用して他のノード上のリポジトリに変更を配布します。

質問#1 コードの変更を他のノードに配布するための最良のアプローチは何でしょうか?

考えられるシナリオ:

  1. 開発者pushは、同じリポジトリのインスタンスを持つ他のすべてのノードへの変更を行います。(しかし、彼らはそうすることを忘れるか、そうする時間がないかもしれません。)
  2. ノードpullは、他のすべてのリモートリポジトリからのすべての変更とupdateそれ自体を自動的に変更します。(ただし、競合が発生する可能性があります。)
  3. リポジトリごとに、インスタンスの1つが「参照」として使用されます。開発者pushはこのインスタンスへの変更を行い、インスタンスを持つ他のすべてのノードpullはここから自動的に実行されupdateます。(ただし、参照インスタンスを持つノードが停止する場合があります。)

質問#2 依存関係を処理するための最良の方法は何でしょうか?

複数のタスク(またはライブラリ)が同じライブラリを参照していて、参照されたライブラリを変更する必要がある場合、1つまたは複数の参照タスク(またはライブラリ)が機能しなくなる可能性があります(依存関係地獄)。最初に参照されたバージョンを維持し、適切なテストを行った後、新しいバージョンにアップグレードすることをお勧めします。つまり、同じソースファイルの複数のバージョンが同じリポジトリに存在する必要がありますが、これは不可能と思われます。branch参照されたライブラリの新しいバージョン用に新しいライブラリを作成する必要がありますか?はいの場合、参照リポジトリをどのようにアップグレードする必要がありますか?

ご協力ありがとうございました。

0 投票する
1 に答える
332 参照

domain-driven-design - 分散システムでメッセージ用の専用アセンブリまたはライブラリを共有することは一般的な方法ですか?

私は、分散ドメイン駆動設計の背後にあるいくつかの概念の亀裂について話し、概念​​実証を構築しています。システム全体で特定の責任を持つ 3 つの C# ソリューションがあります。

私が持っている解決策は次のとおりです。

  • 書き込みモデル (クライアントからコマンドを受け取り、イベントを作成して送信する)
  • 読み取りモデル (書き込みモデルからイベントを受け取り、データベースを作成し、DTO サービスをクライアントに公開します。潜在的に 2 つの別個のソリューションになる可能性があります)
  • クライアント (サービスを呼び出して必要なデータを取得し、書き込みモデルにコマンドを送信します)

3 つのソリューションはすべて、サービス バスを介してメッセージング (コマンド、イベント) を使用します。(私の場合はMassTransit)。

私の主な質問は、メッセージを含むアセンブリを作成し、各ソリューションがそのアセンブリを参照するのが一般的ですか?

特別評価:この POC で、私が行っていることで奇妙または問題があると思われることはありますか? このタイプのシステムを作成する際に知っておくべき追加情報はありますか?

0 投票する
1 に答える
3783 参照

protocols - なぜ「エントロピー」という言葉が反エントロピープロトコルに存在するのですか?

アンチエントロピープロトコルは、ゴシッププロトコルの一種です。http://en.wikipedia.org/wiki/Gossip_protocol。ここでの単語エントロピーの重要性を誰かが説明できるかどうか疑問に思いました。

0 投票する
3 に答える
324 参照

sql - 分散ファイルシステムを作成したいですか?

私が働いている場所では、約 400 人の従業員が 2 つのメイン キャンパスのいくつかのキャンパスに分かれており、サーバーをセットアップし、サーバー上にフォルダーを共有しています。システムをセットアップして、ユーザーに表示される共有フォルダーを 1 つだけ保持し、両方のサーバーにすべてのファイルのコピーを保持し、ユーザーがいるキャンパスに基づいてファイルにアクセスして、ファイル転送中に人々が待たされるのを防ぎ、その後ファイルが変更された場合、ファイルの最新のコピーにアクセスする必要があり、変更されたすべてのファイルを夜間に転送して、日中ネットワークの速度が低下しないようにします。

すでにこれを行っているシステムがあると誰か教えてもらえますか? または、これを行うシステムを検索しようとするときに、どのキーワードを使用する必要がありますか?

私は、MS SQL Server 2012 FileTables を使用してこれを行うシステムを作成し、テーブルにトリガーを配置して、ファイルの最新のコピーがどのテーブルにあるかを確認し、変更されたファイルを一晩で圧縮して転送するストア プロシージャを作成することを検討しています。

0 投票する
1 に答える
156 参照

replication - 複製中のレプリカ

システム内のデータは、アイテム、つまりオブジェクトの集まりです。これらの論理オブジェクトは、レプリカと呼ばれる物理コピーのコレクションによって実装されます。レプリカは物理オブジェクトであり、それぞれが単一のコンピューターに格納され、データ データと動作は、システムの操作によってある程度の一貫性に結び付けられています。

私の質問は

1 オブジェクトは物理的であり、レプリカは論理的である必要があります 2 レプリカは正確なコピーですか、それとも元のレプリカの一部であるか、つまり十分な情報ですか 3 レプリカはどこに保存され、単一のオブジェクトに対して何個ありますか? 4 クライアントがオブジェクトに接続するとき、クライアントはレプリカまたは元のオブジェクトにアクセスしますか?

オンラインで質問への回答を見つけようとしましたが、スタックオーバーフローに投稿する必要がありませんでした。

0 投票する
0 に答える
442 参照

google-app-engine - 高レプリケーション データストアが一貫性のある読み取りを実装する方法

以下のリンクのビデオを見て、高レプリケーション データストアの仕組みを理解しました。書き込みは大部分のレプリカに同期的にレプリケートされ、残りのレプリカは非同期で更新を受け取ります。ビデオは、読み取りが一貫していると述べています。読み取りが古いデータを含むデータセンターにヒットした場合でも、データセンターは新しい更新に追いつきます。しかし、古いデータがあるかどうかをどのように知るのでしょうか。おそらく、読み取りごとにすべてのレプリカを照会するわけではありませんか?

http://www.google.com/events/io/2011/sessions/more-9s-please-under-the-covers-of-the-high-replication-datastore.html

0 投票する
0 に答える
166 参照

java - 分散検索システム JAVA

オフラインの分散検索システムを作成したい (後で と を使用socketsしますmultithreads)。まず、特定のディレクトリの絶対パス (C:\ を配置すると、il はディスク全体になります) をファイルに保存します。どのようなファイルを使用すればよいですか? TXT?システムの最適化が気になります。(私の 80GB パーティションの txt ファイルには 34MB あります)

後でユーザーはシステムを使用して特定のファイルを検索します。以前に作成したファイルで検索したいと思います。

printlnを使用するPrintWriterと、後でそのファイルを読み取るのが難しくなりますか?

前もって感謝します。(よろしければ、後でこのトピックを使用して他の質問をします。)

編集:

私は .txt を使用しましたが、.txt で問題なく動作しましたPrintWriter

0 投票する
1 に答える
105 参照

c++ - C++ での発生前の関係のデータ構造

C++ でリレーションシップの前に発生したグローバルを維持するための最適な構造は何ですか? リンクされたリストの配列を考えていました(配列は各プロセスであり、リンクされたリストのアイテムはイベントです)。しかし、異なるプロセス間のサイクルを見つけることは困難です。グローバルな関係を維持するための適切なデータ構造を提案できる人はいますか? 前もって感謝します。

0 投票する
1 に答える
1222 参照

logging - イベント相関のためのベクタークロックの比較

イベントログとそのベクタークロックで構成されるログファイルがたくさんあります。ここで、任意の2つのイベントのベクトルクロックを比較するときに、ベクトルクロックの各コンポーネントの二乗和の合計のルートを取り、その結果を使用して別のイベントの結果と比較し、小さい方の値が他の値よりも優先されますか?