Kaylee:ブラウザーでの分散コンピューティング

1999年、SETI @ homeプロジェクトは、地球外の知能を検索するために、宇宙からの無線信号を分析するためのパーソナルコンピューターのリソースを提供するようユーザーを招待しました。 このプロジェクトの一環として、バークレー大学はBOINCプラットフォーム(Berkeley Open Infrastructure for Network Computing)を開発し、それに基づいて前述のSETI @ home、ABC @ home(abc仮説の証明)、Climateprediction.net(気候モデルの改善)がその後立ち上げられました、LHC @ home(高エネルギー粒子の衝突のシミュレーション)など。



そして、すべては問題ありませんが、BOINCは1つの前提条件を満たしている必要があります。ユーザーはクライアント部分をダウンロード、構成、起動する必要があります。 しかし、何らかの理由でこれが不可能な場合はどうでしょうか? そして、ブラウザでリンクをクリックし、すぐにコンピュータを大規模なコンピューティングネットワークのリンクに変えるだけでいいのです!



これらの考えで、私はKayleeを書くことを始めました。







どこから始まったのか



ブラウザーとコンピューティングを使用して独自のBOINCを作成するというアイデアは、約5年前に生まれました。2007年に、大学寮の素晴らしいルームメイトであるVova Casanovのおかげで、Ubuntuに出会い、C#からPythonに移行しました。 パイロットプロジェクトとして、「Distributed JavaScript Computing」プロジェクトが計画されました。 しかし、知識も経験も忍耐力も十分ではありませんでした。



4年以上経ちました。 独自のフレームワークを作成するという欲求は失われませんでしたが、さらに多くの機会がありました! Web WorkersはHTML5標準に登場し、ブラウザのメインJSストリームと並行してJavaScriptコードを実行できるようになりました。 その前身であるV8、SpiderMonkeyと比較して、カラカンは印象的な速度を達成しました。 CoffeeScriptを使用すると、クリーンで読みやすいコードを作成できます。 そして最後に、私はPythonに非常に夢中になり、それに付随するすべての属性(ドキュメント、PyPIパッケージなど)を備えた完全なフレームワークを作成したいと考えました。



タスクは何でしたか



ユーザーの視点から


ユーザーの観点から見ると、すべてが非常に単純に見えるはずです。 「このリンクをクリックして、コンピューターの電源を入れたままにして、科学者が<恐ろしい病気の名前が来る>の治療法を探してください。」



より厚かましいオプション:ユーザーはお気に入りのサイトにアクセスします。ここでは目に見えないiframeで、何も尋ねず、申し出も儀式もせずに、ビットコインマイニングが開始されます。



より時間のかかるオプション:ユーザーは計算に個人的に参加する必要があります。たとえば、言葉で説明する必要がある写真が表示されます。



プログラマーの観点から


プログラマーの観点から見ると、すべてが少しバラ色に見えます:分散アプリケーションのサーバー側を(Kaylee- Projectの観点から)Pythonで記述する必要があります。これは、これらの問題を解決するJavaScriptおよびCoffeeScriptアプリケーションのタスクおよびクライアント部分になります。

前者の場合、すべてが抽象クラスの継承と拡張によって決定され、後者の場合-2つの関数の実装によって決定されます。 サーバーとクライアント間のすべての通信はJSONで行われます。 はい、node.jsの支持者は私を許しますが、JavaScriptでのプログラミングやCoffeeScriptでさえ、Pythonでのプログラミングから得られる喜びを少しも得られません。



そして何が起こったのですか?



そして、それはケイリー(シリーズ「ホタル」のヒロインに敬意を表して)になりました。

Kayleeは、サーバーとコンピューターネットワークのノード(ユーザーブラウザー)間の通信を整理し、中間結果と最終結果を保存することで、プログラマーがアプリケーション自体に集中できるようにします。



Kayleeは、ほとんどすべてのPython Webフレームワークをフロントエンドとして使用できます(すぐに使用できるDjangoとFlaskがサポートされています)。



テストベンチとして、モンテカルロ法を使用してPi値を計算し、ソルトされたmd5ハッシュを「分割」するタスクを使用しました。 私には、フレームワークが両方のタスクを迅速に処理したようです!



仲間たち!



このプロジェクトは開発の初期段階にあり、Khabrovchanが私がこのプロジェクトについて最初に話すことを決めました。 あなたが興味を持ち、質問、提案、コメント、批判、そしてもちろん参加したいという要望があれば、これは大歓迎です!






All Articles