問題タブ [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.
concurrency - 共有データとは対照的に、メッセージ パッシングのパフォーマンス ペナルティ
最近では、ロックを使用せず、Erlang のようなメッセージ パッシング アプローチを使用することが話題になっています。または、関数型プログラミングと C++/Java のような不変データ構造の使用について。
ただ、気になるのは以下の点です。
- 私の知る限り、Erlang はメッセージの配信を保証しません。メッセージが失われる可能性があります。メッセージの損失を心配する必要がある場合、アルゴリズムとコードが肥大化し、再び複雑になることはありませんか? 使用する分散アルゴリズムは、メッセージの配信保証に依存してはなりません。
- Message が複雑なオブジェクトの場合はどうなるでしょうか? メッセージをコピーして送信する場合と、メッセージを共有の場所 (両方のプロセスがアクセスできる DB など) に保持する場合とでは、パフォーマンスが大幅に低下しませんか?
- 共有状態を本当に完全になくすことができますか? 私はそうは思わない。たとえば、DB では、同じレコードにアクセスして変更する必要があります。そこではメッセージパッシングを使用できません。ロックするか、Optimistic 同時実行制御メカニズムを想定してから、エラーのロールバックを行う必要があります。Mnesia はどのように機能しますか?
- また、常に並行性について心配する必要があるわけではありません。どのプロジェクトにも、同時実行性やトランザクションをまったく処理する必要のない大きなコードが含まれます (ただし、パフォーマンスと速度が懸念されます)。これらのアルゴリズムの多くは、共有状態に依存しています (そのため、参照渡しまたはポインターが非常に便利です)。
この事実を考えると、Erlang などでプログラムを作成することは、これらのことを行うことができないため苦痛です。おそらく、それはプログラムを堅牢にしますが、線形計画問題の解決や凸包の計算などの場合、パフォーマンスがより重要であり、並行性/トランザクションとは関係がない場合にアルゴリズムに不変性などを強制することは悪い決定です. ではない?
erlang - Erlang で堅牢なメッセージ配信を提供する
これは、私の前の質問で進行中の議論に関連しています
共有データとは対照的に、メッセージ パッシングのパフォーマンス ペナルティ
議論されている問題の 1 つは、メッセージ パッシングと共有状態を使用して Erlang で分散アルゴリズムに必要な作業量でした。私の見解では、メッセージの損失に対して堅牢なアルゴリズムを設計するよりも、共有状態 (おそらく DB のレコード) を使用して分散リーダー選出を実装する方が簡単です。ではない?
メッセージパッシングベースのアルゴリズムを実装する際の問題は、分散アルゴリズムをメッセージの損失に対して堅牢にするか、複数の試行が必要な場合でもメッセージが常に配信されるようにする必要があることです。もちろん、分散リーダー選出はよく知られた問題であり、堅牢なメッセージ パッシング アルゴリズムが既に存在していると思います (ナンシー リンチの本がそれを示している可能性があります) が、私はこの問題を要点を説明するための例として取り上げているだけです。
ありがとう!
excel - Excelで分散計算を行う方法
何年も前に、Excel VBA で非常に使いやすい非同期ピアツーピア メッセージ指向ミドルウェアを実装しました。機構を持っていた.
MOM レイヤーを再実装することもできますが、サード パーティ製品があればそれを使用したいと思います。
私の要件は次のとおりです。
- Excel VBAやVB6から簡単にメッセージを送れるように、
- 計算サービスを見つけるためのリソース発見メカニズムを持つこと、
- 非同期メッセージを送信する (計算中に Excel をロックしたくない)、
- キューイングメカニズムを提供して、複数のサーバーで簡単に作業できるようにする
- セットアップのための低い管理者を持つ
誰でも何か提案できますか?
多くのthx
--DM
algorithm - 「人生ゲーム」のプロセス間で2D配列を分割する方法
ライフゲームを実装するためにMPIを使用して割り当てを行っています。ブロック行パーティション、循環行パーティション、またはブロックチェッカーボードパーティションのどれを使用する必要があるのか疑問に思いました。
language-agnostic - ピアツーピア ネットワークでネットワークの整合性を維持する
動的なピア ツー ピア ネットワークでネットワークの整合性を維持する方法に関する技術、アルゴリズムなどに関する情報を探しています。実用的な実装、学術論文、およびそのカテゴリのその他のものの両方を歓迎します。
各ノードがx個の他のノードにのみ接続されている、ピアツーピア ベースのみのネットワークを想像してみてください。すべてのノードのグランド リストがなくても、各ノードはネットワークとの接続を維持する責任があります。ノードは動的に停止し、起動します。つまり、各ノードは、 x個の接続を維持するために、接続する新しいノードをその隣接ノード (およびその隣接ノード?) に問い合わせる必要があります。
ネットワークのセグメンテーション (ネットワークの 2 つの半分は、各ネットワークから 1 つのノードによってのみ接続されます。いずれかがダウンした場合、ネットワークは 2 つに分割されます) と、これを回避する方法と効率的なルーティング (距離メトリックなど) が私の主な関心事です。 、しかし、同様の説明を持つネットワークに関連するものはすべて興味深いでしょう.
私が求めているものと類似しているため、現在Chord DHTプロトコルを見ています。
asp.net - ErrorCode が表示される理由ベロシティ キャッシュ ホストを 1 つ停止するとどうなりますか?
ユーザーのセッションをホストしている 3 ノード クラスターの 1 つのノードを停止すると、Web アプリで次の例外が発生します。
セッション キャッシュには、エビクションなしのセカンダリもあります。
エラーメッセージとスタックは次のとおりです。
しばらくしてからリクエストを再試行すると、メッセージは消えます。なぜ私はこのメッセージを最初に受け取ったのでしょうか。サーバーは、ホストがダウンしていることを独自に判断して、他のクライアントのいずれかに切り替えるべきではありません。ルーティングの問題が発生した場合に備えて、web.config ファイルでセッション クライアントをシンプルに定義しましたが、それでも問題が発生します。
distributed-computing - BOINCのプログラミング経験はありますか?
私は私の小さなプロジェクトのためにBOINCに魅了されています。BOINCのことは聞いたことがありますが、その仕組みについてはあまり読んでいません。これは主に、現在他の優先事項に焦点を合わせているためです。私が知りたいのは、実際にBOINCのプログラムを作成して、分散コンピューターネットワークでプログラムを実行しようとした人がいるかどうかです。特に私は次の質問に興味があります:
- それはどのように機能しますか?コードをコンパイルしてどこかに投稿すると、クライアントがダウンロードして、ワークユニットのリクエストと結果を受け取りますか?
- どの言語をサポートしていますか?ランタイムをどのように処理しますか(必要なものがすべて含まれた完全で独立したパッケージを提供できると思います)
- あなたのプロジェクトが存在することを人々はどのようにして知り、参加することを選択しますか?
- 私の生活を楽にするためにどのようなサービスを提供していますか?一般的なタスク用に事前に作成されたライブラリはありますか?
私は実際の経験が好きです。ウィキペディアは優れた情報源になり得ますが、私は実際のユースケースを好みます。
java - 分散ジョブのスケジューリング、管理、およびレポート
私は最近、Hadoopをいじってみましたが、MapReduce ジョブのスケジューリング、管理、およびレポート機能に感銘を受けました。これにより、新しいジョブの配布と実行が非常にシームレスになり、開発者はジョブの実装に集中できるようになります。
MapReduce の問題として簡単に表現できないジョブの分散実行用の Java ドメインが存在するかどうか疑問に思っています。例えば:
タスクの調整と同期が必要なジョブ。たとえば、タスクの順次実行が含まれる場合がありますが、いくつかのタスクを同時に実行することは可能です。
/li>分散したいが、削減する出力を提供しない CPU 集中型のタスク (画像の変換/サイズ変更など)。
そのような分散コンピューティング環境を提供するJavaフレームワーク/プラットフォームはありますか? それとも、この種のことは Hadoop を使用して許容/達成可能ですか? もしそうなら、これらの種類の仕事のためのパターン/ガイドラインはありますか?
c# - 分散アプリケーション (WCF/Remoting/Web servervices) 対 Web アプリケーション
中規模の標準 LOB アプリケーションを作成しています。現在は Web アプリケーションですが、デスクトップ リモート アプリケーションに改良するための提案を作成しています。これは、データベースとアプリケーション サーバーがリモート ロケーションでホストされることを意味します。クライアント アプリケーションは、インターネット経由でサーバーと通信します (WCF / Webservices / Remoting のいずれか)。
私の質問は次のとおりです。これを Web プラットフォームから移行する唯一の理由は、Web の制約によるものです (これらの制約を最小限に抑えるために AJAX または Java スクリプトを実行したくないため、JS/AJAX の推奨事項はありません)。私は従来のデスクトップ アプリケーションを作成しており、かなり高速ですが、リモート アプリケーションや分散アプリケーションを作成したことはありません。アプリケーションの速度が Web より速くなるかどうかはわかりません。
私が理解しているように、リモート デスクトップ アプリケーションの方がはるかに高速です。1つは、ポストバックが関係しないことです(私はポストバックが大嫌いです)。データはもちろんインターネット経由で来るので、その点ではスピードとパワーだけを求めてリモートデスクトップに移行した方が良いのでしょうか?
正しい方向への助けは素晴らしいでしょう。どうもありがとう。
ジーシャン
methods - BOINC: そのためのプログラムをコーディングする方法と、それをクライアント/サーバー システムに実装する方法の簡単な例はありますか?
私は卒業論文として数値法を行い、それをJavaでコーディングしました。適切に実行すると、多くの計算時間が必要になります。そこで代替案を探し、BOINC を見つけました。残念ながら、BOINC でメソッドを実行する時間がありませんでした。私は航空宇宙の学生でプログラマーではなく、Java プログラムを優先することにしたからです。これで完成ですが、BOINC環境に移植したいと思っています。
残念ながら、私は例をやり直して学んでいますが、公式サイトhttp://boinc.berkeley.eduでもインターネットでも見つけることができませんでした。では、簡単で良い例を知っていますか、それとも BOINC の経験があり、そのような boinc プロジェクトのための新しいプラットフォームを開始したいと考えていますか?
seti や折り畳みプロジェクトほど多くの作業単位がないため、24 時間年中無休で実行することはできないという私の方法については現実的です。そのため、プロジェクトの一部にその時点で作業単位がない場合に、別のプラットフォーム プロジェクトに取り組むことができるように、自分のプロジェクト以上のプラットフォームを持ちたいと考えています。
しかし、これを開始するには、単純にして、コーディング方法とクライアントおよびサーバー システムでの使用方法を知りたいだけです。サンプル プロジェクトがどのようなもので動作するかは問題ではありませんが、それが十分に単純であり、それを理解して自分の方法に拡張できる限りは問題ありません。
前もってありがとう、アンドレアス!:)
PS: BOINC が Java をプログラミング言語としてサポートしていることは知っており、私のメソッドは Java でコーディングされています。