im Gegensatz zum Schreiben einer eigenen Bibliothek.
Wir arbeiten hier an einem Projekt, das ein sich selbst teilender Serverpool sein wird. Wenn ein Abschnitt zu schwer wird, würde der Manager ihn teilen und als separaten Prozess auf einen anderen Computer stellen. Außerdem werden alle betroffenen Clients, die davon betroffen sind, darauf hingewiesen, eine Verbindung zum neuen Server herzustellen.
Ich bin neugierig auf die Verwendung von ZeroMQ für die Kommunikation zwischen Servern und Prozessen. Mein Partner würde es vorziehen, seine eigenen zu rollen. Ich freue mich auf die Community, um diese Frage zu beantworten.
Ich bin selbst ein ziemlich unerfahrener Programmierer und habe gerade etwas über Messaging-Warteschlangen gelernt. Während ich gegoogelt und gelesen habe, scheint es, dass jeder Messaging-Warteschlangen für alle möglichen Dinge verwendet, aber warum? Was macht sie besser als das Schreiben einer eigenen Bibliothek? Warum sind sie so häufig und warum gibt es so viele?
Antworten:
Bei der Einführung der ersten Version Ihrer App wahrscheinlich nichts: Ihre Anforderungen sind genau definiert und Sie entwickeln ein Messaging-System, das Ihren Anforderungen entspricht: kleine Funktionsliste, kleiner Quellcode usw.
Diese Tools sind nach der ersten Version sehr nützlich , wenn Sie Ihre Anwendung tatsächlich erweitern und weitere Funktionen hinzufügen müssen. Lassen Sie mich einige Anwendungsfälle nennen:
Am Anfang hatten Sie 3 Maschinen in einem LAN, keine merklichen Verzögerungen, alles kommt zu jeder Maschine. Ihr Client / Boss / Pointy-Haired-Devil-Boss wird angezeigt und teilt Ihnen mit, dass Sie die App in einem WAN installieren werden, das Sie nicht verwalten. Anschließend treten Verbindungsfehler, schlechte Latenz usw. auf. Sie müssen die Nachricht speichern und das Senden wiederholen sie später: gehe zurück zum Code und stecke dieses Zeug ein (und genieße)
Gesendete Nachrichten müssen Antworten haben, aber nicht alle: Sie senden einige Parameter ein und erwarten als Ergebnis eine Tabelle, anstatt nur zu senden und zu bestätigen. Gehen Sie zurück zum Code und schließen Sie dieses Zeug an (und genießen Sie es.)
Und viele andere Anwendungsfälle, die ich vergessen habe ...
Sie können es selbst implementieren, verbringen aber nicht viel Zeit damit: Sie werden es wahrscheinlich sowieso später ersetzen.
quelle
Das ist sehr ähnlich wie zu fragen: Warum eine Datenbank verwenden, wenn Sie Ihre eigene schreiben können?
Die Antwort lautet: Die Verwendung eines Tools, das es schon seit einiger Zeit gibt und das in vielen verschiedenen Anwendungsfällen gut verstanden wird, zahlt sich im Laufe der Zeit und mit der Entwicklung Ihrer Anforderungen immer mehr aus. Dies gilt insbesondere dann, wenn mehr als ein Entwickler an einem Projekt beteiligt ist. Möchten Sie Support-Mitarbeiter für ein Warteschlangensystem werden, wenn Sie zu einem neuen Projekt wechseln? Die Verwendung eines Werkzeugs verhindert dies. Es wird zum Problem eines anderen.
Ein typisches Beispiel: Ausdauer. Das Schreiben eines Tools zum Speichern einer Nachricht auf der Festplatte ist einfach. Es ist schwierig, einen Persistor zu schreiben , der in vielen verschiedenen Anwendungsfällen gut und stabil skaliert und funktioniert, überschaubar und billig zu unterstützen ist. Wenn Sie jemanden sehen möchten, der sich darüber beschwert, wie schwer es ist, schauen Sie sich das an: http://www.lshift.net/blog/2009/12/07/rabbitmq-at-the-skills-matter-functional-programming-exchange
Wie auch immer, ich hoffe das hilft. Schreiben Sie auf jeden Fall Ihr eigenes Werkzeug. Viele, viele Leute haben es getan. Was auch immer Ihr Problem löst, ist gut.
quelle
Ich denke darüber nach, ZeroMQ selbst zu verwenden - daher bin ich auf diese Frage gestoßen.
Nehmen wir für den Moment an, dass Sie ein Nachrichtenwarteschlangensystem implementieren können, das alle Ihre Anforderungen erfüllt. Warum sollten Sie ZeroMQ (oder eine andere Bibliothek von Drittanbietern) anstelle des Roll-Your-Own-Ansatzes verwenden? Einfach - Kosten.
Nehmen wir für einen Moment an, dass ZeroMQ bereits alle Ihre Anforderungen erfüllt. Alles, was Sie tun müssen, ist, es in Ihren Build zu integrieren, ein Dokument zu lesen und es dann zu verwenden. Das muss viel weniger Aufwand sein, als das eigene zu rollen. Außerdem wurde die Wartungslast auf ein anderes Unternehmen verlagert. Da ZeroMQ kostenlos ist, haben Sie Ihr Entwicklungsteam soeben um das ZeroMQ-Team erweitert.
Wenn Sie ein Softwareentwicklungsunternehmen betreiben würden, würden Sie meiner Meinung nach die Kosten / das Risiko der Verwendung von Bibliotheken von Drittanbietern gegen das Rolling Ihrer eigenen Bibliotheken abwägen. In diesem Fall würde die Verwendung von ZeroMQ zweifellos gewinnen.
Vielleicht leiden Sie (oder besser gesagt Ihr Partner), wie so viele Entwickler, unter dem "Not Invented Here" -Syndrom? Wenn ja, passen Sie Ihre Einstellung an und überdenken Sie die Verwendung von ZeroMQ. Persönlich bevorzuge ich die Vorteile der Einstellung „Stolz anderswo gefunden“. Ich hoffe, ich kann stolz darauf sein, ZeroMQ zu finden ... die Zeit wird es zeigen.
BEARBEITEN: Ich bin auf dieses Video von den ZeroMQ-Entwicklern gestoßen, das darüber spricht, warum Sie ZeroMQ verwenden sollten.
quelle
Nachrichtenwarteschlangensysteme sind Transaktionssysteme, die konzeptionell einfach als Client zu verwenden sind, aber als Implementierer schwer zu finden sind, insbesondere unter Berücksichtigung dauerhafter Warteschlangen. Sie könnten denken, Sie könnten mit dem Schreiben einer schnellen Messaging-Bibliothek davonkommen, aber ohne Transaktionen und Persistenz hätten Sie nicht die vollen Vorteile eines Messaging-Systems.
Persistenz bedeutet in diesem Zusammenhang, dass die Messaging-Middleware nicht behandelte Nachrichten im permanenten Speicher (auf der Festplatte) aufbewahrt, falls der Server ausfällt. Nach einem Neustart können die Nachrichten verarbeitet werden und es ist keine erneute Übertragung erforderlich (der Absender weiß nicht einmal, dass ein Problem aufgetreten ist). Transaktion bedeutet, dass Sie Nachrichten aus verschiedenen Warteschlangen lesen und Nachrichten auf transaktionale Weise in verschiedene Warteschlangen schreiben können. Dies bedeutet, dass entweder alle Lese- und Schreibvorgänge erfolgreich sind oder (wenn einer oder mehrere fehlschlagen) keine erfolgreich sind. Dies unterscheidet sich nicht wesentlich von der Transaktionsfähigkeit, die durch die Schnittstelle mit Datenbanken bekannt ist, und hat dieselben Vorteile (es vereinfacht die Fehlerbehandlung; ohne Transaktionen müssten Sie sicherstellen, dass jedes einzelne Lesen / Schreiben erfolgreich ist, und wenn eines oder mehrere fehlschlagen, haben Sie dies getan die erfolgreichen Änderungen rückgängig zu machen).
quelle
Lesen Sie vor dem Schreiben Ihrer eigenen Bibliothek den 0MQ-Leitfaden hier: http://zguide.zeromq.org/page:all
Es besteht die Möglichkeit, dass Sie sich entweder für die Installation von RabbitMQ entscheiden oder Ihre Bibliothek auf ZeroMQ aufbauen, da alle harten Teile bereits erledigt sind.
quelle
Wenn Sie etwas Zeit haben, probieren Sie es aus und rollen Sie Ihre eigene Implementierung aus! Die Erkenntnisse dieser Übung werden Sie von der Weisheit überzeugen, eine bereits getestete Bibliothek zu verwenden.
quelle