Kaylee: распределённые вычисления в браузере

в 11:41, , рубрики: coffeescript, python, распределённые вычисления, метки: , ,

В 1999 году проект SETI@home предложил пользователям предоставлять ресурсы своих персональных компьютеров для анализа радиосигналов из космоса в целях поиска внеземного разума. В рамках этого проекта в университете Berkley была разработана платформа BOINC (Berkeley Open Infrastructure for Network Computing), на основе которой впоследствии были запущены уже упомянутый SETI@home, ABC@home (доказательство abc-гипотезы), Climateprediction.net (улучшение климатических моделей), LHC@home (симуляция столкновений высокоэнергетических частиц) и другие.

И всё бы хорошо, но для работы BOINC требуется выполнение одного обязательного условия: пользователю требуется скачать, настроить и запустить клиентскую часть. Как же быть, если по каким-либо причинам это невозможно сделать? И как было бы здорово просто кликнуть по ссылке в браузере и вмиг превратить компьютер в звено большой вычислительной сети!

С этими мыслями я взялся за написание Kaylee.

С чего всё это начиналось

Идея написать свой BOINC с браузерами и вычислениями возникла лет 5 назад, когда в 2007-м году, благодаря Вове Казанову, моему замечательному соседу по комнате в университетской общаге, я познакомился с Ubuntu и пересел с C# на Python. В качестве пилотного проекта планировался проект «Распределённых JavaScript вычислений». Но ни знаний, ни опыта, ни настойчивости тогда не хватило.

Прошло 4 с небольшим года. Желание написать свой фреймворк не пропало, а возможностей стало гораздо больше! В стандарте HTML5 появились Web Workers, позволяющие выполнять javascript код параллельно с основным JS-потоком браузера. По сравнению с предшественниками, V8, SpiderMonkey, Carakan достигли впечатляющих скоростей. CoffeeScript позволяет писать чистый и читабельный код. И наконец, я полюбил Python настолько, что захотелось написать на нём полноценный фреймворк со всеми сопутствующими атрибутами (документацией, пакетами на PyPI и т.д.).

Какие ставились задачи

С точки зрения пользователя

С точки зрения пользователя всё должно выглядеть очень просто: «Не будет ли Вам угодно кликнуть по этой ссылке и оставить компьютер включённым на ночь дабы помочь учёным в поисках лекарства от <тут идёт название страшной болезни>?»

Более дерзкий вариант: пользователь заходит на любимый сайт, а тут в невидимом iframe, ничего не спрашивая, не предлагая и вообще не церемонясь, начинается добыча bitcoin.

Более трудоёмкий вариант: пользователю приходится участвовать в вычислениях лично, например, выводится картинка которую нужно описать словам.

С точки зрения программиста

С точки зрения программиста всё выглядит чуть менее радужно: требуется написать серверную часть распределённого приложения (в терминах Kaylee — Проект) на Python, которая будет составлять Задачи и клиентскую часть приложения на JavaScript / CoffeeScript, которая эти задачи будет решать.
В первом случае всё решается наследованием и расширением абстрактного класса, во втором — имплементацией двух функций. Всё общение между сервером и клиентом происходит на JSON. Да простят меня адепты node.js, но от программирования на JavaScript и даже CoffeeScript я не получаю и толики того удовольствия, которое получается при программировании на Python.

И что получилось?

А получилась Kaylee (в честь героини сериала «Firefly»).
Kaylee берёт на себя все заботы по организации связи между сервером и узлами (браузерами пользователей) вычислительной сети и хранению промежуточных и конечных результатов, позволяя программисту сконцентрироваться на самом приложении.

Kaylee может работать практически с любым Python web-фреймворком в качестве фронтенда (из коробки поддерживается Django и Flask).

В качестве тестового стенда использовалась задачи о вычислении значения Пи методом Монте-Карло и «взломе» посоленного md5-хеша. С обоими задачами, как мне кажется, фреймворк справился на ура!

Товарищи!

Проект находится на ранней стадии развития и Хабровчане — первые, кому я решился о нём рассказать. Если вам стало интересно, если у вас есть вопросы, педложения, замечания, критика и конечно же желание поучаствотать, всё это горячо приветствуется!

Автор: BasicWolf

Поделиться

* - обязательные к заполнению поля