問題タブ [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.
filesystems - 少数のノード用の冗長分散ファイルシステム
両方のノードで実行されているプログラムがファイルシステム全体を認識できるように、完全に冗長な方法で、異なる場所にある 2 つのノード間でファイルシステムを共有する必要があります。
状況は、データファイルがいずれかのノードに格納されている可能性があり、他のノードで実行されているプログラムが、ファイルの存在について第三者から通知されている可能性があり、そのファイルが存在することを期待している場合です。rsync ミラーリングは、自作のトリック (たとえば、inotify) で高速化したとしても、遅延が大きすぎます。間違いなく、共有ファイルシステムが必要です。
冗長性は、他のデータセンターが到達不能になった場合に単一のノードで続行できることを確認するために必要です.
ファイルを共有するノードが 2 つまたは 3 つしかない場合、おそらく光沢または HDFS はやり過ぎですが、Ceph は若すぎるように見えます。サイト間の高いネットワーク遅延を飛び越えます。
私はいくつかの可能性を逃していますか?2 つのデータセンター間でファイルシステムを共有して、実際にこのセットアップを行っている人はいますか?
architecture - 非 ACID (分散) システムに関する優れた記事/ビデオ/...? (「結果整合性」など)
私はこれらから始めます - IMO素晴らしい - 記事:
- Base: An Acid Alternative - ダン・プリチェット著 (eBay)、2008
- 最終的に一貫した (- 再訪) - Werner Vogels (Amazon)、2008 年
- Brewer の予想と、一貫性があり、利用可能で、分割耐性のある Web サービス(非フリー) の実現可能性 - Seth Gilbert、Nancy Lnych (MIT)、2002 年
ACID が必要なスケーラビリティ/可用性を提供できなくなった (あるいは、ACID が極端な場合でも提供できる) 分散システムに関する記事にもっと興味があります。
記事は実用的な側面に焦点を当てる必要があります (私は数学が好きですが)。
私が特に興味深いと思うことの 1 つは、ACID 以外のアーキテクチャから派生できる経験則/設計パターン/... はどれですか?
architecture - ATMマシンのデータシステムは結果整合性を使用していますか?
私は、世界中のATMシステムがどのように設計されているかを悩ませています。銀行が世界中で一貫したシステムを設計することはかなり難しいに違いありません。これに結果整合性を使用しますか、それとも優れたACIDシステムを使用しますか?
私はある日スウェーデンにいて、銀行があり、ATMを使用し、飛行機で米国またはタイに行き、数時間後に海外でATMを使用することができます。システムに一貫性がある場合は、世界中のどこにでも非常に信頼性の高い接続が必要です。
erlang - 分散ErlangとCAP定理
CAP定理により、分散Erlangシステムが以下の3つの保証すべてを同時に提供することは不可能です。
- 一貫性(すべてのErlangランタイムまたはノードは同時に同じデータを参照します)
- 可用性(ノード障害は、サバイバーが動作を継続することを妨げません)
- パーティショントレランス(任意のメッセージが失われたにもかかわらず、システムは動作し続けます)
分散Erlangシステムは、0、1 、または2つの保証をサポートできます。
ErlangとOTPを使用して、それぞれの保証をどのように実装できますか?ほとんどの分散Erlangアプリケーションは、より高いレベルのAとPを実際に選択し、「結果整合性」を確保します。Erlang自体は、分散(P)、フォールトトレラント(A)、ソフトリアルタイム、ノンストップのアプリケーションをサポートするように設計されているようです。
プログラミング言語(Erlang)、ランタイムシステム(ERTS)、およびライブラリセット(OTP)は、分散型フォールトトレラントアプリケーションを構築するために設計されています。分散フォールトトレラントアプリケーションを定義する3つのことをどのように行うのですか?
p2p - 分散システムで更新を伝達するためのアルゴリズムについて学ぶのに最適な論文は何ですか?
次のプロパティが必要な分散システム (単一のデータセンター内の複数のノード) を念頭に置いています。
- ノードはいつでもシステムに出入りできます。
- ノード間のデータ複製はありません。
- クライアントがどのノードを使用するかは、クライアント次第です (つまり、コンシステント ハッシュを使用することも、別のものを使用することもできます)。
- マスターなし (つまり、中央障害点がない)
- 各ノードは、残りのノードに転送する必要がある情報を受け取ることができます
これにはどのアルゴリズム (論文へのリンクが最適) が適していますか?
(いくつかの回答には P2P アルゴリズムが含まれると思いますが、私が過去に遭遇した回答のほとんどは、ノードがキースペースの一部に入り、それを引き継ぐ分散ハッシュ テーブルのように振る舞っていました。ここでは単純な UDP メッセージによるマルチキャストが適切かもしれませんが、メッセージングの信頼性を高めるのに役立つ既存の作業は何ですか?)
c# - XML-RPC を使用して C#、Ruby、および Java で記述された分散アプリケーションのプログラミング
Ruby、C#、または Java クライアントのいずれかの各クライアントがすべての変更を登録済みクライアントのリストと同期する、分散イベント管理ツールを作成する任務を負っています。私はXML-RPC
目標を達成するために使わなければなりません。私のチームと私は、XML-RPC
クライアントとサーバーを各言語で作成しました。関連するソース コードを以下に示します。さらにコードが必要な場合は、お知らせください。
問題は、Java と C# を相互に通信できるようにすることです。Ruby は他のものと通信できますが、C# (および Java はまだテストしていない可能性があります) には、Ruby サーバーのアドレス指定に問題があります。問題はエンドポイントにあると思います。まず、いくつかのコードを示します。読むときは、コードが実際にはチームによって書かれており、命名規則が少し異なることに注意してください。
C# クライアント
_proxy
特定の URI のクライアントを保持しません。これらはディクショナリに保存され、イベントを同期する必要が生じたときに使用されます。このような同期の 1 つは、変更の場合に発生します。
以下は、IEventManagerWCF_XML_RPC インターフェイスからの抜粋です。
C# XML RPC サービス
ここでは特別なことは何もないと思います。Javaコードに移りましょう!
Java クライアント
xmlRpcPeers
現在、さまざまなクライアントを保持しています。それらは次のように呼ばれます。
Java サーバーには独自のクラスがあり、単純な呼び出しでインスタンス化されますnew
。
今までは、すべてうまくいっているように見えました。ミックスに Ruby を追加すると、最も問題が発生します。関連するコードは次のとおりです。
Ruby クライアント Ruby クライアントもディクショナリに格納されます。次のように入力されます。
クラスのコードは次のとおりです。
変更を同期するための呼び出しは次のようになります。
ルビーサーバー
EventManagerService クラス:
EventManager
すべてのロジックが存在するクラスです。
C# から Ruby に通信しようとすると、次のようなエラーが表示さEndPointNotFoundException
れます。
There was no endpoint listening at http://ip:8000/xmlrpc/EventManagerService that could accept the message.[...]
エンドポイント宣言をいじってみましたが、うまくいかないようです。Ruby のドキュメントも役に立ちません。助けが必要です!
java - mongodb レプリカ セットのセカンダリ専用ノード
私は、レプリカ セットの特定のノードが決してプライマリ ノードにならないことを指定する機能が必要なプロジェクトに取り組んでいます。つまり、すべてのプライマリ対応ノードが停止する障害が発生した場合、システムを読み取り専用状態に減らす必要があります。プライマリ対応ノードが起動するまで。これは可能ですか?はいの場合、どのように?そうでない場合、それを回避する最善の方法は何ですか。
java - DDS DataReader キャッシュが壊れてアクセスできなくなる
i386 で dds ライブラリを操作して、サンプルを繰り返しプルしようとしています。私は明示的にサンプルをread
「take
ing」しているのではなく、期限切れになったり削除されたりすることはありません。
- (1) と (2) の 2 つの黒板アプリケーションを起動します。
- 両方のアプリケーションで読み取りを実行します。これにより、「キャッシュが空です」が返されます。
- (1) から書き込み、センサー ID: 1、イベント ID: 1、値: 1。
- (1)から読み込み、値を確認
- (2)から読み込み、値を確認
- (2) から書き込み、センサー ID: 1、イベント ID: 1、値: 2。
- (2) から読み取り、「キャッシュが空です」
- (1) から読み取り、「キャッシュが空です」
「壊した」みたい!サンプルの寿命は無限であるべきだと思います(または、理解するようになりました...しかし確認できません!)-しかし、明示的に設定することはできません。topicQos.lifespan.duration
はタイプですが、すでにファイナライズDuration_t
されているため、「新規」に設定できませんか?Duration_t(Duration_t.DURATION_INFINITY_SEC,Duration_t.DURATION_INFINITY_NSEC)
networking - センサーネットワーク用制御システム
分散型センサーネットワークを作っています。私のネットワークの基本的なアーキテクチャは、いくつかのスレーブ ノード (最大約 10) が定期的にマスター ノードに報告することです。
これに使用できるソフトウェアフレームワークを探しています。これまでに考えた
- コルバ
- パブサブハブブ
- xmtp
- 自分で作る
いくつかの基本的な要件があります (基本的なセキュリティ、障害認識など)
誰にも提案はありますか?
web-crawler - モバイル エージェントと Web クローラーの違い
モバイル エージェントと Web クローラーの正確な違いを誰か教えてもらえますか?
前もって感謝します。