問題タブ [distributed-computing]
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.
guid - 分散環境と並行環境で一意のシーケンス番号を生成する際のトレードオフは何ですか?
分散環境と並行環境で一意のシーケンス番号を生成するための制約とトレードオフに興味があります。
これを想像してみてください:私は、あなたが尋ねるたびに一意のシーケンス番号を返すだけのシステムを持っています。このようなシステムの理想的な仕様 (制約) は次のとおりです。
- 高負荷の下で起きていてください。
- できるだけ多くの同時接続を許可します。
- 分散: 複数のマシンに負荷を分散します。
- パフォーマンス: 可能な限り高速に実行し、可能な限り多くのスループットを実現します。
- 正確性: 生成される数値は次の条件を満たしている必要があります。
- 繰り返さない。
- リクエストごとに一意である必要があります (2 つのリクエストがまったく同時に発生した場合、関係を解消する方法が必要です)。
- (昇順) 順番に。
- リクエスト間にギャップはありません: 1,2,3,4... (事実上、合計 # リクエストのカウンター)
- 耐障害性: 1 つ以上のマシン、またはすべてのマシンがダウンした場合、障害が発生する前の状態に再開できます。
明らかに、これは理想化された仕様であり、すべての制約を完全に満たすことはできません。CAP定理を参照してください。ただし、制約のさまざまな緩和についての分析をお聞きしたいと思います。どのようなタイプの問題が残り、残りの問題を解決するためにどのアルゴリズムを使用するか。たとえば、カウンター制約を取り除くと、問題ははるかに簡単になります。ギャップが許容されるため、数値範囲を分割して、それらを異なるマシンにマップするだけです。
参考文献 (論文、書籍、コード) は大歓迎です。また、既存のソフトウェア (オープン ソースかどうか) のリストも保持したいと思います。
ソフトウェア:
- Snowflake : 一意の ID 番号を大規模に生成するためのネットワーク サービスで、いくつかの単純な保証があります。
- keyspace : ID を任意の目的に使用できる、公的にアクセス可能な一意の 128 ビット ID ジェネレーター
- RFC-4122 の実装は、多くの言語で存在します。RFC 仕様は、システム間の調整の必要性を防止するため、おそらく非常に優れたベースであり、UUID は 128 ビットであり、仕様の特定のバージョンを実装するソフトウェアから ID を使用する場合、タイム コード部分が含まれています。仕分け可能 など
distributed - 分散コンピューティングの研究に関する質問/トピックを開きますか?
ねえ、
私は最近、Lamport、Fischer、Lynch、Brewer の多くの論文を読み、分散システムに対する彼らの見解を感じ取っています。
私は、現在のオープンな分散コンピューティングの研究の質問/トピックは何ですか? データベース、通信、フォールト トレランス、数値処理などの多くの分野が、かなり手堅い手で取り組まれているようです。
新しい分野は何だと思いますか。過去に誰かが考えたのに、それが不可能になり、今では可能になったのかもしれません。グラフ アルゴリズム/データベース/分析のようなトピックですか?
また、分散システムに関する必読の論文のヒントがあれば教えていただければ幸いです。また、インスピレーションを維持するために、より「SF」になることもあります。
java - Javaを使用したWebインデクサー
Javaで開発された場合、並列システムまたは分散システムはWebサイトクローラーおよびWebインデクサーに適していますか?利用可能なフレームワークは何ですか?
java - 1つのプログラムが複数のJVMで実行されますか?
私はMPIがそれを行っていることを知っています。また、Erlangがこれをうまくサポートしていると聞きました。しかし、JVMに同様のフレームワーク/言語はありますか?複数のマシンに分散された1つのプログラムを透過的に実行する必要があります。
ありがとう、
c++ - ネットワークを介したBoost::Signalsカプセル化
私は現在、分散コンピューティングを使用してさまざまなイベントを検出するソフトウェアの開発に携わっています。
現在のアプローチは次のとおりです。多数のスレッドが異なる(物理的な)コンピューターで同時に実行されています。各イベントには番号が割り当てられています。そして、すべてのスレッドは、検出されたイベントを他のスレッドにブロードキャストし、着信ストリームから関連するイベントをフィルタリングします。
見た目がひどく、メンテナンスが難しく、システムをアップグレードするときにパフォーマンスの問題が発生する可能性があるため、非常に悪いと感じています。
したがって、このIPCを処理するための柔軟でエレガントな方法を探しています。Boost::Signalsは良い候補のようです。でも使ったことがないので、ネットワーク通信のカプセル化が可能かどうか知りたいです。
web-services - デスクトップビューアプリケーションへのWebサービスとして提供されるAzureの分散コンピューティングアプリケーション
Azureアプリケーションが、複数のワーカー(永続ストレージを使用)に分散される長時間実行の計算タスクを実行するためのサービスをエンドユーザーに提供することは可能ですか?
また、デスクトップ.Netアプリケーション(ビュー)からアクセスするWebサービスを介してこれを提供することは可能でしょうか、それとも常にAzureでWebインターフェイスを使用する必要がありますか?
performance - クラウド/分散コンピューティングを使用してプロセッサ時間を共有する - 可能性と方法
私の質問は、サーバーを使用してネットワーク全体でタスクを明示的に共有し、各コンピューターに個別にジョブを割り当てて「負荷を共有する」要求の厳しいネットワーク アプリケーションで作業するときに熟考したものです。
私は疑問に思いました: これはもっと暗黙的な方法で行うことができますか?
質問
ジョブのプログラムやプロセスを各コンピューターにインストールする必要なく、ジョブをより効率的に実行するために、コンピューターの任意のパブリック ネットワークの周りにプロセッサ集中型のタスクを分散させる可能性はありますか?
シナリオ
1 から 10,000,000 までのすべての数値のすべての素因数分解をコンピューターに計算させ、それらをデータベースに保存しようとしている、途方もなく集中的な数学シナリオがあるとしましょう (スペースがあり、アルゴリズムが既に実装されていると仮定します)。独自のクラス、プログラム、ダイナミック リンク ライブラリ、または任意の実行可能なプロセスで。)
この負荷のかかるプロセスをネットワークまたはマルチコア スーパー コンピューターで共有する方が効率的ですが、どちらもコストがかかります。私の知る限り、特定のアルゴリズムを実行するために特別に設計されたプログラムが必要であり、そのプログラムを上記のクラウド/分散コンピューティング ネットワーク全体にインストールし、サーバーで各コンピューターが何を行っているか (つまり、現在計算している数) を追跡する必要があります。の素数)。
結論
全体:
不特定の種類のプロセスのプロセッサ時間を共有できるクラウド プログラム/OS/スイートを作成することは可能でしょうか?
もしそうなら、それをどのように実装しますか? どこから始めますか?
特定されていない非明示的なタスクを実行できるようにするための専用の OS を作成しますか?それとも、一般的なコミュニティを支援するためにプロセッサ クロックの割合を喜んで共有するボランティアのコンピューターにインストールされたクラウド対応プログラムで行うことが可能でしょうか)。 .
これが実現可能であるとしたら、より大きなクラウドの自発的な一部になりますか?
これは素晴らしいプロジェクトなので、皆さんの考えと考えられる解決策をぜひお聞きしたいと思います。
algorithm - 非常に大きなリストへの参加
最初にいくつかの数字を挙げてみましょう。リストの最大のものは約 1 億レコードです。(ただし、500 まで増加すると予想されます)。他のリスト (そのうちの 5 ~ 6 個) は数百万ですが、当面は 1 億にも満たないでしょう。これらは常に単一の ID に基づいて結合されます。他のパラメーターを使用することはありません。そのようなリストに参加するための最良のアルゴリズムは何ですか?
私は分散コンピューティングのラインで考えていました。適切なハッシュ (ノードを追加でき、データの移動があまりない循環ハッシュの種類) を機能させ、これらのリストをいくつかの小さなファイルに分割します。そして、それらは常に共通のID(私はハッシュします)で結合されているため、小さなファイルに結合することになります. そのために nix join コマンドを使用することもできます。
DB (少なくとも MySQL) はマージ結合を使用して結合します (主キー上にあるため)。それは私のアプローチよりも効率的でしょうか?
私はテストして見るのが最善であることを知っています。しかし、これらのファイルの大きさを考えると、かなり時間がかかります。そして、理論的な計算を行い、実際にどのように公平になるかを確認したいと思います.
これらまたは他のアイデアに関する洞察は役に立ちます。少し時間がかかってもかまいませんが、私が持っているリソースを最大限に活用したいと考えています。莫大な予算はありません:)
r - condorにarジョブを送信しているときにRファイルを読み取るときにエラーが発生しました
コンドルに送信されたRジョブがあります。コンドルに送信されたRファイル(one.R)が別のRファイル(two.R)を読み取っていますが、コンドルにジョブを送信すると失敗し、その理由は、送信されたR(one.R)ファイルが呼び出されたRファイル(two.R)を読み取っていないためです。テキストファイルのエラーは次のとおりです。
私の送信ファイルは
これに関するアイデアに感謝します。
ありがとう、