Hai bisogno di suggerimenti sul design per creare un sistema di giudizio online

1

Attualmente sto lavorando a un progetto che è un sistema di valutazione online come codeforces . In questo sistema, l'utente può inviare il codice e il sistema compilerà, eseguirà e genererà l'output su un set di input specifico e abbinerà l'output con il risultato del sistema, quindi fornirà un verdetto.

C'è una parte in due di questo sistema. Il front-end è in PHP e il back-end è in Java. Sono responsabile per la parte Java. Il mio primo approccio è stato creare un'app web. PHP invia una richiesta http a Java che il file deve compilare ed eseguire. Ma dopo un po 'di tempo mi sono reso conto che se eseguo la compilazione e l'esecuzione ogni volta che arriva la richiesta, il sistema diventa troppo lento. Se arrivano 300 richieste alla volta, il sistema crollerà. Il mio pensiero era di 300 richieste gestite da 300 thread. Ma ogni thread fa un lavoro pesante come compilare, eseguire e controllare l'output.

Poi stavo scrivendo un programma java standalone che ha uno scheduler. Questo programma di pianificazione controlla il database, ottiene i nuovi dati e li compila, li esegue e quindi aggiorna e database. Questo rende il sistema asincrono.

Ma il problema è nel secondo approccio, PHP e Java hanno entrambi bisogno di mantenere la stessa classe di entità (sto usando Hibernate). Ciò rende il sistema altamente accoppiato. Ogni volta che PHP apporta un cambiamento, devo anche cambiare la mia lezione.

Quale sarebbe il design per questo tipo di applicazione.

Grazie. :)

    
posta Muztaba Hasanat 20.08.2016 - 11:55
fonte

2 risposte

2

Quando si riceve la richiesta http, è possibile generare un ID per l'attività e inviarlo al client.

Quindi, allo stesso tempo, invia un'attività a un ThreadPoolExecutor . Questa attività può eseguire la compilazione e al termine salvare i risultati rispetto all'ID generato. Il pool di thread può eseguire le attività in background e arrestare troppe funzioni contemporaneamente.

Il cliente può richiedere i risultati o controllarne lo stato inviando l'id in un'altra richiesta.

    
risposta data 21.08.2016 - 16:13
fonte
-1

Perché non lasciare che php invii una richiesta e mantieni il modello multi-thread mentre ogni thread crea un lavoro batch per l'app di backend (Java) per l'esecuzione asincrona. Quindi, hai il meglio di entrambi i mondi, disaccoppiamento e risposta rapida. Immagino che Jenkins usi un modello simile controllalo per più suggerimenti

    
risposta data 20.08.2016 - 22:26
fonte

Leggi altre domande sui tag