È possibile creare istanze duplicate dello stesso programma su macchine diverse in modo asincrono?

1

Va bene così lavoro su un'applicazione server che ha più metodi di comunicazione. Incluso ma non limitato a WCF, TCP e RESTFUL. Tutti condividono le informazioni con i clienti, ma di recente abbiamo riscontrato problemi dovuti a troppi clienti che accedono ai dati. Ciò provoca un ritardo e sebbene conserviamo nella cache il più possibile, vorremmo esaminare un modo per condividere il carico tra due server o forse più. Ancora più importante se troppi client si collegano alla stessa istanza che mette a dura prova alcune delle altre operazioni in esecuzione su di essa, questo causa un problema perché stiamo elaborando dati in tempo reale e le cose devono essere fatte in tempo.

La soluzione migliore che potremmo fare è creare un nuovo programma / servizio che può essere eseguito su un server diverso e consumare i dati dal primo server e quindi i client possono connettersi al nuovo IP di programma / servizio e ottenere i dati da Là. Anche se ci sarà qualche ritardo, ma in altri casi i dati dovranno essere condivisi in modo asincrono come i dati in tempo reale.

Mi chiedevo se esistesse un modo per eseguire la stessa istanza di un programma su più client? Non mi riferisco all'esecuzione dello stesso programma in 2 luoghi diversi, questo causerebbe problemi con i nostri dati, perché usiamo numeri casuali ecc. Durante la generazione e l'elaborazione dei dati. Quindi, se dovessimo eseguire 2 istanze dello stesso programma, ognuna genererebbe dati diversi. È forse possibile farlo correndo come una macchina virtuale? O c'è qualche libreria o funzionalità .NET che può essere utilizzata per farlo in modo più efficiente?

NOTA: come ho detto che l'istanza deve essere la stessa, 2 diverse istanze genererebbero dati diversi mentre i client hanno bisogno di ottenere gli stessi dati. E anche se al momento non utilizziamo SQL per replicare il DB, ci stiamo allontanando da questo e creando il nostro archivio dati basato su file poiché i nostri dati hanno una durata di vita molto limitata e i dati stessi sono molto limitati.

Qualsiasi suggerimento sarà utile su come procedere

Grazie in anticipo

    
posta Dave 17.08.2016 - 08:07
fonte

1 risposta

1

No. hai le seguenti alternative

1: Rimuovi il numero casuale e rifatta il tuo programma in modo da poter eseguire più istanze contemporaneamente senza il problema dei dati che descrivi. Puoi quindi averne quante ne vuoi in esecuzione dietro un gestore di carico della rete, o prelevare da una coda (consigliato)

2: aggiungi un terzo servizio condiviso per generare i numeri casuali. Cambia il tuo programma per connetterti a questo servizio quando ha bisogno di un numero. In questo modo, quando due istanze sono in esecuzione contemporaneamente, consente loro di utilizzare lo stesso numero richiesto. Questo terzo servizio costituirà un collo di bottiglia, ma si spera che la generazione del numero sia abbastanza semplice da non causare ritardi

3: Simile a 2 ma invece di un terzo servizio consente alle istanze di comunicare tra loro, sincronizzando il numero casuale. Ciò può essere complicato in quanto i problemi di rete o di configurazione possono portare a un'istanza che pensa di essere l'unica.

La soluzione più semplice / più veloce, dato che hai già un db, dovrebbe usarlo come terzo livello di servizio / comunicazione.

Quando una istanza ha bisogno di un numero casuale, fallo controllare tblRandomNumber per vedere se ce n'è una già in uso. Se non ne crei uno e aggiorni la tabella con quei dati.

In realtà questo è un po 'hacky e dovresti refactoring come descritto nella soluzione 1

    
risposta data 17.08.2016 - 10:24
fonte

Leggi altre domande sui tag