Frage

Ist es eine gute Idee, Sockets zum Senden von Daten zwischen zwei Servern zu verwenden, oder sollte ich zum Verschieben von Daten etwas wie MQ verwenden?

Meine Fragen:Sind Sockets zuverlässig, wenn ich nur eine einmalige/gesicherte Lieferung der Daten benötige?

Gibt es noch andere Lösungen?

Danke.

War es hilfreich?

Lösung

Sockets sind eine API auf Anwendungsebene zur Durchführung der Netzwerkkommunikation.Die Zuverlässigkeit von Sockets hängt vom Netzwerkprotokoll ab, das Sie beim Erstellen des Sockets auswählen.Wenn Sie TCP/IP wählen, erhalten Sie eine „zuverlässige“ Übertragung ...bis zu einer Grenze.Wenn Sie UDP/IP wählen, erhalten Sie eine „unzuverlässige“ Übertragung.

Wie in anderen Antworten erwähnt, stellt TCP sicher, dass Sie bis zu einem gewissen Punkt keine Daten verlieren oder beschädigen:

  1. Wenn ein lang genug Netzwerkausfall vorliegt oder der Absender oder Empfänger stirbt, wird eine TCP/IP -Verbindung unterbrochen, und Sie verlieren Daten, es sei denn, Sie ergreifen Schritte, um die Verbindung neu zu starten.
  2. Bei Datenbeschädigung auf Netzwerkebene besteht eine geringe Wahrscheinlichkeit, dass sie von den Prüfsummen nicht erkannt werden.

Für höhere Zuverlässigkeitsgarantien als TCP/IP müssen Sie sensiblere Prüfsummen- und garantierte Übermittlungsmechanismen über der Socket-basierten Netzwerkschicht Ihrer Anwendung implementieren.Oder verwenden Sie ein Nachrichtenwarteschlangenprodukt, das Ihnen die Arbeit abnimmt.

Die Antwort auf Ihre Frage lautet also, dass es davon abhängt, wie Sie Sockets verwenden und welches Maß an Zuverlässigkeit Ihr System benötigt.

Andere Tipps

Sockel sind so zuverlässig, wie Sie Ihre Implementierung machen, und auf der Basis der zugrunde liegenden Hardware. Wenn Sie den Aufwand nicht wollen, eine garantierte Zustelldienst zu machen (unter welchen Bedingungen? 100% wird nie passieren werden), ein Message Queue-System ist eine gute Wette. Die Nachrichtenwarteschlange wird haben alle die Persistenz umgesetzt, Warteschlangen, Wiederholungen, etc., die Sie benötigen, sie zu implementieren, wenn Sie mit Standard-Steckdosen gingen.

Sie sollten wahrscheinlich eine MQ verwenden, wenn Sie ganz gleich garantierte Lieferung benötigen, was passiert (wie wenn die andere Partei für die Wartung offline geht), und Sie wollen nicht die gesamte Logik selbst zu schreiben. Sockets ist, was Sie zu einer anderen Partei verbinden verwenden, unabhängig davon, ob diese Partei der MQ oder der endgültige Empfänger der Nachricht ist.

Sockel sind zuverlässig, da jede Kommunikation auf ihn, einschließlich MQ durchgeführt wird.

Sie können aber einige garantierte Lieferung mit MQ hinzufügen mögen die Zuverlässigkeit Ihrer Anwendung zu verbessern. Was ist es? garantierte Lieferung stellt sicher, dass Ihre Nachricht mindestens einmal verarbeitet wird, und nicht mehr als einmal, durch die Verbraucher. die Verbraucher ausgeschaltet sind? der Produzent ist ausgeschaltet? der MQ-Server ausgeschaltet ist? die Platte abstürzt? Dank MQ, wird keine Nachricht verloren, was auch immer (vorausgesetzt, dass Ihr Admin seinen Job kennt) passiert. Zusätzlich zu, dass, wenn Sie die Verbraucher neu starten, wird keine Meldung zweimal bearbeitet werden. Weicht kann wichtig sein, wenn die Nachrichten Millionen Dollar Transfers enthalten. Aber es funktioniert nicht garantieren, dass Ihre Nachricht in einer raisonnable Menge an Zeit verarbeitet wird. und die Verarbeitungszeit ist manchmal wichtiger, dass garantierte Lieferung, je nach Anwendung.

Es ist an Ihnen, den besten Weg zu wählen zwischen Ihren Servern je nach Bedarf zu kommunizieren. Garantierter Lieferung Lieferung sowohl Finanz- und Leistungskosten, so ist es nur verwendet werden, wenn wirklich benötigt (in Millionen Dollar tranfers zum Beispiel).

Für die meisten Anwendungen können Sie etwas befriedigend nur durch erneuten Versuch Ihre Nachrichten erreichen, wenn sie dann nicht. Aber das ist keine wirkliche nur einmal garantierte Lieferung. nicht versuchen, es zu implementieren, indem Sie sich selbst, ist es eine sehr schwierige Sachen, die nur wenige sind in der Lage zu erreichen. Es ist useles eine Software zu betrachten redevelopping wie MQ oder Apache AQ kompliziert.

Ich hoffe, das hilft.

  • jeb

Sockel ist der Roh-Mechanismus zum Übertragen von Daten. Alles andere ist auf dieses umgesetzt. In dem OSI-Netzwerkmodell sie gehören 4. Schicht Obwohl sie zuverlässige End-to-End-Implementierung Verbindung, sie werden selten als Ende-Protokoll verwendet. Sie müssen fast immer eine Anwendungsschicht implementieren. Was würde dies hängt von Ihrer Anwendung sein (Sie braucht die Übertragung von Dateien oder Nachrichten senden) und Netzwerkinfrastruktur.

Wenn Sie eine Stream-Socket verwenden, sorgt für das TCP-Protokoll, dass die Daten nicht verloren geht und bei der Übertragung ist unwahrscheinlich, erhalten beschädigt (obwohl Sie müssen entscheiden, ob seine 16-Bit-Prüfsummen sind ausreichend oder benötigen Sie einen App-Layer-Prüfsumme Mechanismus).

Welche MQ-Systeme bieten, und was können Sie oder können nicht brauchen, ist auf Anwendungsebene Transaktionstyp Zuverlässigkeit, dh die Fähigkeit, Lieferung, auch angesichts der intermittierenden Hardware- oder Softwarefehler zu gewährleisten.

Je nach Art der Daten ein einfacher Web-Service kann die schnellste Lösung. Sie sind relativ einfach einzurichten und zu testen. Obwohl für einige spezifische Beispiele muss ich würde wissen, welche Art von Daten und Umgebung, die Sie ausführen.

Es hängt largly von der Art der Anwendung, die Sie entwickeln. Es Sie schreiben ein Programm, wo Sie Antwort oder ack der Nachricht müssen dann Steckdosen sind gut TCP gesendet. Aber, wenn Sie einige Workflow-Art von Szenario implementieren, sollten Sie Message Queues verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top