2009-08-10 2 views
20

Perché non ci sono framework/progetti di calcolo distribuito Javascript? L'idea sembra assolutamente impressionante perché:Javascript Distributed Computing

  • Il Cliente è il Browser
  • iterazione può essere fatto con AJAX
  • Webmaster potrebbero aiutare i progetti collegando il rispettivo Javascript
  • milioni o addirittura miliardi di utenti aiuterebbe i progetti DC senza nemmeno notare

Si prega di condividere le vostre opinioni su questo argomento.

EDIT: Inoltre, che tipo di problemi pensate sarebbe adatto per JSDC?

GIMPS per esempio sarebbe impossibile da attuare.

+0

C'è un progetto su questo argomento https://zlelik.blogspot.nl/2016/11/unified-field-theory-with-javascript-distributed-computing-or-gravity-electromagnetism-relation.html – Zlelik

risposta

-1

Penso che il problema n. 1 sia l'inefficienza di javascript nell'elaborazione. Non ne vale la pena, perché un'applicazione in puro c/C++ sarebbe 100 volte più veloce.

+1

Solo 100 ? Probabilmente molto di più. Il che significa che ottenere 10.000 persone per installare un client di calcolo distribuito basato su C++ produrrebbe * almeno * la stessa quantità di lavoro necessaria per far partecipare * milioni * a persone con JS. –

+0

C++ è buono per la sua velocità, e JS è buono perché può essere usato mentre si naviga sul web senza che l'utente se ne accorga ... Quindi la soluzione perfetta è usare Javascript per un download drive-by di un'applicazione C++! –

+0

Ma probabilmente tutti parteciperebbero a un sito Web o a un altro, a seconda del sito Web il numero di clienti JS potrebbe facilmente raggiungere * miliardi *, non milioni. –

5

C'è qualcosa da dire per "diritti utente" qui. Sembra che tu stia descrivendo una situazione in cui il webmaster di Foo.com include lo script per, ad esempio, Folding @ Home sul loro sito. Di conseguenza, tutti i visitatori di Foo.com hanno una parte della loro CPU "donata" a Folding @ Home, finché non si allontanano da Foo.com. Senza una sorta di disclaimer o opt-in, considererei una forma di malware ed eviterò di visitare qualsiasi sito che lo faccia.

Ciò non vuol dire che non è possibile creare un sistema che richiede conferma o autorizzazione, ma esiste un potenziale definito di abuso.

+0

+1 è assolutamente d'accordo – allergic

+4

+1, ma è già fatto da tutti i banner pubblicitari nel browser :) –

6

Penso che il sarà presto utilizzato per creare framework di calcolo distribuito, ci sono alcuni early attempts a questo concetto. L'esecuzione del codice non bloccante avrebbe potuto essere eseguita prima di utilizzare setTimeout, ma aveva un senso in quanto la maggior parte dei produttori di browser si concentrava sull'ottimizzazione dei loro motori JS solo di recente. Ora abbiamo un'esecuzione del codice più veloce e nuove funzionalità, quindi eseguire inconsapevolmente alcune attività in background mentre navighiamo sul web è probabilmente solo una questione di mesi;)

+0

JavaScript è basato sugli eventi, non è già non bloccante per impostazione predefinita? – lastmjs

4

Ho riflettuto su questo personalmente nel contesto della raccomandazione dell'articolo.

In primo luogo, non v'è alcun problema con la velocità! JIT compilato javascript può essere veloce quanto C non ottimizzato, specialmente per il codice numerico.

Il problema più grande è che l'esecuzione di javascript in background rallenterà il browser e quindi gli utenti potrebbero non apprezzare il tuo sito Web perché funziona lentamente.

C'è ovviamente un problema di sicurezza, come è possibile verificare i risultati?

E la privacy, è possibile garantire che i dati sensibili non siano compromessi?

Per di più, è una cosa piuttosto difficile da fare. Il numero di visite che ricevi può giustificare lo sforzo che dovrai mettere? Sarebbe meglio se si potesse eseguire il codice in modo trasparente sul server o sul lato client. Compilare altre lingue su javascript può aiutare qui.

In breve, la ragione per cui non è diffusa è perché il tempo degli sviluppatori è più prezioso del tempo del server. Il rischio di perdere i dati degli utenti e l'inconveniente per gli utenti sono superiori ai potenziali guadagni.

1

So di pluraprocessing.com fare cose simili, non so se esattamente javascript, ma eseguono Java tramite browser e funzionano totalmente in memoria con una sicurezza rigorosa.

Hanno una griglia di 50.000 computer su cui hanno eseguito correttamente le applicazioni, anche come il web-crawling (80legs).

1

Penso che possiamo verificare i risultati su qualche tipo di problema.

Diciamo che abbiamo n numero di articoli e abbiamo bisogno di ordinarlo. Daremo a worker-1, worker-1 ci darà il risultato. Possiamo verificarlo O (n) tempo. Si prega di considerare che ci vuole almeno O (n * log (n)) tempo per produrre il risultato. Inoltre dovremmo considerare quanto sono grandi gli articoli? (preoccupazione sulla velocità della rete)

Un altro esempio, f (x) = 12345 e la funzione è data. Scopo è trovare il valore di x. Possiamo testarlo sostituendo x con il risultato di qualche lavoratore. Penso che alcuni problemi che non sono verificabili siano difficili da dare a qualcuno.

1

L'intera idea di Javascript Distributed Computing ha un numero di svantaggi:

  • singolo punto di errore - non c'è diretta modo per comunicare tra i nodi
  • naturale fallisce di nodi - ogni nodo funziona fino a quando il browser
  • non garantisce che il messaggio inviato verrà mai ricevuto - secondo a naturali non riesce di nodi
  • alcuna garanzia che il messaggio ricevuto stato mai inviato - perché alcuni hacker può interporre
  • carico fastidioso sul lato client
  • problemi etici

mentre c'è solo un vantaggio (ma molto allettante):

  • facile e gratuito accesso alle Milioni di nodi - quasi ogni dispositivo ha JS browser che supporti al giorno d'oggi

Tuttavia, il problema più grande è corelation tra scalabilità e fastidio.Supponiamo che offra un servizio Web interessante e che esegua l'elaborazione sul lato client. Più persone usi per l'informatica, più persone sono infastidite. Più persone sono infastidite, meno persone usano il tuo servizio. Bene, puoi limitare il fastidio (informatica), la scalabilità o provare qualcosa.

Considerare Google ad esempio. Se Google eseguirà calcoli sul lato client, alcune persone inizieranno a utilizzare bing. Quanti ? Dipende dal livello di fastidio.

L'unica speranza per Javascript Distributed Computing può essere servizi multimediali. Finché consumano molta CPU, nessuno noterà alcun carico aggiuntivo.

0

Ho trovato una domanda simile a questo un po 'di tempo fa, quindi ho creato una cosa che fa questo. Usa i web worker e gli script di fetch dinamicamente (ma non Eval!). Gli operatori Web eseguono la sandbox degli script in modo che non possano accedere alla finestra o al DOM. È possibile vedere il codice e il sito Web principale here

La libreria ha un popup di consenso al primo caricamento, quindi l'utente sa cosa sta succedendo in background.