問題タブ [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.
c# - データベースキューの並列処理
データベース テーブルが MSSQL 2005 のキューとして使用される小規模なシステムがあります。いくつかのアプリケーションがこのテーブルに書き込みを行っており、1 つのアプリケーションが FIFO 方式で読み取りと処理を行っています。
複数の処理アプリケーションを実行できる分散システムを作成できるようにするには、もう少し高度にする必要があります。その結果、2 ~ 10 個の処理アプリケーションが実行可能になり、作業中に互いに干渉することはありません。
私の考えは、プロセスが既に処理中であることを示す行でキュー テーブルを拡張することです。処理アプリケーションは、最初にその識別子を使用してテーブルを更新し、次に更新されたレコードを要求します。
だから、このようなもの:
処理後、テーブルの処理列を「完了」などの別の値に設定します。
このアプローチについて 3 つの質問があります。
最初:これはこの形で機能しますか?
第二に、それが機能している場合、それは効果的ですか? そのようなディストリビューションを作成するための他のアイデアはありますか?
3 番目: MSSQL では、ロックは行ベースですが、一定量の行がロックされると、ロックはテーブル全体に拡張されます。したがって、最初のアプリケーションがトランザクションを解放しない限り、2 番目のアプリケーションはそれにアクセスできません。テーブル全体をロックせず、行ロックのみを作成するには、選択範囲 (トップ x) をどのくらいの大きさにできますか?
php - 分散システム全体で PHP セッションを拡張するのは難しいですか?
仕事ではほとんどすべてを Java と perl で行っていますが、私は PHP とセッションを使用して機能を構築したいと考えていました。多くのサーバーに分散されているため、私たちのシステムで PHP セッションを実行しようとするのは悪い考えだと考える人もいました。具体的な問題は何ですか?
linux - コモディティ Linux ストレージ ファームに最適な分散ファイル システム
予備の Intel Linux サーバーが多数 (数百台) 配置されており、それらを Web ホスティングおよびファイル共有環境の分散ファイル システムに使用したいと考えています。これは HPC アプリケーション向けではないため、高いパフォーマンスは重要ではありません。主な要件は高可用性です。1 つのサーバーがオフラインになっても、そのハード ドライブに保存されているデータは他のノードから引き続き利用できます。TCP/IP 上で実行し、標準の POSIX ファイル権限を提供する必要があります。
私は以下を見てきました:
Lustre ( http://wiki.lustre.org/index.php?title=Main_Page ):非常に近いですが、ノード上のデータに冗長性はありません。RAID または DRBD を使用してデータを HA にする必要があります。Sun とオープン ソースでサポートされているため、しばらくは使用できるはずです
gfarm ( http://datafarm.apgrid.org/ ): 冗長性を提供しているように見えますが、複雑さと保守性が犠牲になっています。Lustre ほどサポートされていません。
これらのシステムまたは他のシステムで動作する可能性のある経験がある人はいますか?
amazon-web-services - Amazon S3 アーキテクチャ
投稿 @ http://highscalability.com/amazon-architectureでは、Amazon のアーキテクチャ全般について説明していますが、Amazon S3 がどのように実装されているかを知りたいと思っています。
私の推測のいくつかは
- HDFS のような分散ファイル システム http://hadoop.apache.org/core/docs/current/hdfs_design.html
- CouchDB http://couchdb.apache.org/のような非リレーショナル永続 DB
Python や PHP などのスクリプト言語を使用して、これに似たものをはるかに小規模に実装することは可能ですか?
openmp - Intel の Cluster OpenMP の類似物
Intel Cluster OpenMP の類似物はありますか? このライブラリは、共有メモリ マシン (SMP や NUMA など) をシミュレートしながら、分散メモリ マシン (イーサネット接続された PC のクラスターなど) で実行します。
このライブラリを使用すると、クラスタ上で直接 openmp プログラムを開始できます。
私は検索します
- 分散クラスターで実行されるマルチスレッド プログラムを可能にするライブラリ
- またはライブラリ (libgomp などの置き換え)。分散クラスターで OpenMP プログラムを実行できるようにします。
- Intel C++ 以外に、openmp プログラムからクラスター コードを生成できるコンパイラー
p2p - どの DHT アルゴリズムを使用するか (2 つの個別の DHT を結合したい場合)?
私はいくつかの DHT システム、特にペストリーとコードを調べてきました. チャーンに対する Chord の反応についていくつかの懸念を読んだことがありますが、それは私の目の前にある仕事にとっては問題にはならないと信じています。コースプロジェクトのために中央サーバーに依存しない、ある種のソーシャルネットワークサービスを実装しています。ルックアップには DHT が必要です。
最初はネットワーク内のすべてのサーバーを知りません。前述したように、メインのトラッカー サーバーはありません。これは次のように機能します。各クライアントには 3 つの専用サーバーがあります。3 台のサーバーにはクライアントのプロファイルがあり、それはウォールであり、個人情報であり、複製されています。ユーザーが友人を追加したとき(クライアントのアドレスを入力したとき)にのみ、他のグループのサーバーについて知ることができます。したがって、3 台のサーバーからなる 2 つのグループに 2 つの個別の DHT を作成し、それらが互いに友達になったら、DHT に参加したいと思います。これは一貫して行いたいと思います。プロトコルに精通する時間があまりないので、2 つの別々の DHT に参加したい場合、どちらが優れているか知りたいですか?
java - Java RMI と JMS の違いは何ですか?
Java で分散アプリケーションを設計する場合、同じ種類の問題に対処するテクノロジがいくつかあるようです。Java Remote Method InvocationとJava Message Serviceについて簡単に読んだことがありますが、その違いを実際に理解するのは困難です。Java RMI は、JMS が非同期通信を使用するため、JMS よりも緊密に結合されているように見えますが、それ以外には大きな違いは見られません。
- それらの違いは何ですか?
- そのうちの 1 つは他の 1 つよりも新しいですか。
- 企業でより一般的/人気のあるものはどれですか?
- 彼らはお互いにどのような利点がありますか?
- どちらが優先されるのはいつですか?
- 実装の難易度に大きな違いはありますか?
また、 Web サービスとCORBAも同じ問題に対処していると思います。
client-server - メッセージ ブローカとデータベースを使用して分散アプリケーションを設計する方法は?
POS アプリ アーキテクチャのアドバイス で説明されているような、分散型 POS システムを実装したいと考えています。
これは、次の特徴を持つ分散システムです。
- クライアントはミッション クリティカルであり、ネットワーク接続やサーバーに障害が発生した場合でも動作するはずですが、ほんの数日程度です。
- クライアントは簡単にインストールできる必要があります。
- 各クライアントには、独自のローカル組み込みデータベースがあります。
- クライアントとサーバー間の通信は、メッセージ キューを使用しています。
- サーバーは、バックアップ、簿記、統計、およびクライアントへの価格の配布に使用されます。
- サーバーはインターネット上に配置されます。
JavaDB をデータベースとして Java Swing でクライアントを実装しています。
アプリケーションは、メッセージ ブローカーおよびデータベースとどのように通信する必要がありますか?
メッセージ キューとメッセージ ブローカを使用したことがありません。私の考えでは、アプリケーションはデータベースから読み取りますが、メッセージ ブローカーに書き込み、メッセージ ブローカーはデータベースに書き込み、サーバーと通信します。それともこれは悪い考えですか?これをどのように解決すればよいですか?
したがって、組み込みデータベースのほかに、簡単にインストールできるように、できればアプリケーションに組み込むことができる Java で記述されたメッセージ ブローカーを見つける必要があります。
c++ - シンプルで軽量なメッセージパッシングを行うためにどのライブラリを使用できますか?
分散ノード間の通信が必要なプロジェクトを開始します(プロジェクトはC ++です)。ノード間で非常に単純なメッセージ(基本的にはテキストの文字列のみ)を渡すための軽量のメッセージパッシングライブラリが必要です。ライブラリには、次の特性が必要です。
外部設定は必要ありません。コードですべてを稼働させる必要があります-ユーザーにパッケージのインストールや構成ファイル(接続するIPアドレスとポートのリスト以外)の編集を要求したくありません。
ライブラリが使用する基盤となるプロトコルはTCPである必要があります(または、UDPの場合、ライブラリはメッセージの最終的な受信を保証する必要があります)。
ライブラリは、任意の大きな文字列(最大3GB以上と考えてください)を送受信できる必要があります。
ライブラリは、セキュリティメカニズム、フォールトトレランス、または暗号化をサポートする必要はありません。高速で、シンプルで、使いやすいものである必要があります。MPIを検討しましたが、プロジェクトではユーザーのマシンでのセットアップが多すぎると結論付けました。
そのようなプロジェクトにはどのライブラリをお勧めしますか?私は自分で転がしますが、時間の制約のため、それは実現可能ではないと思います。
locking - ZooKeeperとRabbitMQ/Qpidを一緒に-やり過ぎですか、それとも良い組み合わせですか?
ご挨拶、
マルチデータセンター分散システムのいくつかのコンポーネントを評価しています。(RabbitMQまたはQpidのいずれかを介して)メッセージキューを使用するため、エージェントは、アドレス指定、ルーティング、負荷分散、または再送信について心配することなく、他のエージェントに対して非同期要求を行うことができます。
多くの場合、エージェントは高度な同時アクセス用に設計されていないコンポーネントと対話するため、競合状態を回避するためにロックとエージェント間の調整が必要になります。また、エージェントまたはデータセンターの障害にシステムが自動的に対応するようにします。
上記のユースケースを念頭に置いて、ZooKeeperは適切であるように思われました。しかし、ZKとメッセージキューの両方を使おうとするのはやり過ぎではないかと思います。Zookeeperが行うことは、AMQPメッセージングを使用して自分のクラスターマネージャーで実行できるようですが、それを正しく行うのは難しいでしょう。一方、ZooKeeperを使用してメッセージキューを実装した例をいくつか見てきましたが、RabbitMQ/Qpidの方が自然に適していると思います。
誰かがこのような組み合わせを使用したことがありますか?
前もって感謝します、
-クリス