Attualmente sto sviluppando un web crawler. La prima versione è stata sviluppata in Node.js e funziona piuttosto bene.
I problemi che ho riscontrato con Node.js non sono in ordine particolare:
- libreria di analisi di URL lento e stringa di query
- analisi dei pacchetti HTTP lenta a causa del sovraccarico della chiamata di binding C ++
- rallenta la risoluzione DNS a causa della chiamata sincrona a
getaddrinfo
anziché della libreria C-Ares asincrona - mancanza di un buon supporto Unicode in RegExps
Questi sono per la maggior parte dovuti al fatto che è ancora molto giovane e che si tratta di una lingua generica con un piccolo team di sviluppo principale.
La proof-of-concept che ho al momento funziona abbastanza bene grazie alla natura asincrona di Node.js e alcune patch di scimmia che ho dovuto aggiungere.
Ora sto iniziando a pensare a cosa viene dopo la dimostrazione del concetto.
La questione del linguaggio di programmazione è una questione alla quale non ero ancora in grado di rispondere.
Le qualità essenziali che sto cercando:
- I / O e gestione della concorrenza
- capacità di analisi rapida delle stringhe per messaggi HTTP, HTML, JSON ... ecc.
- collegamenti a una sorta di livello di accodamento / persistenza
Ho pensato a C, Erlang, Rust, Go e D.
So che questo non è solitamente il tipo di domande che sono accettate qui su Stack Exchange, ma non sono sicuro di quale altra parte potrei ottenere una risposta.
Aggiornamento: altre informazioni:
- al momento utilizziamo 8 core, 3.2 Ghz.
- il livello di persistenza è garantito dall'esecuzione di un database PostgreSQL
- il punto è quello di eseguire la scansione di tutti i tipi di siti di notizie e blog, nonché i feed RSS
- attualmente inoltriamo il contenuto a una pipeline di elaborazione tramite Apache Kafka