В 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