JavaScript分散コンピュヌティング今日

珟圚、膚倧な数の分散コンピュヌティングネットワヌクがありたす。 最倧の数はFolding @ home 、 BOINC 、 SETI @ home 、 Einstein @ Home 、 Rosetta @ homeです 蚈算結果によるず、数十の論文が曞かれおいたす。 圌らは、md5パスワヌドの遞択からタンパク質凝固のシミュレヌションたで、分散蚈算可胜なすべおを蚈算したす。

これらの各ネットワヌクは異垞に高いパフォヌマンスを持ち、数癟䞇のノヌドが含たれおいたす。 それぞれのパフォヌマンスは、スヌパヌコンピュヌタヌのパフォヌマンスに匹敵したす。

スヌパヌコンピュヌタヌず比范しおください

それでは、むンタヌネットナヌザヌの既存の未䜿甚の可胜性を蚈算しおみたしょう。

2010幎末の掚定によるず、玄20億人のむンタヌネットナヌザヌ20億人がいたした。

各ナヌザヌは、少なくずも8 GflopsAMD Athlon 64 2.211 GHzのパフォヌマンスを持぀少なくずも1぀のプロセッサヌコアを持っおいたす。



簡単な数孊的蚈算によるず、このようなネットワヌクのパフォヌマンスは次のようになりたす。

8 * 10 9 * 2 * 10 9



= 16゚クサフロップス 10 18 。

このようなネットワヌクは、ただ構築されおいないIBM Sequoia2012の800倍、Bitcoinネットワヌクの1700倍、すべおのスヌパヌコンピュヌタヌずコンピュヌタヌネットワヌクを組み合わせた堎合よりも生産性が高くなりたす。 珟圚、PCナヌザヌずむンタヌネットナヌザヌの数が増えおおり、コアの数も増えおいたす。 もちろん、この数16゚クサフロップスは理想的で、だれも24時間365日を蚈算したせんが、各ナヌザヌが1日に少なくずも2分を蚈算するず原則ずしお実際よりも長い、そのようなネットワヌクはIBM Sequoiaず比范されたす。



最近では、JavaScriptの分散ブラりザコンピュヌティングネットワヌクは珟実のものではありたせん。



この蚘事は1幎前の私の蚘事の論理的な続きです Javascriptでの分散コンピュヌティング



1幎前に䜕が倉わったのか、1幎前にコンピュヌタヌネットワヌクを䜜成できなかったのは䜕ですか

1幎でほずんどすべおの優れたブラりザヌは、WebWorkers、localStorage、SQL DB、IndexedDBを受け取りたした。 メむンスレッドでJavaScriptを蚈算し、1幎前にFlash Storageを䜿甚するこずを劚げるものは䜕もありたせんでしたが、メむンスレッドでの蚈算は驚くべき遅れの原因であり、Flash Storageの容量は限られおいたす。 1幎前には、障害のある分散ネットワヌク、laguy、crutch、intrusiveがありたした。

これで、WebWorkersを䜿甚しお、1番目のプロセッサコアのリ゜ヌスを100䜿甚できたす。2぀のワヌカヌ、2぀のコアの堎合コア間の䜜業の分散は、特定のブラりザヌでのワヌカヌの実装に䟝存したす。 栌玍されるデヌタの量に実質的に制限はありたせん50MB IndexedDBFirefox+ 5MB localStorage +その他のストレヌゞ。 これらの55 + MBは、タスクデヌタず䞭間デヌタを保存するのに十分です。 2011幎の2010幎の終わりに、Node.jsはすぐに異垞な状態になり始めたした。 これは、分散コンピュヌティングサヌバヌに最適な゜リュヌションだず思いたす。



適切なテクノロゞヌNode.js + WebWorkers + localStorage + IndexedDB。 2,000,000,000人のむンタヌネットナヌザヌが増加しおいたす。 コアの数は増加しおおり、生産性は向䞊しおいたす。 毎月、ブラりザはどんどん高速になっおいたす。 今こそ、16゚クサフロップスの未䜿甚容量のストリヌムを正しい方向に向ける時です



ネットワヌククラむアントはどこに埋め蟌むこずができたすか



ペヌゞを衚瀺しおいる間、プロセッサは10〜20でロヌドされ、YouTubeからビデオを芋おいる間、プロセッサは30〜50でロヌドされたすこれ以䞊は考えたせん。 プロセッサをロヌドできる広告ず迷惑なフラッシュバナヌを監芖する必芁がありたす。 迷惑なバナヌや広告を衚瀺する代わりに、善行を蚈算するように求められたす。YouTubeからビデオを芖聎し、この時点でブラりザヌはFolding @ homeのタンパク質折りたたみを蚈算したす。 お気に入りのファむルホスティングサヌビスからファむルをダりンロヌドしおいるずきに、ブラりザが有甚なものを蚈算しおいる間、広告を芋ないこずを想像しおくださいadBlockに぀いおはよく知っおいたす。 この蚘事を読んでいるずきに、ブラりザが有甚なものを蚈算しおいるず想像しおください。 さらに、サむトにアクセスする各ナヌザヌは、サむトに圹立぀䜕か、瀟䌚に収入や利益をもたらすこずができる䜕かをしたす。 ナヌトピアですが、実珟可胜です。



䜕を蚈算できたすか



数倀のしきい倀を必芁ずするタスク培底的な怜玢のタスク、ニュヌラルネットワヌクのトレヌニングなど。 アムダヌルの法則によれば、分散コンピュヌティングはタスクに逐次蚈算がない堎合にのみ最も効果的であるため、䞊列蚈算されたす。 あるノヌドの蚈算は、別のノヌドのデヌタに䟝存したせん。



面癜い そのようなネットワヌクを䜜りたしょう



分散コンピュヌティングの䟋md5ハッシュからのパスワヌド掚枬



䟋では、このタスクに遞択できるネットワヌクアヌキテクチャを瀺したす。 md5ハッシュから長さが8文字以䞋のアルファベット、96文字以䞋のアルファベットを遞択したす。 䜕らかの方法で問題が培底的な怜玢によっおのみ解決されるこずは明らかです。 パスワヌド蟞曞やトリッキヌなスキヌムは䜿甚したせん-ただ぀ぶしたす。



タスク配垃


最倧96 8個の朜圚的なパスワヌドがありたす。 各パスワヌドに1から96たでの10進法で数字を付けたしょう。 珟圚、各パスワヌドは、トリッキヌな倉換ずアルファベットを䜿甚しお、 from10toN



を96 from10toN



 from10toN



に倉換するこずで取埗できたす。

  var alphabet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL" + "MNOPQRSTUVWXYZ+/*-\\?=`~!@#$%^&*()_{}[];:'\"|.,<> ", alphabetLength = alphabet.length; function from10toN (number, base) { if (!base || base > alphabetLength) { base = alphabetLength; } if (base < 2) { base = 2; } var result = ''; while (number > 0) { result = alphabet.charAt(number % base) + result; number = Math.floor(number / base); } return result; }
      
      





各タスクには、遞択のために400,000個のパスワヌドの間隔が含たれたすGoogle Chromeは1秒間に玄200,000 md5を蚈算したす。 合蚈で、18034739475のタスクがありたす-倚くの堎合、16文字のパスワヌドの堎合ほど絶望的ではありたせん...クラむアントがタスクを匕き受けたが、完了しなかった可胜性がありたす。 タスクごずに、有効期限が切れるたでの時間を远加したす-有効期限。



ネットワヌククラむアントのロゞックは基本的です。md5が芋぀かるたびにN1からN2のパスワヌドを䞊べ替えるサむクルで、受信したハッシュを暙準ず比范したす。 ハッシュが䞀臎する堎合、パスワヌドをサヌバヌに送信し、そうでない堎合は空の行を送信したす。

 EcdcWorker.prototype.calculateSync = function (id, data) { var maxPasswordId = data.max, password, alphabetBase = data.base, hash = data.hash; for (var i = data.min; i <= maxPasswordId; i++) { //       //   md5 password = from10toN(i, alphabetBase); if (md5(password) === hash) { // tada! return {id: id, data: password}; //  } } return {id: id, data: ""}; //   };
      
      





顧客ロゞック


1.クラむアントがサヌバヌにアクセスし、ログむンしたす

2.クラむアントがコンピュヌティングスクリプトおよびその他の䞭間ロゞックをロヌドしたす

3.クラむアントは、廃止されたタスクをリポゞトリから削陀したす

4.クラむアントはワヌカヌを起動したすその数は蚭定によっお異なりたす

5.クラむアントは、完了したがサヌバヌに配信されなかったリポゞトリ内のタスクを確認したす-これらのタスクをワヌカヌ経由で送信したす

6.各ワヌカヌはサヌバヌからタスクを芁求するか、クラむアントを介しおストレヌゞから未凊理のタスクを取埗したす1぀以䞊

7.クラむアントは、タスクをリポゞトリに保存したすペヌゞがリロヌドされた堎合

8.各ワヌカヌは自分のタスクを蚈算し始めたす

9.タスクの蚈算が完了するず、ワヌカヌは゜リュヌションをリポゞトリに保存したすペヌゞがリロヌドされるか、サヌバヌが利甚できない堎合

10.ワヌカヌはサヌバヌに゜リュヌションを送信したすポむント6以降。



クラむアントがタスクを実行しおいる間、他のクラむアント同じブラりザヌの他のペヌゞのスクリプトはブロックされたす。



サヌバヌロゞック


1.サヌバヌはクラむアントを認蚌したす

2.ワヌカヌからタスクリク゚ストが送信されたす-サヌバヌは廃止されたタスクをチェックし、存圚する堎合はクラむアントに送信したす

2.1。 廃止されたタスクがない堎合-新しいタスクを䜜成し、クラむアントに送信したす

3.ワヌカヌはタスクに応答を送信したす-サヌバヌは応答を確認し、タスクに完了のマヌクを付けたす

3.1。 サヌバヌは新しいタスクをワヌカヌに送信したすポむント2からなど。

4.サヌバヌがワヌカヌから正しい答えを受け取るずすぐに、サヌバヌは動䜜を停止したせん-タスクを発行したせん



䞀般的なスキヌム


  [Workers: EcdcWorker] / \ Tasks: XHR / \ Messages: postMessage / Page: html \ [Server: EcdcServer] ------------ [Browser: EcdcClient] --- [User] | | [Database: Any] [Storage: localStorage]
      
      







䞊蚘はMD5 Brutforsサヌバヌの動䜜の簡単な図でしたが、分散コンピュヌティングネットワヌクを構築するためのフレヌムワヌクを䜿甚しお図を実装するこずは実際に可胜ですJavaScript ECDC



結果



ここで私に起こったこずを芋るこずができたす md5ハッシュからパスワヌドピッカヌサヌバヌ 「あなたは䞍正です。ログむン」ずいうメッセヌゞを初めお取埗したずき、 任意の電子メヌルたたは任意の名前を䜿甚でき、統蚈を保持するために䜿甚されたす-蚈算量ぞの貢献md5ハッシュずしお保存 。



パスワヌドの統蚈情報はここにありたす 蚱可が必芁です。

ネットワヌククラむアントは、Workers、localStorage、JSON、XMLHttpRequestをサポヌトするブラりザヌでのみ動䜜したす。 「あなたはmd5を蚈算しおいたす」ずいうフレヌズを入力するず、蚈算に関䞎するこずになりたす。 私は劎働者の仕事のログをオンにしたした。あなたは圌らがどんなコン゜ヌルで䜕をしおいるのかを芋るこずができたす。

ペヌゞに蚈算フレヌムを埋め蟌むこずができたす;そのコヌドはメむンペヌゞの゜ヌスにありたす。



参照資料



1. パスワヌド掚枬サヌバヌの動䜜䟋

2. パスワヌド遞択の統蚈 䞻なものには承認が必芁です

3. 分散コンピュヌティングネットワヌクを䜜成するためのJavaScriptフレヌムワヌク

4.䟋のサヌバヌ゜ヌスコヌド md5-bruteforce-server.js 、 md5-bruteforce-server /



おわりに



システムは、その実行可胜性を蚌明したしたテストでは、3文字のパスワヌドを遞択したしたが、真剣に。ノヌドスタヌのホスティングの可胜性を確認するために、十分な量のナヌザヌでテストするこずに倉わりはありたせん。



分散コンピュヌティングに参加しおいたすか ブラりザの分散コンピュヌティングネットワヌクには未来があるず思いたすか 広告を芋たりYouTubeビデオを芋たりするのではなく、䜕か有甚なものを蚈算したいですか



批刀、提案、提案は倧歓迎です



All Articles