Suggerimenti per il modello di servizio distribuito

1

Esporremo alcuni servizi web su un server, scritti in C #. Ora dobbiamo distribuire i servizi su più server, quindi la soluzione è distribuita. E ogni richiesta viene inviata a uno dei server per eliminare la situazione single-point-of-failure (SPOF).

All'inizio abbiamo esaminato il Service-broker da Microsoft SQL-server , ma abbiamo lasciato cadere perché è troppo integrato con il server SQL, ciò che è fuori dal nostro business. Ho pensato a una soluzione come Reactor-pattern o forse usando un MessageQueue nella soluzione.

L'obiettivo (e l'esigenza del cliente) è di evitare un SPOF. Quindi l'implementazione di un dispatcher / scheduler / eventhandler richiederà un duplicato di questo.

Qual è il modello / soluzione di uso comune nei sistemi critici, implementato in .NET?

Il server è connesso a un database, che è fuori mano.

    
posta JorgenV 22.02.2016 - 11:28
fonte

2 risposte

0

Porterò la mia risposta rispondendo ad alcuni dei suggerimenti che hai preso in considerazione e quando è opportuno estrarli dalla cintura degli attrezzi.

SQL Server Service Broker ed Enterprise Service Integration (broker)

Questa non è una soluzione per garantire Disponibilità elevata né è una soluzione per SPOF .

Allo stesso modo Enterprise Service Integration come strumento di progettazione del sistema non fornisce garanzie o vantaggi a favore di Attributi di qualità che risolvono ridondanza, disponibilità, scalabilità, prestazioni e affidabilità. Nell'integrazione del servizio Enterprise ci sono due modelli principali, la fonte citata da articolo di Wikipedia sull'integrazione delle applicazioni aziendali :

Mediation (intra-communication) Here, the EAI system acts as the go-between or broker between multiple applications. Whenever an interesting event occurs in an application (for instance, new information is created or a new transaction completed) an integration module in the EAI system is notified. The module then propagates the changes to other relevant applications.

Federation (inter-communication) In this case, the EAI system acts as the overarching facade across multiple applications. All event calls from the 'outside world' to any of the applications are front-ended by the EAI system. The EAI system is configured to expose only the relevant information and interfaces of the underlying applications to the outside world, and performs all interactions with the underlying applications on behalf of the requester.

Un processo broker viene utilizzato nel modello di mediazione per ricevere messaggi da varie applicazioni e quindi facoltativamente eseguire la trasformazione di quel messaggio per uno o più target. Il modello di federazione è simile ma agisce invece come una facciata di servizio per un'applicazione in modo che le applicazioni abbiano un'interfaccia comune e incapsulata che protegge dalle modifiche nell'applicazione di destinazione. Entrambi questi pattern riguardano gli attributi di qualità come Interoperabilità e Riusabilità, ma anche in questo caso non si affrontano gli attributi di qualità comunemente associati a High Availability e SPOF.

Coda messaggi

Per quanto riguarda Message Queue, questo è meno di un pattern in System Design e più di una tecnologia che si userebbe per garantire il 100% di consegna dei messaggi tra le applicazioni su un canale aysnchronous (al contrario dei servizi Web HTTP che sono sincroni, Modello richiesta-risposta).

Load Balancing

Quello che stai cercando è una soluzione che utilizza Load Balancing . Essenzialmente si tratta di un endpoint altamente disponibile per una risorsa di rete, che richiederà richieste, utilizza alcuni algoritmi per determinare l'endpoint o il server da inviare e quindi invia proxy di un certo numero di endpoint per conto del client trasferendo la richiesta a un endpoint appropriato . Questo ha un certo numero di vantaggi. Il primo è che un singolo URI di rete può essere utilizzato da più client dove non è necessario essere a conoscenza di quale server alla fine servirà la loro richiesta. Il secondo è che questo dà un livello di sicurezza al punto in cui i server attuali possono essere rimossi dalla visibilità. In terzo luogo, ciò consente una scalabilità senza soluzione di continuità in cui è possibile aggiungere server aggiuntivi per soddisfare il carico e allo stesso modo i server possono cadere senza che l'applicazione sia disponibile.

Ci sono molti modelli e forme che questo può assumere in termini di tecnologia. Se stai sviluppando un'applicazione per l'hosting interno in azienda, spesso ci sarebbe un dispositivo per data center (ad esempio F5) che può essere configurato per aiutarti a raggiungere questo obiettivo. Se si ospita un'applicazione nel cloud, in Microsoft Azure è incorporato Load Balancing come funzionalità che è possibile utilizzare per distribuire il carico su più VM.

    
risposta data 22.02.2016 - 18:59
fonte
1

Dato che stai usando IIS presumo tu possa usare Web Farm , questo ti dà un maggiore controllo.

link

Se hai bisogno di una soluzione più semplice e vuoi semplicemente evitare SPOF usa Bilanciamento del carico di rete.

Supponiamo di avere 3 server, chiamiamoli SERVER01, SERVER02, SERVER03, si crea un cluster NLB e si aggiungono i 5 server a questo cluster. Il cluster avrà il proprio indirizzo IP o CNAME, ad esempio SERVERNLB.

Quindi quando distribuisci SERVERNLB ai tuoi utenti.

quindi se si vuole consumare questo endpoint del servizio

verrà indirizzato a:

e puoi configurarlo anche per farlo in modalità roundrobin o in base alle risorse.

Se SERVER03 non funziona, verrà disabilitato dal cluster e NLB non inoltrerà alcuna richiesta a tale.

    
risposta data 23.02.2016 - 03:28
fonte