Design di servizi web altamente disponibile?

3

Mi stavo chiedendo se qualche guru del design là fuori potesse aiutarmi a capire come le grandi aziende web progettino i loro servizi per essere altamente disponibili. Lo scenario a cui sto pensando è:

  1. Il client A si connette al servizio A
  2. Il client A invia richieste N
  3. Nella richiesta N + 1, il servizio A esplode
  4. Il Cliente A si riconnette al Servizio B
  5. I servizi di servizio B richiedono N + 1 in poi

L'unico progetto a cui potevo pensare era l'utilizzo di un servizio "metadati" / "discovery" di cui il Cliente potesse essere a conoscenza statica. Questo servizio fornirebbe informazioni sul miglior servizio disponibile, al quale il cliente si collegherebbe e inizierebbe le sue richieste, e ricercherà il servizio "metadati" quando realizzerà che il servizio A è andato giù. Il servizio applicativo ora è altamente disponibile, ma ...

... il problema lampante è che il servizio "metadati" / "discovery" è statico, verrà sottoposto a un carico elevato e non è altamente disponibile, il che significa che sconfigge l'intero scopo. Suppongo che potrei lanciare un sacco di hardware sotto questo servizio, ma questa non è una soluzione molto buona.

Come dovrei andare a progettare un vero servizio web altamente disponibile?

    
posta user109533 22.11.2013 - 19:27
fonte

1 risposta

5

Penso sia importante notare che il client non reagisce veramente alla distruzione del servizio A. Il servizio web stesso deve risolvere questa situazione.

È possibile fornire una serie di bilanciatori di carico ridondanti. Questi forniranno il servizio delle richieste alla loro collezione di computer disponibili.

Nello scenario descritto sopra, il servizio di bilanciamento del carico passerebbe il Cliente A al Servizio A. Una volta che il Servizio A non è disponibile, il servizio di bilanciamento del carico passerà al Cliente A dal Servizio B, e così via.

Naturalmente, anche i bilanciatori del carico possono morire. Ci sono alcune soluzioni di cui sono a conoscenza.

  • Utilizza il DNS round-robin. Questo non è eccezionale in quanto alcuni clienti saranno serviti e altri no.
  • I bilanciatori del carico controllano gli stati degli altri e poi subentrano quando l'altro è scomparso.
  • Utilizza un servizio cloud, come EC2 Elastic Load Balancer.

Utilizziamo AWS, quindi ho imparato molto dalla loro pagina di architettura . È disponibile anche per il pubblico. Ovviamente, se non utilizzi AWS, devi estrapolare le idee.

    
risposta data 22.11.2013 - 20:26
fonte

Leggi altre domande sui tag