2014-09-23 14 views
5

Ho costruito un sistema di quiz utilizzando Shiny Server su Amazon Web Services. Il sistema funziona in modo affidabile quando l'ho provato su uno o due dispositivi a casa. Tuttavia, quando l'ho usato in classe con più di 10 studenti, il sistema si è rotto. Le domande e i widget sono stati caricati correttamente, ma quando gli studenti hanno provato a inviare le loro risposte (dopo 30 - 40 minuti a guardarle) i dati non sono stati gestiti correttamente (i risultati sono salvati in un file CSV, quindi ho potuto vederlo).Applicazione lucida instabile a molte richieste simultanee

Capisco che ci possono essere molte cause per questo, ma mi piacerebbe sapere se uno potrebbe essere che il server Shiny non è stato progettato per gestire molte richieste simultanee. Ciò significherebbe che posso semplicemente dimenticare di usare Shiny per i miei scopi e guardare altrove. Per coloro che sono interessati al sistema, ecco il codice:

https://github.com/witusj/CFA-2/tree/master/WK4

Molte grazie!

risposta

3

Cosa ha detto @FvD. Inoltre, tieni presente che c'è shinyapps.io se vuoi che qualcun altro ospiti la tua applicazione in modo scalabile, oppure Shiny Server Pro se vuoi eseguire il backup di un'applicazione Shiny con più processi R.

Lo stesso server Shiny può certamente gestire molte richieste (abbiamo visto una singola istanza di Shiny Server gestire con grazia fino a un migliaio di utenti simultanei) e aveva molto spazio per altro, ma come descritto da @FvD, tutto si riduce a come scala l'applicazione R.

Un avvertimento qui: c'è un po 'di complessità a cui pensare in un'applicazione come la vostra. Se si scrivono tutti i dati in un singolo file .csv, non è possibile eseguire contemporaneamente più istanze dell'applicazione (i processi dovrebbero sovrascrivere il file dell'altro). Invece, potresti prendere in considerazione la possibilità di scrivere i risultati in una serie di file CSV distinti che possono essere aggregati insieme in un secondo momento, oppure potresti usare qualcosa di simile a un database relazionale per farlo davvero bene. Questo problema è descritto in maggior dettaglio here.

3

Dipende dalla complessità della tua app e del server su cui lo stai ospitando. C'è una spiegazione di uno dei suoi sviluppatori here, anche se non ci sono linee guida chiare.

Poiché è possibile testare gli studenti, è possibile ottenere una stima del numero di utenti che l'applicazione sarà in grado di gestire correttamente e utilizzare questo numero per impostare un limite al numero di persone che possono partecipare . Se guardi allo the manual troverai il "Simple Scheduler" per farlo. Per utilizzare l'esempio di manuale, se si desidera limitare il numero di studenti collegati a 5, si dovrebbe aggiungere simple_scheduler a voi configurazione:

location/{ 
    # Define the scheduler to use for this location 
    simple_scheduler 5; 
    ... 
} 

Dal momento che si dispone di più di 5 studenti, impostare più copie del applicazione in un numero di posizioni diverse. È possibile estendere questo utilizzando load balancing idea of Huidong Tang o implementation of that idea by sjewo.

Problemi correlati