Domanda

Sto cercando di scalare un server App per elaborare oltre 20.000 richieste al minuto.

Quando stress-test delle richieste, la maggior parte delle richieste maneggia facilmente 20.000 rpm o più.

Ma, le richieste che devono effettuare una richiesta HTTP esterna (ad esempio, il login di Facebook) porta il server fino a un gattonio (3.000 giri / min).

Comprecto concettualmente i limiti del mio ambiente attuale - 3 server bilanciati di carico con 4 lavoratori di unicorno per server possono gestire solo 12 richieste alla volta, anche se tutti sono in attesa di richieste HTTP.

Quali sono le mie opzioni per ridimensionare meglio questo? Mi piacerebbe gestire molte altre connessioni contemporaneamente.

Possibili soluzioni come lo capisco:

    .
  1. Forza bruta: utilizzare più lavoratori Unicorn (cioè, più RAM) e più server.

  2. Spingi tutte le operazioni di blocco in processi di sfondo / operaio per liberare i processi web. I clienti dovranno smettere periodicamente per trovare quando la loro richiesta è stata completata.

  3. Sposta a Puma invece di Unicorn (e probabilmente a Rubinio da MRI), in modo che io possa usare i fili anziché i processi - che possono (??) migliorare l'utilizzo della memoria per connessione e quindi consentire il numero di I lavoratori devono essere aumentati.

  4. Fondamentalmente, quello che sto cercando è: c'è un modo migliore per aumentare il numero di richieste bloccate / in coda un singolo lavoratore in grado di gestire in modo che io possa aumentare il numero di connessioni per server?

    Ad esempio, ho sentito la discussione sull'utilizzo di sottile con eventmachine. Apri questa possibilità di un lavoratore dei binari che può mettere giù la richiesta Web che sta attualmente lavorando (perché quello è in attesa di un server esterno) e quindi raccoglie un'altra richiesta mentre sta aspettando? Se è così, è una viale utile da perseguire per le prestazioni rispetto a Unicorn e Puma? (Dipende fortemente dalle attività di runtime dell'app?)

È stato utile?

Soluzione

Unicorn è un server sincrono multiplous a filettato singolo.Non è una buona corrispondenza per questo tipo di lavorazione.

Sembra che la tua applicazione sia legata I / O.Questo argomenta per un demone orientato all'evento per elaborare le tue richieste.

Si consiglia di provare Eventmachine e della richiesta EM-HTTP e EM-HTTP-Server .

Ciò consentirà di servire sia le richieste in ingresso al server HTTP e le chiamate del servizio HTTP in uscita.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top