Frage

im Gegensatz zu Ihrer eigenen Bibliothek zu schreiben.

Wir arbeiten hier an einem Projekt, das ein selbst Dividieren Server-Pool sein wird, wenn ein Abschnitt zu schwer wächst, würde der Manager es teilen und es auf einem anderen Rechner als separaten Prozess gestellt. Es wäre auch alle angeschlossenen Kunden aufmerksam diese auf den neuen Server zu verbinden, beeinflusst.

Ich bin gespannt, über die Verwendung von ZeroMQ für inter-Server und Interprozesskommunikation. Mein Partner würde es vorziehen, seine eigene Rolle. Ich bin für die Gemeinschaft suchen, um diese Frage zu beantworten.

Ich bin ein ziemlich unerfahrener Programmierer selbst und gerade über Messaging-Warteschlangen gelernt. Wie ich gegoogelt und gelesen habe, scheint es, jeder nutzt Messaging-Warteschlangen für alle möglichen Dinge, aber warum? Was macht sie besser als Ihre eigene Bibliothek zu schreiben? Warum sind sie so häufig und warum gibt es so viele?

War es hilfreich?

Lösung

  

, was sie besser machen als Ihre eigene Bibliothek zu schreiben?

Wenn die erste Version der App Ausrollen, wahrscheinlich nichts: Ihre Bedürfnisse klar definiert sind, und Sie werden ein Messaging-System entwickeln, die Ihre Bedürfnisse passen. Kleines Feature-Liste, kleine Quellcode etc

Diese Werkzeuge sind sehr nützlich nach der ersten Veröffentlichung, wenn Sie tatsächlich Ihre Anwendung erweitern und weitere Funktionen hinzufügen. Lassen Sie mich Ihnen ein paar Anwendungsfälle:

  • Ihre App wird zu einem Big-Endian-Maschine sprechen müssen (Sparc / powerpc) von einem Little-Endian-Maschine (x86, Intel / AMD). Ihr Messaging-System hatte einige Endian Annahme: gehen und beheben
  • Sie Ihre Anwendung entwickelt, damit es nicht ein binäres Protokoll / Messaging-System ist und jetzt ist es sehr langsam, da Sie die meiste Zeit es Parsen verbringen (die Anzahl der Nachrichten erhöht und Parsing wurde ein Engpass): anpassen, so dass es Transport binär / Fest Codierung
  • am Anfang Sie 3 Maschine in einem lan hatte, bekommt keine merkliche Verzögerungen alles zu jeder Maschine. Ihr Client / Chef / spitzer haarigen-Teufel-Chef auftaucht und Ihnen sagen, dass Sie die App auf WAN installieren Sie es nicht schaffen kann - und dann starten Sie Verbindungsfehler mit, schlechte Latenz usw. Sie Nachricht speichern müssen und versuchen Sie es erneut zu senden sie später: zurück auf den Code und stecken dieses Zeug in (und genießen)

  • Nachrichten müssen gesendet Antworten haben, aber nicht alle von ihnen: Sie einige Parameter in und erwarten, senden Sie eine Tabelle als Ergebnis, anstatt nur das Senden und erkennt, gehen Sie zurück zu Code und stecken dieses Zeug in (und genießen ).

  • einige Meldungen sind kritisch und dort Empfang / Bedürfnisse ordnungsgemäße Sicherung / Persistenz / Senden. Warum fragst du ? Prüfzwecken

Und viele andere Anwendungsfälle, die ich vergessen ...

Sie können es selbst implementieren, aber verbringen nicht viel Zeit zu tun: Sie werden wahrscheinlich ersetzen später sowieso

.

Andere Tipps

Das ist sehr viel wie zu fragen: warum eine Datenbank verwenden, wenn Sie Ihre eigenen schreiben

Die Antwort ist, dass ein Werkzeug, das für eine Weile gewesen und ist in vielen verschiedenen Anwendungsfällen verstanden, zahlt sich immer mehr im Laufe der Zeit und wie Ihre Anforderungen zu entwickeln. Dies gilt insbesondere, wenn mehr als ein Entwickler in einem Projekt beteiligt ist. Wollen Sie Support-Mitarbeiter für eine Warteschlange-System werden, wenn Sie ein neues Projekt ändern? mit einem Werkzeug verhindert, dass nicht passiert. Es wird Problem jemand anderes.

Typischer Fall: Beharrlichkeit. Schreiben eines Werkzeugs zu speichern, eine Nachricht auf dem Datenträger einfach. Schreibe eine persistor, die Skalen und führt auch und stabil, in vielen verschiedenen Anwendungsfällen und ist überschaubar, und billig zu unterstützen, ist hart. Wenn Sie wollen, dass jemand sehen, darüber auf, wie stark es dann aussehen: http://www.lshift.net/blog/2009/12/07/rabbitmq-at-the-skills-matter-functional-programming-exchange

Wie auch immer, ich hoffe, das hilft. Mit allen Mitteln Ihr eigenes Werkzeug schreiben. Viele viele Menschen haben so getan. Was auch immer Ihr Problem löst, ist gut.

Ich betrachte mit ZeroMQ mich -. Damit ich auf diese Frage gestolpert

Lassen Sie sich für den Moment annehmen, dass Sie die Fähigkeit haben, ein Message Queuing-System zu implementieren, das alle Ihre Anforderungen erfüllt. Warum würden Sie ZeroMQ (oder ein andere Dritte Bibliothek) über den Roll-your-own Ansatz verfolgen? Einfach -. Kosten

Lassen Sie uns für einen Moment annehmen, dass ZeroMQ bereits alle Ihre Anforderungen erfüllt. Alles, was es in Ihrem Build integriert getan werden muss, einige doco lesen und dann starten Sie es. Das hat weit weniger Aufwand zu sein, als Ihre eigenen Rollen. Darüber hinaus hat der Wartungsaufwand auf ein anderes Unternehmen verlagert. Da ZeroMQ frei ist, dann ist es genau wie Sie Ihr Entwicklungsteam gewachsen sind enthalten (ein Teil) das ZeroMQ Team.

Wenn Sie ein Software Development Geschäft laufen, dann denke ich, dass Sie die Kosten / Risiko der Verwendung von Drittanbietern Bibliotheken Ihren eigenen gegen Wegrollen ausgleichen würden, und in diesem Fall mit ZeroMQ Händen nach unten gewinnen würde.

Vielleicht haben Sie (oder besser gesagt, Ihr Partner) leiden, wie so viele Entwickler zu tun, von der "Not Invented hier " Syndrom? Wenn ja, stellen Sie Ihre Haltung und neu bewerten die Verwendung von ZeroMQ. Ich persönlich ziehe viel die Vorteile der Stolz Anderswo Haltung gefunden. Ich hoffe, ich kann stolz auf der Suche nach ZeroMQ ... der Zeit wird.

EDIT: Ich kam in diesem Video von den ZeroMQ Entwickler, die über warum Sie sollten ZeroMQ verwenden.

  

, was sie besser machen als Ihre eigene Bibliothek zu schreiben?

Message Queuing-Systeme sind Transaktions-, die vom Konzept her einfach ist, als Client zu verwenden, aber hart Recht als Implementierer zu bekommen, besonders wenn man bedenkt persistent Warteschlangen. Man könnte denken, Sie mit dem Schreiben eine schnelle Messaging-Bibliothek weg erhalten können, aber ohne Transaktionen und Ausdauer, würden Sie nicht den vollen Nutzen eines Messaging-System haben.

Persistence in diesem Zusammenhang bedeutet, dass die Messaging-Middleware nicht behandelte Nachrichten im permanenten Speicher (auf dem Datenträger) für den Fall, hält der Server ausfällt; nach einem Neustart können die Nachrichten behandelt werden und keine Neuübertragung erforderlich ist (der Absender nicht einmal wissen, dass es ein Problem war). Transactional bedeutet, dass Sie Nachrichten aus verschiedenen Warteschlangen und schreiben Nachrichten an verschiedene Warteschlangen in einer transaktionalen Weise lesen können, was bedeutet, dass entweder alle Lese- und Schreibvorgänge erfolgreich sind oder (wenn ein oder mehrere gescheitert) keine gelingt. Das ist nicht wirklich viel anders als die Transaktionalität von einer Schnittstelle mit Datenbanken bekannt und hat die gleichen Vorteile (es vereinfacht die Handhabung Fehler, ohne Transaktionen würden Sie versichern müssen, dass jeder einzelner Lese- / Schreib erfolgreich ist, und wenn ein oder mehr ausfallen, haben Sie diese Änderungen rückgängig zu machen, die nicht gelungen).

Bevor Sie Ihre eigene Bibliothek zu schreiben, lesen Sie hier die 0MQ Guide: http://zguide.zeromq.org/ Seite: alle

Die Chancen stehen gut, dass Sie entweder entscheiden RabbitMQ zu installieren, sonst werden Sie Ihre Bibliothek auf der ZeroMQ machen, da sie bereits alle harten Teile getan haben.

Wenn Sie ein wenig Zeit, es zu versuchen haben und ausrollen Ihre eigene Implementierung! Die Erkenntnisse dieser Übung werden Sie über die Weisheit überzeugen von einer bereits getesteten Bibliothek.

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