Server web pesante in Cpu

6

Durante la lettura di web server, framework, ecc. la maggior parte delle volte noto che l'obiettivo è avere una tecnologia che abbia le seguenti caratteristiche:

  • In grado di gestire quante più connessioni possibile.
  • Adatta un modello I / O (connessioni a DB e altri servizi Web).

Queste funzionalità si adattano al modello web attuale ma sono interessato a sapere quali tecnologie si adattano a un caso utente con CPU pesante.

Ad esempio, Node.js è una tecnologia che brilla davvero quando devi scrivere un'applicazione che utilizza molti I / O. D'altra parte, a causa della natura di Node.js di essere eventualizzati, non è adatto per essere utilizzato in casi di utenti pesanti per la CPU. (Codifica video, apprendimento automatico, grafica)

Ho anche dato un'occhiata ai framework web Haskell come Snap e Warp e ai benchmark sono davvero veloci.

Sono i framework web Haskell adatti al problema della CPU? Quali altre lingue / tecnologie sono candidate?

    
posta Oni 30.07.2012 - 22:40
fonte

5 risposte

9

Ciò che stai chiedendo è tipico di un'architettura a più livelli.

Vuoi un livello web progettato per l'IO, è il suo compito principale. Quando è necessario eseguire alcune elaborazioni pesanti, è necessario eseguire il farming su un altro livello progettato per il crunch della CPU.

Molti siti Web fanno questo (almeno i più grandi), hanno una fattoria di server web che diffondono il carico di I / O, ma questi sono lì solo per il lavoro di presentazione - la restituzione di file statici e l'assunzione di richieste. Quando arriva una richiesta di lavoro, il server web passa la richiesta a un livello di applicazione, dove i server di app scricchiolano i dati e restituiscono i risultati al server web per tornare all'utente.

I vantaggi sono nella scalabilità: puoi aggiungere un nuovo server di app quando vuoi, se hai più cpu crunching da fare, allo stesso modo, se la quantità di richieste di I / O diventa eccessiva, puoi aggiungere un nuovo server web.

Quello che non devi fare è pensare a un web server come a un server delle applicazioni. Anche se può svolgere quel ruolo in una piccola applicazione, è lì solo per comodità.

Quindi node.js può eseguire l'attività desiderata, è sufficiente inviare qualsiasi lavoro pesante sulla CPU da qualche parte. È facile inviare richieste (con un metodo asincrono!) A un altro servizio o processo. Dato che il nodo gira su un singolo thread, significa che ne sono disponibili molti altri sulla stessa scatola, supponendo che non li abbia riempiti con DB work ( che è un task pesante per la CPU stesso ).

    
risposta data 31.07.2012 - 15:32
fonte
5

Avrai bisogno di una tecnologia che ti permetta di aggiungere tutta la CPU di cui hai bisogno.

Poiché molto probabilmente diventerai troppo grande per un singolo server, per Java hai bisogno di un application server che sia costruito su più server. Un esempio è Glassfish 3.1 che può essere raggruppato per fare esattamente questo.

Vedi link per ulteriori informazioni.

    
risposta data 31.07.2012 - 00:41
fonte
0

Potresti voler controllare Erlang Ha un modello di concorrenza molto semplice e supporta facilmente carichi molto pesanti . Inoltre è progettato in modo da poter costruire sistemi molto affidabili con relativa facilità.

Altri vantaggi di Erlang includono la possibilità di aggiornare il codice in esecuzione senza portare un sistema offline. Pertanto, se si dispone di un server che trasmette dati agli utenti, non è necessario disconnettere gli utenti per aggiornare il server.

    
risposta data 31.07.2012 - 05:37
fonte
0

Qualsiasi server Web asincrono (Node.js è uno di questi) può essere facilmente adattato per il sollevamento della CPU. La domanda è che l'attività intensiva della CPU dovrebbe essere generata indipendentemente dal server principale (thread separato, processo separato, pool di thread o processi o servizio migliore ancora completamente disaccoppiato). I server asincroni possono facilmente eseguire il polling di numerose attività in esecuzione, senza creare un sovraccarico.

D'altra parte, quale sarebbe una pessima idea, è eseguire compiti pesanti della CPU all'interno del server web stesso. Una pratica non sconosciuta nelle configurazioni di Apache + PHP, ma è ben lungi dall'essere una buona pratica. Non è né efficiente né scalabile.

    
risposta data 31.07.2012 - 15:45
fonte
0

Non dimenticare gli enormi miglioramenti (due ordini di grandezza) che puoi ottenere dall'accelerazione GPU per alcuni dei compiti che hai menzionato. Se ciò non è possibile, i miglioramenti nell'ordine di grandezza sono ancora possibili con il parallelismo e la vettorizzazione.

    
risposta data 12.12.2013 - 20:16
fonte

Leggi altre domande sui tag