Sono nelle prime fasi della progettazione di un'applicazione client / server. I client saranno programmi batch che leggono un file di dati di contatto del cliente (nome, indirizzo, indirizzo e-mail, numero di telefono) e passano questi componenti al server, che li aggiungerà (se non sono già presenti) alle tabelle mySQL corrispondenti e ID di ritorno per ogni componente. Al fine di aumentare le prestazioni, il server avrà generato quattro server "manager", ciascuno con il compito di cercare e aggiungere una nuova riga, e passerà i quattro componenti tramite IPC a quei gestori in modo che possano lavorare contemporaneamente.
In altre parole
- Un "server master" che non fa altro che ascoltare una connessione da un processo batch e fork / exec un processo "slave",
- Quattro "gestori" che leggono da un socket, eseguono una ricerca tabella e possibilmente aggiungono una riga e scrivono un ID,
- Un processo "slave" per ogni client connesso, generato dal master quando arriva una nuova connessione da un client, che dialoga con il processo batch: ricezione di un record di contatto del cliente, invio di componenti a ciascuno dei gestori, in attesa di tutti dei gestori per rispondere con gli id che hanno calcolato e inviare un record di riepilogo al client prima di eseguire il loopback per ricevere il record successivo.
(L'elaborazione è un po 'più complicata di quanto ho descritto- ci sono in realtà otto gestori, ei risultati dei primi quattro devono essere completamente raccolti prima di invocare i tre manager successivi, che a turno devono essere tutti completi prima di chiamare il manager finale, ma si tratta solo di un processo semplice con diverse fasi sequenziali, ognuna delle quali comporta l'esecuzione di lavori concomitanti e l'attesa che tutto finisca.)
Nel discutere questo con un altro membro del team, mi è stato chiesto "perché hanno il server master e i server slave? perché non fare in modo che il client effettui connessioni separate direttamente con quei processi di gestione?"
Non ho una buona obiezione: ogni client potrebbe essenzialmente implementare direttamente la logica slave e creare otto connessioni simultanee ai server di gestione. Ho la sensazione che non sia l'approccio migliore - che in qualche modo potrebbe essere importante avere un controllo centralizzato per gestire con sicurezza errori ed errori o accumulare statistiche sul server nel suo complesso. Ma non ho alcuna esperienza precedente nella realizzazione di un'applicazione client / server completa e produttiva.
Sarei molto interessato a conoscere le opinioni di coloro che hanno esperienza precedente nella creazione di app di questo tipo.
UPDATE 1: Un vantaggio: se il processo del client si interrompe improvvisamente o viene annullato, il processo slave rimane attivo, potrebbe rilevare che il client è andato via, avrebbe una conoscenza completa dello stato del lavoro e potrebbe garantire l'integrità dei dati completando (o escludendo) l'attuale unità di lavoro. Potrebbe portare a una fine ordinata a un fallimento.