Sto rivedendo un sistema che invierà messaggi via http a uno dei numerosi fornitori. L'originale è script perl ed è probabile che anche il re-sviluppo utilizzi perl.Per forchetta o non forchetta?
Nel vecchio sistema, c'erano un numero di script perl tutti in esecuzione contemporaneamente, cinque per ogni fornitore. Quando un messaggio è stato inserito nel database, è stato scelto un numero di thread casuale (1-5) e il fornitore è stato scelto per garantire che nessun messaggio è stato elaborato due volte evitando di dover bloccare la tabella/riga. Inoltre, nel database era presente un campo "Fair Queue Position" per garantire che un invio di messaggi di grandi dimensioni non ritardasse le piccole mandate avvenute mentre veniva inviato il messaggio più grande.
In alcuni momenti ci sarebbero solo un paio di messaggi al minuto, ma in altri momenti ci sarebbe una discarica di potenzialmente centinaia di migliaia di messaggi. Mi sembra uno spreco di risorse avere tutti gli script in esecuzione e controllare i messaggi tutto il tempo, quindi sto cercando di capire se c'è un modo migliore per farlo, o se la vecchia maniera è accettabile.
Il mio pensiero in questo momento si trovano con l'idea di avere uno script che viene eseguito e forchette come molti processi figli quanti sono necessari (fino ad un limite) a seconda di quanto traffico c'è, ma non sono sicuro modo migliore per attuare è tale che ogni messaggio viene elaborato solo una volta, mentre viene mantenuta la giusta coda.
La mia ipotesi migliore ora è che lo script padre aggiorna il DB per indicare quale processo figlio dovrebbe gestirlo, tuttavia sono preoccupato che questo finirà per essere meno efficiente rispetto al metodo originale. Ho poca esperienza nella scrittura del codice di forking (l'ultima volta che l'ho fatto era circa 15 anni fa).
Qualsiasi idea o collegamento alle guide sul modo migliore per elaborare le code di messaggi apprezzate!
Hai guardato Gearman o uno degli altri server di lavoro là fuori? – jshy