Ridimensionamento di un servizio Web riposante ospitato nel server

2

Abbiamo implementato un servizio Web riposante su un server delle applicazioni (Apache). Il volume sta aumentando e vogliamo ridimensionarlo. Distribuiremo altre due istanze di Apache su altre due macchine.

Come posso implementare un livello che invia una richiesta a ciascuno di questi sulla base di una strategia round robin?

Attualmente dico che ho www.mywebservice.com/employees?id=1 e così via.

Ora come faccio a reindirli a istanze diverse? Dove entrerebbe lo strato è confuso perché avrei bisogno di un qualche tipo di facciata.

    
posta Learner_101 14.02.2016 - 06:34
fonte

2 risposte

2

Il modo migliore per scalare i server nella mia esperienza è farlo a livello di rete con un servizio di bilanciamento del carico separato.

Questo si trova di fronte ai server Web e indirizza le richieste in entrata a un particolare server Web e può avere regole abbastanza complesse per farlo.

Ad esempio:

È possibile aggiungere intestazioni di versione alla richiesta e fare in modo che le richieste dirette del caricatore di carico corrispondano alla versione corretta del servizio.

Puoi avere gruppi di server blu / verdi che puoi eliminare senza alcun downtime

È possibile assegnare il carico in base al tempo di risposta di ciascun server

Etc

Il problema con il tentativo di implementare questo nel codice dell'applicazione è che una volta che la richiesta ha raggiunto quel livello, la tua casella sta già lavorando. questo è quello che stai cercando di evitare con il bilanciamento del carico

    
risposta data 14.02.2016 - 10:19
fonte
4

Poiché Ewan ha affermato, avrai bisogno di un sistema di bilanciamento del carico. Alcuni di loro sono noti come "reverse proxy".

Gli esempi includono Pound , HAProxy .

Se i tuoi servizi web sono ospitati su Amazon Web Services, puoi utilizzare il bilanciamento del carico elastico incorporato, che include anche il ridimensionamento automatico e molte altre funzionalità.

Prima di aggiungere altre istanze, devi considerare:

  • qual è il fattore vincolante: CPU, memoria, I / O. Questo è importante nella scelta dei server / istanze giusti
  • dove si trova il vincolo: decodifica SSL / TLS, server Web, script o database
  • se si utilizza un database e il vincolo non si trova nel database, se si utilizzerà un singolo database condiviso i miei molteplici front-end o se sarà necessario disporre di più database (e in tal caso, se si 'sta andando per la replica master-slave, master-master, ecc.).
  • se scrivi e hai più istanze di database, come gestirai quelle scritture
  • allo stesso modo, se archivi file temporanei o usi sessioni con dati memorizzati localmente, come gestirai le richieste all'interno di una singola sessione andando a istanze diverse
  • se potrebbe essere necessario che le sessioni si "attacchino" a un'istanza specifica

Alcuni casi sono molto facili da suddividere in molte istanze. Altri richiedono una pianificazione molto più ampia, una buona conoscenza di come funzionano gli script e un'attenta valutazione delle conseguenze.

Inoltre, in alcuni casi, potrebbe essere più facile, più efficace e più economico, aggiungere cache pertinenti nei punti giusti per cercare di ridimensionare il numero di istanze.

    
risposta data 14.02.2016 - 15:44
fonte

Leggi altre domande sui tag