問題タブ [distributed]
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.
distributed - 分散乱数生成
N 人の参加者のネットワークが、1 から M までの数字がランダムに選択されたことに同意する方法があるかどうか疑問に思っていました。(例: どの参加者にも影響されない) これは、n=2 および m=2 の値について、コイン投げプロトコルによって解決されました。N と M の任意の値に対して機能するソリューションを知っている人はいますか?
php - LAMP クラスタで PHP セッションを管理する最良の方法は何ですか?
私はしばらくの間、このテーマについて読んできました。突然、このソリューションが単なる夢ではなく必要となる日が来ました。
私の読書を通して、一般的な違い (ファイルベース、memcached、共有メモリ (mm)、SQL テーブル、およびカスタム) を見てきました。
私たちが最初に考えたアイデアは、各アプリケーション サーバー (LAMP ボックス) にマウントされた ZFS または AFS を使用し、session.save_path
マウントされたパスからのディレクトリを php.ini 設定でポイントすることでした。
成功談が聞きたいです。
database - 半構造化データを扱えるデータベースは?
CouchDBとネイティブ XML データベース ( eXistなど)以外に、非構造化データと半構造化データを格納およびクエリできるデータベースはどれですか?
私はさまざまな形式 (XML、JSON、YAML、CSV、いくつかのカスタム形式) で大量のデータを受け取ってきましたが、それらをマージして操作する必要がありますが、リレーショナル データベースでスキーマを開発するのは時間がかかり、困難です。
主に、オープンソース ソリューションを検討しています。また、いつかはこのデータを何らかの形で公開したいと考えています。
このすべてのデータを共通の形式に変換して操作するには、いくらかのオーバーヘッドがあることを理解しています。XML に関しては、良い選択肢がいくつかあります。eXist-db と BerkeleyDB-XML は、XQuery を適切にサポートしているようです。
また、CouchDB はまだかなり新しいものですが、そのシンプルな「ドキュメント」形式で有望に見えます。
私が調べた他の方法は、ZODB や db4o などの OODBMS です。いくつかの単純な解析スクリプトを作成し、結果のレコード オブジェクトを「そのまま」保存します。問題は、後でクエリを実行することです。OODBMS には、クエリ エンジンの良い歴史がないようです。
私が熱心ではないのは、「blob-in-relational-db」ソリューションです。ハックのように見え、データの進化、FT インデックス作成などを実際には許可していません。
私が遭遇していない他の解決策はありますか?
java - J2EE サーバー内の 2 つの異なるアプリケーション間で 2 つのオブジェクト インスタンスを一致させるには、どのような方法が最適でしょうか?
基本的に、2 つの別個のサーブレットによって作成された 2 つのオブジェクトが直接通信する J2ee アプリケーションがあり、これらのインスタンスが安定している必要があります。つまり、セッション中にお互いを「認識する」必要があります。
シーケンスはおおよそ次のとおりです。
- クライアントは、オブジェクト A を作成するサーブレット #1 にリクエストを送信します。
- クライアントは、オブジェクト B を作成するサーブレット #2 に 2 番目の要求を (最初の要求が返された後に) 送信します。
- オブジェクト B が JNDI を使用して A を見つけ、2 つのオブジェクトが対話します。
- クライアントはオブジェクト A にリクエストを送信し続け、オブジェクト A は B を再度検索する必要があります。
これら 2 つのインスタンスがセッション全体でそれぞれを認識していることを確認するにはどうすればよいですか? それらを JNDI にバインドしても問題が完全に解決されるわけではありません。オブジェクト B は元のサーブレット (サーブレット #2) と通信する必要があり、リクエスト全体で安定していないからです。
何か案は?
前もって感謝します。
はい、問題の説明が少し曖昧であることは認めます。しかし、それは非常に単純なアプリケーションではありません。それでも、私はそれをよりよく尋ねようとします:
私の最終目標は、Javaステートメントを単にデバッグするJavaデバッガとは対照的に、アプリケーション用の一種の「セマンティックデバッガ」を作成することです。
デバッグされるアプリケーションは、基本的にサーブレットです。私のツールが接続するもの。このツールは、デバッグ プロセスを制御する別のサーブレットを介してアプリケーションへの接続を維持します。これら 2 つのサーブレットは、常に相互に直接通信する必要があります。
私の現在の考えは、この通信を容易にするステートフル セッション Bean をセットアップすることです (まだセットアップに苦労しています)。
しかし、これをより良く達成する方法についての考えをいただければ幸いです。
architecture - AMQP はマシン内およびマシン間のソフトウェア バスとして適していますか?
AMQPについて頭を悩ませようとしています。アプリケーション間のマシン間 (クラスター、LAN、WAN) 通信には優れているように見えますが、1 台のマシン内でソフトウェア バスとして使用するのに (アーキテクチャ上および現在の実装面で) 適しているかどうかはわかりません。
現在の高性能メッセージ パッシング フレームワークを取り出して AMQP に置き換える価値はありますか? それとも、ローカル通信と非ローカル通信の区別が曖昧になり、RPC と同じ罠に陥るのでしょうか?
また、マシン内通信に WAN テクノロジを使用することによるパフォーマンスへの影響についても心配していますが、これはアーキテクチャよりも実装上の問題かもしれません。
戦争の話は大歓迎です。
language-agnostic - Buildfarms : オプション
ここでは Incredibuild を使用して、分散方式でコードをコンパイルします。ホーム ネットワークで使用できるオープン ソース (または無料) の代替手段があるかどうか疑問に思っていました。
それができない場合、Visual Studio と適切に統合された他の単純なソリューションはありますか?
編集: 手を汚して、必要に応じて各マシンのすべてを手動で構成できることを非常に嬉しく思います。
design-patterns - 疎結合の完全なシステムの設計に関するアドバイスはありますか?
互いにデータを必要とすることが多いが、必ずしも同じカテゴリに属していない疎結合システムを設計するにはどうすればよいでしょうか?
たとえば、古いペット ショップの例をさらに一歩進めて、ペット ショップのフランチャイズを作成してみましょう。各ペットショップには、連絡先情報、プロモーション、現在の在庫を掲載した独自の Web サイトがあります。
フランチャイズ オーナーは、すべてのフランチャイズ ペット ショップのリストと、連絡先情報、および場合によっては企業サイトで利用できる数枚の写真を掲載したいと考えています。彼らは、この情報を更新できるようにしたいと考えており、更新があれば自動的に双方向にプッシュされます。また、自動化された方法ですべての店舗のサイトにプロモーション情報を提供したいと考えています。
したがって、この例では、在庫リストは店舗によって「所有」され、連絡先情報は両方のエンティティによって部分的に「所有」され、プロモーション情報は HQ によって「所有」されます。任意の理由により、このすべてのデータを同じ場所に保存することはできません。
このような状況に対処するためのベスト プラクティスや一般的な戦略はありますか?
open-source - 分散ファイルシステムの健全性チェック
非常に大きなサイズ (現実的には最大約 100 TB) に拡張する必要がある分散ファイル システムが必要です。ファイルサイズはほとんどが 10 ~ 1500 KB の範囲ですが、一部のファイルは約 250 MB でピークになる場合があります。
私は、GFS のようなシステムにバックアップ用の冗長性が組み込まれているという考えが非常に気に入っています。これにより、統計的に、ファイルの損失は過去のものになります。
いくつかの要件があります。
- オープンソース
- SPOF なし
- 自動ファイル複製 (つまり、RAID は不要)
- マネージド クライアント アクセス
- ファイルのフラットな名前空間 - できれば
- 組み込みのバージョニング / 遅延削除
- 実証済みの導入
ほとんどの要件を満たしているため、MogileFS を真剣に検討しました。管理されたクライアントはありませんが、Java クライアントのポートを行うのはかなり簡単です。ただし、バージョン管理は組み込まれていません。バージョン管理がなければ、MogileFS に組み込まれているファイル レプリケーション以外に、通常のバックアップを行う必要があります。
基本的に、あるべきではない多くのファイルを突然パージするプログラミングエラーから保護する必要があります。MogileFS は X 個のデバイスにファイルを複製することで、ディスクとマシンのエラーから私を守ってくれますが、不当な削除を行った場合は救われません。
削除操作が実際に Y 日後まで有効にならないように指定できるようにしたいと考えています。削除は論理的に行われますが、実際に削除されるまで Y 日間ファイルの状態を復元できます。また、MogileFS には、書き込み中にディスクの破損をチェックする機能がありませんが、追加することもできます。
私たちは Microsoft ショップ (Windows、.NET、MSSQL) であるため、メンテナンスを容易にするためにコア部分を Windows で実行するのが最適であり、ストレージ ノードはライセンスのために *nix (またはその組み合わせ) を実行します。
自分でロールアップすることを検討する前に、何か提案はありますか? HadoopFS、OpenAFS、Lustre、GFS もチェックアウトしましたが、どちらも私の要件に一致していないようです。
performance - インプロセス、プロセス間、マシン間の呼び出しの相対的な違いは何ですか?
ペイロード サイズを無視すると、インプロセス呼び出し (C++ または Java など)、同じマシン上のプロセスへのソケット呼び出し、および別のマシン上のプロセスへのソケット呼び出しの間のレイテンシの相対的な違いは何ですか? これは、ns/ms 単位の最小レイテンシとして、または相対的な桁数で表すことができます。
私はこれに似たものを探しています:
http://duartes.org/gustavo/blog/post/what-your-computer-does-while-you-wait
...しかし、インプロセス対ネットワーク呼び出しに拡張されました(高速イントラネットを想定)。
java - これは分散メカニズムの現実的な期待ですか?
私は ActiveMQ をメッセージ ブローカーの候補として評価してきました。ActiveMQ のパフォーマンスの制限を理解するために、いくつかのテスト コードを作成しました。
次のようにできるだけ早くメッセージを送信することで、ブローカーで失敗状態を生成できます。
驚いたのはそのライン
ブローカが失敗状態になるとブロックします。何らかの例外がスローされることを期待していたので、ブローカーが失敗したという兆候があるでしょう。
テスト コードがブローカーにスパムを送信していることに気付きました。ブローカーが失敗することを期待しています。ただし、単にブロックするのではなく、ブローカーが「大声で」失敗した方がよいと思います。
これは非現実的な期待ですか?
アップデート:
Uri の回答は、3 月に提出された ActiveMQ バグ レポートを参照しています。バグの説明には、私が探しているもののように聞こえる提案が含まれています。待っているスレッドを構築するよりも。」
ただし、8 か月後、バグは現在 1 票で割り当てが解除されています。だから私は疑問がまだ残っていると思います.これはActiveMQが実装すべき(実装する?)ものですか?