Domanda di progettazione su un server biforcante concorrente

2

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.

    
posta Chap 28.12.2012 - 01:20
fonte

1 risposta

1

In breve, la risposta al tuo collega è "incapsulamento".

Che cosa hai intenzione di fare quando devi avviare un nono allenatore? O più processi slave per cliente? O è necessario regolare la logica di interazione quanto basta per forzare l'aggiornamento e l'invalidazione di tutti i client esistenti? Hai il pieno controllo su tutti i clienti per farlo?

Non sembra che nessuna delle esigenze di elaborazione venga eseguita dai client, quindi non dovrebbero.

E, in teoria, hai il controllo sul master / manager / schiavi, quindi puoi fidarti di quel codice un po 'più di quello che puoi con il client. Anche se potresti scrivere / pubblicare i client che vuoi guardare da un punto di vista della sicurezza. I client sono generalmente meno affidabili dei componenti del server a causa dell'implementazione e dell'essere su sistemi esterni a quelli che controlli. Potrebbe anche essere necessario supportare versioni del client di livello inferiore che possono realmente ostacolare la tua capacità di apportare modifiche se la logica risiede nel client.

Sei sulla strada giusta per un ambiente client / server. Attenersi al design che hai avviato e non fornire accesso inappropriato ai client.

    
risposta data 28.12.2012 - 14:29
fonte

Leggi altre domande sui tag