Ich habe eine Anwendung, die in regelmäßigen Abständen eine Momentaufnahme seines aktuellen Zustandes senden muss, die derzeit von etwa 500.000 64-Byte-Nachrichten dargestellt werden. Ich habe Schwierigkeiten, diese vielen Nachrichten schnell und zuverlässig mit ZMQ zu senden und zu empfangen.Welche Einstellungen sind für ZMQ beim Senden von 500K 64-Byte-Nachrichten geeignet?
Ich habe PUB/SUB über Tcp verwendet, um dies zu tun, aber ich bin weder mit dem Muster noch dem Protokoll verbunden, solange es die Arbeit erledigt. In meinen Experimenten habe ich mich darauf konzentriert, mit der Sende- und Empfangs-Hochwassermarke herumzuspielen, Puffereinstellungen zu senden und zu empfangen und der Sendeschleife etwas Schlaf hinzuzufügen, um zu versuchen, sie ein wenig zu verlangsamen. Mit Einstellungen, die mir ziemlich großzügig erschienen (500K HWM, 10MB Puffer) und die nur eine Loopback-Verbindung verwenden, werden die Nachrichten nicht immer konsistent empfangen.
Ich interessiere mich für die entsprechenden Einstellungen für diese oder andere Tuning-Parameter, und im weiteren Sinne in Bezug auf die Auswirkungen verschiedener Einstellungen.
Einige weitere Details, die eine angemessene Antwort geben kann helfen:
Die Verteilung ist eine von vielen. Die erwartete Anzahl der Empfänger liegt bei 20.
Jede Nachricht stellt eine Reihe von Informationen über ein anderes Finanzinstrument dar, die alle gleichzeitig beobachtet werden. Meiner Meinung nach können Argumente dafür angeführt werden, beides zu einer einzigen großen Nachricht zusammenzufassen (die Menge aller Nachrichten besteht logischerweise aus einem kompletten Schnappschuss) und getrennt zu halten (Kunden können möglicherweise nur an einigen Instrumenten interessiert sein, und ich denke, das würde helfen) filtere sie leichter heraus).
Die beabsichtigte Häufigkeit von Nachrichten ist grundsätzlich nicht schneller als alle 20 Millisekunden und nicht langsamer als 5 Sekunden. Wo ich tatsächlich lande, hängt wahrscheinlich von Leistungsaspekten ab (dh wie schnell mein Server die Nachrichten tatsächlich pumpen kann und welche Art von Datenrate für die Kunden überwältigend sein würde).
Was ist Ihre Verteilung? 1 zu 1, eins zu vielen, eins von vielen? Wie oft senden Sie den Status aus? Veröffentlichen Sie wirklich einen 32 MB-Zustand? Warum senden Sie es als 500K einzelne Nachrichten? Warum nicht eine Nachricht? Was ist die Begründung? Bitte erläutern Sie Ihren Anwendungsfall genauer, wenn Sie nützliche Antworten wünschen. –