Possiedo un'applicazione che necessita periodicamente di inviare un'istantanea del suo stato corrente, che attualmente verrebbe rappresentata da circa 500.000 messaggi a 64 byte. Ho avuto difficoltà ad ottenere questo numero di messaggi inviati e ricevuti in modo rapido e affidabile utilizzando ZMQ.Quali sono le impostazioni appropriate per ZMQ quando si inviano messaggi 500K a 64 byte?
Ho utilizzato PUB/SUB su TCP per farlo al momento, ma non sono compatibile con il pattern o il protocollo fintanto che il lavoro verrà completato. Nei miei esperimenti mi sono concentrato a giocare con l'invio e ricevere l'high water mark, inviare e ricevere le impostazioni del buffer e aggiungere alcuni sleep al ciclo di invio per cercare di rallentarlo un po '. Con impostazioni che mi sembravano abbastanza generose (500K HWM, 10 MB di buffer) e che usavano solo una connessione di loopback, i messaggi non vengono ancora tutti ricevuti in modo consistente.
Sono interessato a quali sono le impostazioni appropriate per questi o altri parametri di ottimizzazione, e più in generale su come ragionare sull'effetto che avranno le varie impostazioni.
Alcuni ulteriori dettagli che possono contribuire a fornire una risposta adeguata:
La distribuzione è uno a molti. Il numero previsto di destinatari è di circa 20.
Ogni messaggio rappresenta un insieme di informazioni su un diverso strumento finanziario, tutte osservate contemporaneamente. Nella mia mente si possono fare discussioni sia per combinarli in un unico grande messaggio (l'insieme di tutti i messaggi crea logicamente un'istantanea completa) sia per tenerli separati (i clienti potrebbero essere potenzialmente interessati solo ad alcuni strumenti, e penso che ciò aiuterebbe filtrarli più facilmente).
La frequenza prevista dei messaggi è fondamentalmente non più veloce di 20 millisecondi e non più lenta di 5 secondi. Il punto in cui atterrerò sarà probabilmente influenzato da considerazioni sulle prestazioni (ovvero, quanto velocemente il mio server può effettivamente pompare i messaggi e quale tipo di velocità dei dati si rivelerebbe travolgente per i client).
Qual è la tua distribuzione? 1 a 1, uno a molti, uno dei tanti? Quanto spesso stai inviando lo stato? State davvero pubblicando uno stato di 32 MB? Perché inviarlo come 500K singoli messaggi? Perché non un messaggio? Qual è il ragionamento? Si prega di spiegare il caso d'uso in modo più dettagliato, se si desidera risposte utili. –