問題タブ [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# - 監視プラットフォーム用の分散システムを実装する方法
作業プロジェクトに適切なパターンを実装するのに問題があり、適切な設計戦略に満足するまで先に進みたくありません。
このプロジェクトは、Genesys Computer Telephony Integration(CTI)プラットフォームに基づいています。基本的に、Genesysが提供するSDKを利用して、単一のクライアントがリモートで実行されている多数のGenesysサービス(またはTServer)にサブスクライブします。次に、クライアントは特定のTServerに関連付けられた電話番号(DN)のヒープ全体を登録し、呼び出しイベントを待ちます。イベントが発生すると、クライアントによってキャプチャされ、データベースに保存されます。他の多くの操作が実行されますが、この段階では関係ありません。多くの通信作業はGenesysProtocolManagerオブジェクトによって処理されるため、単一のイベントハンドラーがすべてのクライアントのイベントデータをキャプチャし、それがEventBrokerServiceによって処理されます。。これは、接続プロセス、単一DNの登録、およびイベント関数を説明するための簡単なコードです。
次に、イベントをリッスンします(さまざまなイベントがあります)。
Genesysプラットフォームには、Genesys構成サーバーと呼ばれる別のコンポーネントが付属しています。構成サーバーは、DN情報やその他の「オブジェクト」全体を含む、TServerのすべての詳細を保持します。それは本当にただの派手なDBMSです。違いは、構成サーバーにサブスクライブしてCRUDイベント(つまり、 CreateEvent、UpdateEventなど)に登録することもできることです。コードを説明しない限り、概念は上記と同様です。(つまり、さまざまな構成サーバーに登録して、CRUDイベントをリッスンできます)。
ほとんどの場合、私は上記を十分にカバーしており、これまでの実装に満足しています。私が達成しようとしていることは次のとおりです。
分散システムを実装しようとしています。一言で言えば、システムは2つのコンポーネントで構成されます。監視サービスおよびディスパッチャサービスコンポーネント(これらはすべてWindowsサービスになります)
監視サービスコンポーネント
- 「監視サービス」は、1つまたは複数のTサーバーに接続して、通話イベントを監視します
- 監視サービスは、ディスパッチャサービスにもサブスクライブします
ディスパッチャサービスコンポーネント
- 「ディスパッチャサービス」は、1つ以上の構成サーバーに接続し、CRUDイベントを待機します。
- イベントが発生すると(つまり、構成サーバーに新しいDNが追加されると)、ディスパッチャーは作成イベントをキャプチャし、すべての監視サービスサブスクライバーに通知します。その後、ディスパッチャはローカルデータベースも更新するため、DN情報は冗長性のために保持されます(ディスパッチャが構成サーバーに接続できない場合)。
- 新しく作成されたDNが属する(一意のDBIDおよびTServerID識別子によって区別される)監視サブスクライバーは、DNを受け入れ、リスニングイベントに登録します(最初のコードスニペットに同様に示されています)。必要なTServer接続を持たない監視サブスクライバーは、当然、受信した要求をドロップします。
- ディスパッチャは、新しく追加されたTServerを受信することもできますが、今回は、その監視サービスが別の接続を確立するために、どの監視サービスを利用するかを決定します。これは、監視サービスで実行されている現在のセッションの数や、単一のサービスがその時点で咀嚼しているメモリの量などの要因によって決まります。
私はいくつかの基本的な概念を考え出しました。これまでに行ったことを説明するためのコードをいくつか示します。
私が選択した通信方法は、NetTcpBindingを使用したWCFであるため、単純な部分として、インターフェイスを公開しました。
ディスパッチャでは、次のように実装しました。
上記のコードから、サブスクライブしている各監視サービスが一意の識別子を持っていることは明らかです。これにより、適切なサービスコールバックコンテキストが取得されます(他のファンキーな操作を行うことにした場合)。
これが私のジレンマが本質的に始まるところです。長い話を短くするために、私の質問は次のとおりです。
- Dispatcherサービス内からすべてのサブスクライバーにメッセージを渡そうとするときにDisMonServiceクラスを処理するにはどうすればよいですか。つまり、新しいDNが追加されたので、DisMonServiceクラスを呼び出して、すべてのサブスクライバーに通知します。
- DisMonServie内からすべてのサブスクライバーへの更新を処理する際に実装するのに最適なパターンは何でしょうか
現時点では、ダミークライアントがディスパッチャに接続し、それ自体が登録されています。今後、DisMonServiceクラスにアクセスするための最良の方法は何ですか。
私が尋ねようとしていることで誰かを混乱させないことを願っています。私が本当に見つけようとしているのは、上記のシステムや提案などを実装するための最良の方法だと思います。いくつかのコードサンプルとスニペットは本当に役に立ちます。
これは私の最初の投稿ですので、フォーラムの基準について説明していなかった場合は、誰にでもお詫び申し上げます。
c++ - UDPソケット経由で送信するためにC ++でベクトルをシリアル化しますか?
学期末プロジェクトの一環として、分散型チャット システムを実装する必要があります。システムはスケーラブルで堅牢である必要があります。これらの基準を念頭に置いて、ソケットを介してベクトル オブジェクトを送信する方法について混乱しています。
ベクトルは動的に割り当てられるため、そのオブジェクトをそのまま送信しても、それが指すメモリがコピーされないため機能しません。このシリアライゼーションを実現するには、最適なオプションです。ただし、私たちのプロジェクトで必要なため、Boost や Google Protocol Buffers などのサードパーティ ライブラリを使用することは想定していません。
したがって、ベクターオブジェクトをシリアル化してネットワーク経由で送信するには、続行方法を説明する開始ガイドが見つからないようです。また、これに使用できる他の代替手段はありますか?
ベクトルには、チャット グループの各メンバーの文字列 (IP アドレス:ポート) が含まれます。
どんな助けでも素晴らしいでしょう。ありがとうございました。
注: チャット クライアントをクラスターで実行する必要があります。システムを堅牢でスケーラブルにするためには、エンディアンも考慮する必要があると思います。
multithreading - より堅牢でスケーラブルな方法はどれですか?
私は分散チャットシステムを実装しています。このシステムには次のオプションがあります。
各ノードで実行されているクライアントとサーバーを別々のスレッドとして実行します。受信者として機能するサーバーはデーモンスレッドとして実行され、クライアントはユーザー入力を通常のスレッドとして受け取ります。
クライアント用とサーバー用の2つのプロセスをフォークします。
どちらを先に進めるかを推論することはできません。どんな洞察も素晴らしいでしょう!
sockets - UDPソケットを介して送信するためにメッセージ形式をバッファにエンコードしますか?
プロジェクトの一環として、データグラムパケットのソケットを使用して構造を送信する方法を決定する必要があります。そのために、サードパーティのライブラリを介したシリアル化を使用することは想定されていません。私が思いついたのは、構造体フィールドをバッファーにエンコードすることです。
例えば。
この構造を送信するには、これを次のようなバッファにエンコードします。
/ s "sizeofmessage" / i "sequence_number" / data "datamessage"
これを達成するためのより良い方法はありますか?
soa - SOAに最適な汎用メッセージ形式は?
多数のサーバー(最終的にはサーバーのグループ)があり、それぞれが異なるサービス(SOA)である場合、次のことができるようにします。
- 高スループット、低遅延、従量制のネットワークを介してTCP経由で要求を送信し、応答を受信します。
- 次のような一般的なメッセージ形式を使用します。
- エンコードとデコード/解析が高速
- リストとバイナリ文字列をサポートします
- 必ずしもすべてのサービスを一度に更新する必要はありません(たとえば、フィールドを追加しても、古いサービスがメッセージを読み取って、期待しているすべてのフィールドを選択するのを防ぐことはできません)
どのフォーマットをお勧めしますか?現在、メッセージをBSONとしてエンコードすることを検討していますが、いくつかの提案を聞きたいと思います。
ありがとう :-)
mysql - MySQL:ストアドプロシージャをアトミックに変更する方法は?
インターネットで検索したところ、ストア プロシージャの本体を変更する唯一の方法は、削除して再度作成することであることがわかりました。メカニズムに問題はないように見えますが、サーバー データベース上のデータを更新するためにストア プロシージャを呼び出し続けるクライアント アプリケーション (または数千の分散クライアント) がある場合、プロシージャを削除すると、データの損失や破損が発生します。
「CREATE PROCEDURE IF EXIST...」のような構文があるか、それと同様の機能があれば、更新操作がスムーズに行われると考えています。しかし、MySQL で利用できるようなものは見つかりませんでした。
では、この問題はどのように解決できると思いますか? 素晴らしい考え?
java - RMI サーバーをシャットダウンする前にタスクを実行する
私はJava RMIを使用して、サーバー/ブランチを閉じるときに各サーバーが独自のデータベースに保存されたデータを持つブランチを表す分散銀行システムを実装しています。そのデータベースに保存されているアカウントは別のサーバー/ブランチに転送する必要があります。サーバーが閉じられる直前のこのタスクのコード 助けていただければ幸いです。
java - リモートメソッド呼び出し(rmi)によるピアツーピアシステム
RMI を使用して作成されたピア ツー ピア システムに、リーダー選挙アルゴリズムであるベクトル タイムスタンプなどの分散アルゴリズムをどのように組み込みますか? 分散アルゴリズムを利用するピア ツー ピア システムを考え出さなければなりません。どなたかアイデアをいただければ幸いです。
乾杯
distributed-system - ビュー変更アルゴリズムと paxos
ビュー変更アルゴリズムと Paxos の関係はどうなっているのだろうか? 私の講義ノートでは、「各ビューの参加者はプライマリに同意し、後でレプリケーション プロセスを管理する」と述べています。このコンテキストでのビューは何ですか? Paxos はこれにどのように関係していますか?
algorithm - モデルチェック Paxos
コンセンサス アルゴリズムを実装しました (Paxos に基づく)。ランダムなテストケースをいくつか追加しましたが、問題ないようです。しかし、モデル チェックを介してテストを行いたいですか? 適切な記事が見つかりませんでした。Paxos でのモデル チェックの方法を共有してください
ありがとう