Je vais vous proposez une idée simple, “faire un cluster avec l’idle CPU des gens qui trainent sur des sites webs”. Comment ? En JavaScript bien sûr !
Vous vous souvenez tous de Folding@Home (ou Seti@Home même si le coté UFO me botte beaucoup moins), pourquoi ne pas reprendre l’idée en AJAX ?
Rapide coup d’oeil des technos existantes
Les navigateurs Web récents on fait un énorme bon en terme de performance sur l’interprétation du JavaScript. Vous trouverez facilement sur google de nombreux articles qui traitent du sujet.
Si vous suivez ce blog vous avez dû tester un petit portage que j’avais fais de JBox2D avec GWT et les Canvas. Je vous laisse retenter l’expérience et vous verrez que le moteur physique est beaucoup plus rapide qu’il y a un an.
Pour rappel, GWT (Google Web Toolkit) permet de traduire du code Java en JavaScript. Bon ce n’est pas magique et il y a des limites mais ce compilateur permet assez facilement de porter des choses assez complexes.
Un langage de plus en plus rapide, un bon compilateur passons donc a l’étape suivante !
Mise en oeuvre
Le JavaScript est un langage de script fournit par le serveur et exécuté par le client. Il n’y a donc aucune installation et aucune restrictions (sauf en terme de sécurité, et ça se comprend) mais il n’y a aucune limitation en terme d’usage CPU.
Il est donc facile de faire un script qui récupère des données a traiter et l’algo de traitement (tant qu’a faire) effectue un certain nombre de calculs complexes puis transmet la réponse (en json par exemple) a un serveur.
Votre navigateur web permet donc (en terme pompeux), l’injection en javascript des données, le traitement et la transmission des résultats a un serveur.
Ici la seule difficulté, c’est le développement d’un serveur qui envoie les données a traiter et récupère les résultats et il faut le dire… c’est vraiment pas compliqué.
Vous avez donc grâce au couple HTML/JS un outil de déploiement facile de cluster. Et ben ça alors ! J’irais même plus loin en disant qu’il est UNIVERSEL puisqu’ici même votre téléphone (Android ou IPhone) pourra aussi contribuer au cluster. Tout ce qui peut aller sur le net (et qui a un navigateur JS) pourra contribuer aux calculs.
Mais, il y a forcément un bémol. L’utilisateur doit consciemment ou inconsciemment laisser son navigateur sur une page ou le script de calcul est présent. Je dis bien “inconsciemment” car l’utilisateur ne sais pas que du javascript tourne en arrière plan d’une page web. Un utilisateur mal intentionné pourrait donc recycler son site web en une énorme ferme de calcul (Je ne parlerais même pas ici d’attaque de cross site scripting) . Il faut bien comprendre qu’une simple balise SCRIPT dans une page web transforme un simple ordi en une partie du cluster.
Applications possibles dès à présent
Je vais ici proposer 3 idées d’utilisation d’un tel système de cluster.
Google labs dans le domaine médical
Vous l’aurez compris il faut que l’utilisateur soit présent sur la page pour que le calcul se fasse.
Imaginons que Google demande a ses utilisateurs de GMail et Google Docs de participer a un projet de calcul pour le domaine médical (type folding@Home). Il suffirait que l’utilisateur accepte (en connaissance de cause) et le script JS pourrait être lancer en arrière plan.
Des centaines de milliers de navigateur utiliseraient donc leur temps idle CPU pour le domaine médicale. Merveilleux .
Crack de clé WPA
Ici on est dans un domaine moins glamour. Un étudiant a prouver qu’il était possible de cracker des clé WPA avec le cloud d’Amazon, ici il suffirait de transposer ce principe sur un site web. Tout utilisateurs se connectant ce site web pourrait donc contribuer (sans le savoir) au hack de cette clé WPA.
L’utilisateur mal intentionné pourrait rajouter volontairement un script sur son site web ou alors l’injecter sur un site très connu par une attaque de type “cross site scripting” injectant ainsi son code de clustering.
J’insiste lourdement là dessus mais ce genre de pratique ne pourra JAMAIS être détecté car vous n’avez aucun contrôle sur les intentions du code JavaScript d’un site web.
Open Cloud
Ici l’idée est de faire un système de peer2peer mais en terme de temps CPU.
Toutes personnes restant sur la page de “l’open cloud” obtiendrait un crédit temps CPU. Si il souhaite utiliser le cloud il pourra exécuter grâce a une API JS ou même GWT du code qui sera exécuté plus ou moins rapidement en fonction de son crédit temps.
Imaginez le super calculateur qui pourrait émerger d’une telle structure !
Conclusion
L’évolution d’application en AJAX nous réserve a mon avis bien des surprises. Ce sujet me passionne particulièrement en ce moment et j’espère assez rapidement mettre en place une sorte de “Proof Of Concept” avec un challenge de clé Sha1.
J’espère que cet article vous aura intéressé et n’hésitez pas a laisser un commentaire .
Aucun commentaire:
Enregistrer un commentaire