8

ソケットを使用して 2 つのサーバー間でデータを送信するのは良い考えですか、それとも MQ のようなものを使用してデータを移動する必要がありますか。

私の質問: ソケットは信頼できますか? 一度だけ/データの確実な配信が必要な場合は?

他の解決策はありますか?

ありがとう。

4

8 に答える 8

15

ソケットは、ネットワーク通信を実行するためのアプリケーション レベルの API です。ソケットの信頼性は、ソケットの作成時に選択したネットワーク プロトコルによって異なります。TCP/IP を選択すると、「信頼できる」転送が得られます...限界まで。UDP/IP を選択すると、「信頼できない」転送が行われます。

他の回答で述べたように、TCP を使用すると、データが失われたり破損したりしないことが保証されます。

  1. ネットワークが長時間停止したり、送信側または受信側が停止したりすると、TCP/IP 接続が切断され、接続を再開する手順を実行しない限り、データが失われます。
  2. ネットワーク レベルのデータ破損がある場合、チェックサムによって検出されない可能性がわずかにあります。

TCP/IP が提供するよりも高いレベルの信頼性を保証するには、アプリケーションのソケットベースのネットワーク レイヤーの上に、より機密性の高いチェックサムと保証された配信メカニズムを実装する必要があります。または、面倒な作業を行うメッセージ キューイング製品を使用してください。

したがって、あなたの質問に対する答えは、ソケットの使用方法と、システムに必要な信頼性のレベルに依存するということです。

于 2009-07-21T07:28:25.007 に答える
2

ソケットは、実装を行うのと同じくらい信頼性が高く、基盤となるハードウェアに基づいています。保証された配信サービスを作成する手間がかからない場合 (100% が発生しない条件は?)、メッセージ キュー システムを使用することをお勧めします。メッセージキューには、標準ソケットを使用した場合に自分で実装する必要がある永続性、キューイング、再試行などのすべてが実装されています。

于 2009-07-21T07:05:23.900 に答える
2

何が起こっても配信を保証する必要があり (相手がメンテナンスのためにオフラインになった場合など)、すべてのロジックを自分で記述したくない場合は、おそらく MQ を使用する必要があります。ソケットは、相手が MQ であるかメッセージの最終受信者であるかに関係なく、相手に接続するために使用するものです。

于 2009-07-21T07:05:37.707 に答える
2

ソケットは、MQ を含むすべての通信がその上で行われるため、信頼性があります。

ただし、アプリケーションの信頼性を向上させるために、MQ で保証された配信を追加したい場合があります。それは何ですか?保証された配信により、メッセージが消費者によって少なくとも 1 回処理され、1 回以下処理されることが保証されます。消費者はオフですか?プロデューサーはオフですか?MQ サーバーがオフになっていますか? ディスクがクラッシュしますか?MQ のおかげで、何が起こってもメッセージが失われることはありません (管理者が自分の仕事を知っている場合)。それに加えて、コンシューマを再起動すると、メッセージが 2 回処理されることはありません。メッセージに百万ドルの送金が含まれている場合は、これが重要になる可能性があります。ただし、メッセージが妥当な時間内に処理されることを保証するものではありません。アプリケーションによっては、保証された配送よりも処理時間が重要な場合があります。

ニーズに応じて、サーバー間の通信に最適な方法を選択するのはあなた次第です。保証付きの配信配信には、財務とパフォーマンスの両方のコストがかかるため、本当に必要な場合にのみ使用する必要があります (たとえば、数百万ドルの送金)。

ほとんどのアプリケーションでは、失敗したときにメッセージを再試行することによってのみ満足のいくものを達成できます。しかし、それは本当の 1 回限りの保証された配信ではありません。自分で実装しようとしないでください。これは非常に難しいことであり、達成できる人はごくわずかです。MQ や Apache AQ のような複雑なソフトウェアを再開発することを検討することは有益です。

それが役立つことを願っています。

  • ジェブ
于 2009-07-21T07:50:13.793 に答える
1

ソケットは、データを転送するための生のメカニズムです。他のすべてはこれの上に実装されます。OSI ネットワーク モデルでは、レイヤ 4 に属します。信頼性の高いエンドツーエンド接続を実装しますが、エンド プロトコルとして使用されることはほとんどありません。ほとんどの場合、アプリケーション層を実装する必要があります。これがどうなるかは、アプリケーション (ファイルを転送する必要があるのか​​、単にメッセージを送信する必要があるのか​​) とネットワーク インフラストラクチャによって異なります。

于 2009-07-21T07:09:24.767 に答える
0

ストリーム ソケットを使用する場合、TCP プロトコルにより、データが転送中に失われず、破損する可能性が低いことが保証されます (ただし、16 ビットのチェックサムで十分かどうか、またはアプリケーション レイヤーのチェックサム メカニズムが必要かどうかを判断する必要があります)。

MQ システムが提供するもの、および必要な場合とそうでない場合があるのは、アプリケーション レベルのトランザクション タイプの信頼性です。つまり、断続的なハードウェアまたはソフトウェアの障害に直面しても配信を保証する機能です。

于 2009-07-21T07:13:39.907 に答える
0

データの種類によっては、単純な Web サービスが最も迅速なソリューションになる場合があります。セットアップとテストは比較的簡単です。ただし、いくつかの特定の例では、実行しているデータと環境の種類を知る必要があります。

于 2009-07-21T07:13:51.480 に答える
0

開発しているアプリケーションのタイプに大きく依存します。送信されたメッセージの応答または ack が必要なプログラムを作成している場合は、TCP ソケットが適しています。ただし、ワークフローの種類のシナリオを実装する場合は、メッセージ キューを使用する必要があります。

于 2009-07-21T07:25:49.193 に答える