質問

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

私の質問:データを 1 回だけ/確実に配信する必要がある場合、ソケットは信頼できますか?

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

ありがとう。

役に立ちましたか?

解決

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

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

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

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

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

他のヒント

ソケットは、あなたの実装を作るほど信頼性があり、基盤となるハードウェアに基づきます。あなたは(どのような条件の下で?100%が起こるだろうことはありません)保証された配信サービスを作るの面倒をしたくない場合は、メッセージキューシステムは良い賭けです。メッセージキューは、あなたが標準ソケットと一緒に行った場合は、自分で実装する必要があるでしょうリトライなどをキューイング、持続性のすべてを実装しているだろう。

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

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

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

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

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

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

  • ジェブ
あなたはストリームソケットを使用する場合は、

、TCPプロトコルは、データが失われないことを保証します伝送中と(あなたがその16ビットのチェックサムが十分であるか、アプリ層のチェックサムメカニズムを必要とするかどうかを決定する必要がありますが)壊れることはほとんどありません。

何MQシステムが提供し、何をか必要でない場合がありますことは、アプリケーション・レベルのトランザクション型です信頼性、でも断続的ハードウェアやソフトウェアの障害に直面して配信を保証する能力、すなわちます。

データの種類に応じて、単純なWebサービスは、最速の溶液であってもよいです。彼らは、セットアップとテストするのは比較的簡単です。いくつかの具体的な例については、私はあなたが実行しているデータや環境の種類を知っておく必要があると思いますけど。

それはあなたが開発しているアプリケーションの種類に依存しlargly。それはあなたがTCPソケットが良いですその後、送信されたメッセージの応答またはACKを必要とするプログラムを書いています。あなたは、シナリオの一部のワークフローの種類を実装している場合しかし、あなたは、メッセージキューを使用する必要があります。

scroll top