Распределённые вычисления
Содержание:
Введение
API взаимодействия
Для платформы BOINC разработчики предоставляют документированные интерфейсы API, предназначенные для взаимодействия с приложениями и web-сайтами. Возможности, предоставляемые этими интерфейсами, включают в себя:
- локальный и удаленный контроль графического интерфейса клиента BOINC;
- предоставление информации о набранных кредитах (в целом по проекту, для отдельного пользователя, команды или страны);
- управление учетными записями нескольких проектов через единый web-интерфейс;
- суммарная статистика по кредитам для хостов, команд и пользователей, участвующих в нескольких проектах;
- механизмы, позволяющие локальным программам редактировать настройки клиента BOINC.
Подробную информацию по каждому типу API можно найти по ссылкам на странице
http://boinc.berkeley.edu/trac/wiki/SoftwareAddon
Перед вами новая — шестая — статья серии, посвященной изучению платформы для организации распределенных вычислений BOINC. Сегодня мы начинаем новую тему — создание приложений, способных использовать всю мощь volunteer computing. Если вы не знаете что такое BOINC, тогда прочтите первую статью серии (п. 1 раздела Ссылки). Разрабатывая приложения, необходимо ясно представлять себе архитектуру платформы BOINC, основные компоненты серверной части, последовательность обработки задания службами и многое другое. Основные сведения по этому вопросу вы найдете во второй статье (п. 2 раздела Ссылки). В других статьях серии рассказывалось о том, как установить, настроить и сопровождать свой собственный сервер распределенных вычислений на базе платформы BOINC (пп. 3-5 раздела ссылки).
В этой статье мы рассмотрим тестовый пример и обсудим базовую структуру приложения BOINC. В следующих статьях мы подробнее остановимся на вопросах организации взаимодействия в рамках одного распределенного приложения, автоматизации генерации рабочих заданий и использовании бинарных компонент при выполнении вычислений.
История
Основная статья: История параллельных и распределённых вычислений
Работы по распределённым вычислениям с весьма прикладной целью — для военных нужд, а именно автоматизации процессов секретной связи и обработки разведывательной информации, велись интенсивно в США с 1960-х гг. Разработкой технологий распределённых вычислений и созданием распределённых информационных систем в Соединённых Штатах по заказу Агентства по перспективным оборонным научно-исследовательским разработкам США, видов вооружённых сил и служб (агентств) в структуре Министерства обороны США занимались исследовательские подразделения компаний и университетов:
- Bolt, Beranek and Newman, Кембридж, Массачусетс;
- Computer Corporation of America, Кембридж, Массачусетс;
- Network Analysis Corporation, Глен-Коув, Лонг-Айленд;
- System Development Corporation, Санта-Моника, Калифорния;
- Стэнфордский исследовательский институт, Менло-Парк, Калифорния;
- Национальный институт стандартов и технологий, Вашингтон, округ Колумбия;
- Калифорнийский университет в Лос-Анджелесе, Калифорния;
- Агентство военной связи, Скотт, Иллинойс.
В рамках проводившихся фундаментальных исследований, НИР и ОКР, разрабатывались соответствующие программно-аппаратные комплексы под уже существующие низкоуровневые (машинно-ориентированные) языки программирования, специальное программное обеспечение с криптографической защитой и т. д.
В 1973 году Джон Шох и Джон Хапп из калифорнийского научно-исследовательского центра Xerox PARC написали программу, которая по ночам запускалась в локальную сеть PARC и заставляла работающие компьютеры выполнять вычисления.
В 1977 году в НЭТИ (НГТУ, Новосибирск) на кафедре вычислительной техники под руководством В. И. Жираткова была разработана распределенная вычислительная система из трех ЭВМ «Минск-32» с оригинальным аппаратным и программным обеспечением, поддерживающим протоколы физического, канального и сетевого уровней, и обеспечивающим выполнение параллельных задач. Одна машина находилась на ВЦ НГТУ, а две другие — на ВЦ Института Математики СО РАН. Связь между НГТУ и ИМ СО РАН обеспечивалась по радиоканалу с использованием направленных антенн. Система тестировалась при решении оптимизационных задач в области экономики с использованием крупноблочного распараллеливания.[источник не указан 80 дней]
В 1978 году советский математик Виктор Глушков работал над проблемой макроконвейерных распределённых вычислений. Он предложил ряд принципов распределения работы между процессорами.:320 На базе этих принципов им была разработана ЭВМ ЕС-2701.
В 1988 году Арьен Ленстра и Марк Менес написали программу для факторизации длинных чисел. Для ускорения процесса программа могла запускаться на нескольких машинах, каждая из которых обрабатывала свой небольшой фрагмент..
В 1994 году Дэвидом Джиди была предложена идея по организации массового проекта распределённых вычислений, который использует компьютеры добровольцев (т. н. добровольные вычисления) — SETI@Home. Научный план проекта, который разработали Дэвид Джиди и Крейг Каснофф из Сиэтла был представлен на пятой международной конференции по биоастрономии в июле 1996 года.
В январе 1996 года стартовал проект GIMPS по поиску простых чисел Мерсенна, также используя компьютеры простых пользователей как добровольную вычислительную сеть.
28 января 1997 года стартовал конкурс RSA Data Security на решение задачи взлома методом простого перебора 56-битного ключа шифрования информации RC5. Благодаря хорошей технической и организационной подготовке проект, организованный некоммерческим сообществом distributed.net, быстро получил широкую известность.
17 мая 1999 года стартовал SETI@home на базе Grid, а в начале 2002 года завершилась разработка Калифорнийского Университета в Беркли открытой платформы BOINC (Berkeley Open Infrastructure for Network Computing), разрабатываемой с апреля 2000 года первоначально для SETI@Home, но первым на платформе BOINC стал проект Predictor@home запущенный 9 июня 2004 года.
Загадочная «решетка»
Речь пойдет об одной из форм распределенных вычислений (в международной терминологии такие вычисления называют GRID – решетка) – Volunteer Computing. Сначала поясним термины.
GRID – это объединение нескольких компьютеров для решения единой вычислительно сложной задачи, разбитой на подзадачи. Каждый компьютер решает несколько подзадач, а результаты отдельных вычислений объединяются. Основное преимущество GRID в том, что она может состоять из компьютеров, находящихся друг от друга на тысячи километров и имеющих различные характеристики (как аппаратные, так и программные). Задачу объединения этих разнородных компьютеров выполняет промежуточное программное обеспечение, которое (виртуально) связывает все компьютеры через Интернет в единый суперкомпьютер. Идея GRID возникла в 1990-х годах, когда с развитием средств компьютерных коммуникаций объединение географически удаленных друг от друга компьютеров стало более дешевым, простым и потенциально более мощным средством повышения производительности, чем наращивание мощности одного-единственного суперкомпьютера.
Существуют различные виды GRID. Volunteer Computing – это форма реализации GRID-вычислений, специфика которой заключается в использовании времени простоя компьютеров обычных пользователей по всему миру. На текущий момент самым крупным проектом Volunteer Computing как по числу участников, так и по суммарной мощности является Folding@home – проект по проведению компьютерной симуляции свертывания молекул белка, запущенный в октябре 2000 года учеными из Стэнфордского университета. Однако речь в этой статье пойдет не о Folding@home, а о втором по величине проекте – системе BOINC. Причина проста – в отличие от специализированного Folding@home, проект BOINC предоставляет возможность участия в самых разнообразных научных проектах, начиная от взлома криптографических систем и заканчивая поиском внеземных цивилизаций!
Будущее рядом, но не всем доступно
Становятся заметны перспективы создания «облачных» приложений: например игр с
потрясающей графикой, расчет элементов которой полностью ложатся на сервер, а
клиенты лишь выводят игроку результаты в виде красивой картинки на экран
монитора.
В частности, разработанная нами система может оказаться полезной, когда
очередной хэш не находится ни в одном из онлайн-хранилищ «слепков» паролей, а
так же не поддается Джону Потрошителю a.k.a John the Ripper. Для таких случаев
каждый уважающий себя взломщик/pen-тестер/security-консультант (нужное
подчеркнуть) должен иметь в своем инструментарии приложение, реализующее
распределенные вычисления.
Примечания
- David A. Patterson and John L. Hennessy. Computer Organization and Design (Second Edition) Morgan Kaufmann Publishers, 1998. ISBN 1-55860-428-6, pg 715
- Asanovic et al: Old : Power is free, but transistors are expensive. New is power is expensive, but transistors are «free».
- Эндрю Таненбаум, Мартин ван Стеен. Распределенные системы. Принципы и парадигмы = Andrew S. Tanenbaum, Maarten van Steen. «Destributed systems. Principles and paradigms». — Санкт-Петербург: Питер, 2003. — 877 с. — (Классика computer science). — ISBN 5-272-00053-6.
- Тихонов С. Г. Оборонные предприятия СССР и России : в 2 т.. — М. : ТОМ, 2010. — Т. 2. — С. 47-48, 82-83. — 608 с. — 1000 экз. — ISBN 978-5-903603-03-9.
- Minsky, Marvin. The Society of Mind (неопр.). — New York: Simon & Schuster, 1986. — С. 17. — ISBN 0-671-60740-5.
- Minsky, Marvin. The Society of Mind (неопр.). — New York: Simon & Schuster, 1986. — С. 29. — ISBN 0-671-60740-5.
- Blakeslee, Thomas (англ.)русск.. Beyond the Conscious Mind. Unlocking the Secrets of the Self (англ.). — 1996. — P. 6—7.
- Gazzaniga, Michael (англ.)русск.; LeDoux, Joseph (англ.)русск.. The Integrated Mind (неопр.). — 1978. — С. 132—161.
- Gazzaniga, Michael (англ.)русск.. The Social Brain. Discovering the Networks of the Mind (англ.). — 1985. — P. 77—79.
- Ornstein, Robert (англ.)русск.. Evolution of Consciousness: The Origins of the Way We Think (англ.). — 1992. — P. 2.
- Hilgard, Ernest (англ.)русск.. Divided consciousness: multiple controls in human thought and action (англ.). — New York: Wiley, 1977. — ISBN 978-0-471-39602-4.
- Hilgard, Ernest (англ.)русск.. Divided consciousness: multiple controls in human thought and action (expanded edition) (англ.). — New York: Wiley, 1986. — ISBN 0-471-80572-6.
- Kaku, Michio (англ.)русск.. The Future of the Mind: The Scientific Quest to Understand, Enhance, and Empower the Mind (англ.). — 2014.
- Успенский, Пётр. Глава 3 // В Поисках Чудесного. Фрагменты Неизвестного Учения (рус.). — 1992. — С. 72—83.
- . Дата обращения 22 июля 2017.
Подготовительные шаги
Перед тем как приступать к собственно установке требующегося программного обеспечения, необходимо выполнить ряд предварительных шагов. Прежде всего, под сервер должен быть отведен достаточно производительный компьютер. На сайте разработчиков BOINC указываются следующие требования:
«Компьютер должен иметь достаточно производительный процессор (например, двухъядерный Xeon или Opteron) и, как минимум, 2 ГБ оперативной памяти. Для проектов с высокой нагрузкой необходимо не менее 8 ГБ оперативной памяти и более производительный процессор.»
Для более или менее серьезных проектов, как и положено серверу, должны быть проведены мероприятия по повышению отказоустойчивости (подключение источника бесперебойного питания, настройка RAID, контроль и поддержание температурного режима и т.д.).
Удостоверившись в выполнении необходимых аппаратных требований – обеспечении достаточной производительности и хорошей отказоустойчивости, можно приступать к подготовке системного программного обеспечения.
На компьютере, выделенном вами в качестве сервера BOINC, должна быть установлена операционная система GNU/Linux (подойдет любой понравившийся вам дистрибутив). В системе должны присутствовать средства разработки (компилятор, компоновщик связей и т.д.), сервер баз данных и Web-сервер, а также некоторые дополнительные библиотеки и вспомогательные утилиты, которые можно устанавливать по мере возникновения необходимости. При написании этой статьи в качестве сервера использовался компьютер на основе двухъядерного процессора Intel Xeon 2.80 ГГц с 2 ГБ оперативной памяти. Аппаратные ресурсы управлялись OpenSUSE Linux 11.1.
Позаботьтесь о том, чтобы хорошо защитить свой сервер на программном уровне – необходимо своевременно устанавливать обновления безопасности, настроить межсетевой экран, отключить ненужные сетевые сервисы и т.д. Большую помощь в этом могут также оказать средства обеспечения мандатного контроля доступа AppArmor, TOMOYO Linux или даже SELinux.
Все стандартные рекомендации по обеспечению защищенности и отказоустойчивости аппаратных ресурсов и программной системы имеют особую важность при организации распределенных вычислений «volunteer computing», так как напрямую отражаются на популярности проекта. Если ваш сервер будет периодически «пропадать» или станет распространителем спама и руткитов, то вряд ли найдется много желающих отдавать ресурсы своих компьютеров такому проекту!. Теперь нужно установить необходимое для работы BOINC вспомогательное программное обеспечение
Для развертывания сервера понадобятся СУБД MySQL, Web-сервер Apache, интерпретаторы и стандартные библиотеки языков python и php. Объяснение такому разнообразию необходимых инструментов можно найти в прошлой статье – помните, там говорилось о том, что Web-сервер – это составная часть сервера BOINC, а база данных несет на себе огромную функциональность
Теперь нужно установить необходимое для работы BOINC вспомогательное программное обеспечение. Для развертывания сервера понадобятся СУБД MySQL, Web-сервер Apache, интерпретаторы и стандартные библиотеки языков python и php. Объяснение такому разнообразию необходимых инструментов можно найти в прошлой статье – помните, там говорилось о том, что Web-сервер – это составная часть сервера BOINC, а база данных несет на себе огромную функциональность.
Кроме того, для получения и сборки исходного кода потребуются клиент системы управления версиями Subversion (svn), компилятор gcc и средства разработки из состава GNU Tools, а также открытый криптографический пакет OpenSSL и вспомогательная утилита pkg-config.
Установив вспомогательное программное обеспечение, создайте пользователя-администратора проекта BOINC, (например, boincadmin), от имени которого будут работать служебные скрипты сервера. Этот пользователь должен иметь возможность работать с базой данных, а также создавать и удалять файлы в каталогах Web-сервера Apache.
Еще одно важное требование – сервер BOINC должен иметь доменное имя и «белый» IP-адрес. Однако необходимость в «белом» IP-адресе отпадает, если BOINC-сервер – и все размещаемые на нем проекты – должен быть виден только в рамках локальной сети, например, университета
Однако в любом случае для комфортной работы IP-адрес должен быть статическим.
Теперь, когда выполнены все вспомогательные шаги и предварительные условия, можно переходить непосредственно к сборке программных компонент сервера BOINC.
Что нам стоит грид построить?
Для начала, разберемся в устройстве сети, посмотрев на соответствующую
картинку.
Структура грид-сети
Система имеет в основе клиент-серверную архитектуру с, так называемым,
«толстым» клиентом — то есть, клиентская часть берет на себя все необходимые
данные для расчетов у сервера и затем обращается к нему только с определенным
результатом. Задача сервера: корректно обработать запросы клиентов и
синхронизировать имеющиеся данные между ними, при этом правильно выводя
результаты администратору сети. То есть, нам. Тем, кто уже приступил к созданию
сокета и формированию пакета для отправки, я с радостью продемонстрирую
технологию .NET Remoting в действии.
При первом запуске серверной части систему требуется создать и
зарегистрировать канал на определенном порту (в качестве примера используем порт
с номером 39993), а также зарегистрировать класс для удаленной активизации, то
есть — для предоставления этого класса клиентам. В этом как раз заключается суть
«Ремоутинга»: клиент создает у себя экземпляр класса, который расположен на
удаленном сервере, и работает с этим экземпляром, как со своим. Особо
внимательный читатель заметит, что это, по своей сути, сервис: серверная часть
может предоставлять вычислительные ресурсы своим клиентам, а те, в свою очередь,
получают лишь результаты расчетов. В нашем случае все происходит с точностью до
наоборот: сервер должен использовать результаты работы клиентов. Разработчики
Microsoft таким образом стерли грань между клиентской и серверной частями: любой
объект становится общедоступным и методы, принадлежащие ему, могут выполняться
на любой из сторон. Применительно к нашему случаю: все вычисления, которые
осуществляются в объектах класса, выполняются на сервере, а клиенту передаются
лишь результаты этих расчетов. Вся эта система работает через прозрачный,
невидимый для программиста, прокси-сервер.
URI, он же Uniform Resource Identifier (унифицированный идентификатор
ресурса) – параметр, который используется клиентом для активизации объекта: с
помощью URI клиент укажет серверу, что требуется экземпляр класса Bot.
Клиент, в свою очередь, должен создать клиентский канал и зарегистрировать
удаленный класс в локальном домене:
Здесь URI задает местоположение удаленного класса. Протокол (в данном случае,
TCP) соответствует протоколу каналов, зарегистрированных в доменах приложений.
Идентификатор машины (localhost, но в реальных условиях — IP-адрес или имя
компьютера) задает сервер, экспортирующий класс Bot и таким образом указывает
компьютер, на котором будет создан объект. Далее в строке URI через двоеточие
указывается номер порта, на котором сервер ожидает вызовы (в нашем случае, порт
с номером 39993).
И напоследок: для того, чтобы класс Bot поддерживал удаленное взаимодействие,
необходимо использовать в качестве базового класса System.MarshalByRefObject:
Рынок шифрования быстро растет
По оценке компании MarketsandMarkets в 2018–2023 гг. рынок сетевого шифрования будет расти на 9,8% в год, с $2,9 млрд в 2018-м до $4,6 млрд в 2023-м. Главные «движущие силы» этого роста — увеличение количества угроз и соответствующее повышение требований регуляторов к обеспечению безопасности данных. Затраты на оптические каналы будут расти опережающими темпами, соответственно среди главных покупателей средств защиты будет расти доля телеком-операторов и крупных предприятий.
Динамика рынка средств сетевого шифрования, $ млрд

Сегмент решений для оптических линий будет составлять большую долю рынка средств сетевого шифрования: в 2017 г. на него приходилось $2,53 млрд, в 2024 он достигнет $4,24 млрд (ежегодный рост — 8,9%).
Аналогичные оценки сделали и в KBV Research: рынок сетевого шифрования будет увеличиваться в ближайшие 5 лет на 11,4% ежегодно и в 2024 г. достигнет $4,7 млрд. Опережающими темпами будет развиваться рынок Азиатско-тихоокеанского региона (на 13,4% в год), европейский и американский отстанут (10,5% и 10% соответственно).
Быстрее всего в этот период будет расти сегмент услуг (14,1% в год), сегмент программного обеспечения будет увеличиваться на 11% ежегодно, а оборудования — на 10,5%. Однако последний останется самым крупным, в 2024 г. он достигнет $2,4 млрд.
Что касается скоростей шифрования, то, согласно тому же отчету KBV Research, наибольшая доля рынка у решений для диапазона скоростей передачи данных 10–40 Гбит/с, который будет расти до 2024 г. на 10,8% ежегодно. Продажи средств шифрования со скоростями «менее 40 Гбит/с» и «более 100 Гбит/с) будут расти на 10,7%. А быстрее всего (на 13,2 % в год), как ни странно, будут увеличиваться продажи устройств шифрования со скоростями до 10 Гбит/с.
Российский рынок в 2024 г. достигнет, по оценке KBV, $100,4 млн. Его основной компонент, сегмент оборудования, будет прирастать на 9,4% ежегодно, ПО — на 9,8%, услуг — на 13%.
Типы параллелизма
Параллелизм на уровне битов
Эта форма параллелизма основана на увеличении размера машинного слова. Увеличение размера машинного слова уменьшает количество операций, необходимых процессору для выполнения действий над переменными, чей размер превышает размер машинного слова. К примеру: на 8-битном процессоре нужно сложить два 16-битных целых числа. Для этого вначале нужно сложить нижние 8 бит чисел, затем сложить верхние 8 бит и к результату их сложения прибавить значение флага переноса. Итого 3 инструкции. С 16-битным процессором можно выполнить эту операцию одной инструкцией.
Исторически 4-битные микропроцессоры были заменены 8-битными, затем появились 16-битные и 32-битные. 32-битные процессоры долгое время были стандартом в повседневных вычислениях. С появлением технологии x86-64 для этих целей стали использовать 64-битные процессоры.
Параллелизм на уровне инструкций
Компьютерная программа — это, по существу, поток инструкций, выполняемых процессором. Но можно изменить порядок этих инструкций, распределить их по группам, которые будут выполняться параллельно, без изменения результата работы всей программы. Данный приём известен как параллелизм на уровне инструкций. Продвижения в развитии параллелизма на уровне инструкций в архитектуре компьютеров происходили с середины 1980-х до середины 1990-х.

Классический пример пятиступенчатого конвейера на RISC-машине (IF = выборка инструкции, ID = декодирование инструкции, EX = выполнение инструкции, MEM = доступ к памяти, WB = запись результата в регистры).
Современные процессоры имеют многоступенчатый конвейер команд. Каждой ступени конвейера соответствует определённое действие, выполняемое процессором в этой инструкции на этом этапе. Процессор с N ступенями конвейера может иметь одновременно до N различных инструкций на разном уровне законченности. Классический пример процессора с конвейером — это RISC-процессор с 5-ю ступенями: выборка инструкции из памяти (IF), декодирование инструкции (ID), выполнение инструкции (EX), доступ к памяти (MEM), запись результата в регистры (WB). Процессор Pentium 4 имеет конвейер в 31 ступень.

Пятиступенчатый конвейер суперскалярного процессора, способный выполнять две инструкции за цикл. Может иметь по две инструкции на каждой ступени конвейера, максимум 10 инструкций могут выполняться одновременно.
Некоторые процессоры, дополнительно к использованию конвейеров, обладают возможностью выполнять несколько инструкций одновременно, что даёт дополнительный параллелизм на уровне инструкций. Возможна реализация данного метода при помощи суперскалярности, когда инструкции могут быть сгруппированы вместе для параллельного выполнения (если в них нет зависимости между данными (завимости по данным)). Также возможны реализации с использованием явного параллелизма на уровне инструкций: VLIW и EPIC.
Параллелизм данных
Основная идея подхода, основанного на параллелизме данных, заключается в том, что одна операция выполняется сразу над всеми элементами массива данных. Различные фрагменты такого массива обрабатываются на векторном процессоре или на разных процессорах параллельной машины. Распределением данных между процессорами занимается программа. Векторизация или распараллеливание в этом случае чаще всего выполняется уже на этапе компиляции — перевода исходного текста программы в машинные команды. Роль программиста в этом случае обычно сводится к заданию настроек векторной или параллельной оптимизации компилятору, директив параллельной компиляции, использованию специализированных языков для параллельных вычислений.
Параллелизм задач
Стиль программирования, основанный на параллелизме задач, подразумевает, что вычислительная задача разбивается на несколько относительно самостоятельных подзадач и каждый процессор загружается своей собственной подзадачей.
Распределённые операционные системы
Распределённая ОС, динамически и автоматически распределяя работы по различным машинам системы для обработки, заставляет набор сетевых машин обрабатывать информацию параллельно. Пользователь распределённой ОС, вообще говоря, не имеет сведений о том, на какой машине выполняется его работа.
Распределённая ОС существует как единая операционная система в масштабах вычислительной системы. Каждый компьютер сети, работающей под управлением распределённой ОС, выполняет часть функций этой глобальной ОС. Распределённая ОС объединяет все компьютеры сети в том смысле, что они работают в тесной кооперации друг с другом для эффективного использования всех ресурсов компьютерной сети.
Einstein@Home — проверяем гипотезу Энштейна

Einstein@Home — проект, созданный для проверки гипотезы Эйнштейна о гравитационных волнах — способа распространения гравитации во Вселенной. Для этого изучают и составляют подробный атлас “тяжелых” объектов космоса — нейтронных звезд, черных дыр, пульсирующих звезд, чтобы понять как могут распространятся гравитационные волны, если они, конечно, существуют. Наблюдения и измерения в рамках этого проекта позволяют глубже понять и подтвердить (а быть может в будущем — опровергнуть?) общую теорию относительности (Помним GPS?), узнать с какой скоростью перемещаются гравитационные волны — со скоростью ли света, определить физические свойства этих гипотетических волн. Кроме того, с 2009 года часть мощностей проекта и, соответственно, часть вычислений добровольцев направлено на поиски радиопульсаров и других необычных объектов Вселенной.
LHC@home
Если вы торопитесь приблизить конец света на Земле – этот проект для вас. Проект занимается моделированием процессов, которые будут происходить в строящемся сейчас в Швейцарии LHC (Large Hadron Collider) — самом большом в мире ускорителе частиц. В ускорителе длиной около 27 километров планируют столкнуть два протона для того, чтобы экспериментально доказать существование некого бозона Хиггса. Некоторые специалисты и представители общественности высказывают опасения, что имеется отличная от нуля вероятность выхода проводимых в коллайдере экспериментов из-под контроля и развития цепной
реакции, которая при определённых условиях теоретически может уничтожить всю планету. Точка зрения сторонников катастрофических сценариев связанных с работой LHC изложена на сайте http://www.risk-evaluation-forum.org/anon1.htm.
Считаете, что за дело аннигиляции всей вселенной можно и умереть – тогда присоединяйтесь. Дело в том, что от LHC ежегодно планируют получать до 15 петабайт данных. Уже сейчас вы можете помочь начать обрабатывать эти данные скачав программу SixTrack, которая моделирует движущиеся по кольцу в LHC частицы для изучения стабильности их орбит. Результаты выполнения программы SixTrack очень важны, от них зависит как будет работать крупнейший в мире научный проект, деятельность которого может совершить революцию в физике или отправить нашу галактику в антипространство.
Требования: несущественны.
Результат: доказательства некоторых научных теорий; низкоуровневый распад вселенной.
Кто не работает — тот завис
Построив теоретический фундамент, рассмотрим особенности функционала
клиентской части системы, подкрепляя рассуждения кодом.
Чтобы ресурсы удаленного класса стали доступными для клиента, он должен создать
экземпляр этого класса:
Далее работа с объектом brain будет происходить, как с локальным, но при этом
все расчеты, которые выполняются в классе этого объекта, будут производиться
сервером.
Как не странно, наша система распределенных вычислений должна грамотно
распределить (простите за тавтологию) задачу между ресурсами клиентов. Напомню,
что задачей у нас является диапазон всевозможных комбинаций символов, из
которых, по мнению пользователя (он определяет алфавит, на основе которого
генерируется диапазон), может состоять пароль.
Пусть каждая рабочая станция в нашей грид-сети сама определит диапазон строк,
который она сможет перебрать за адекватное время. «Предпочтения» рабочей станции
мы будем определять с помощью частоты процессора и количества ядер
(процессоров):
Составим простейшую функцию, в результате работы которой получится число,
равное числу строк (диапазон) для нашего клиента:
Изменяя значение третьего коэффициента, мы будем изменять среднее время
перебора адекватного (установленного на основе моих экспериментов) диапазона
строк.
Процесс перебора состоит из трех простых шагов:
- Чтение строки из диапазона;
- Генерация хеша текущей строки;
- Сравнение сгенерированнго хеша с целевым хешем. Если равны – отправить
результат (строку) серверу в виде сообщения о найденном пароле. Если не
равны – выполнить шаги 1-3; - В случае конца диапазона отправить результат взять новый диапазон для
перебора или завершить работу.
Код, выполняющий перебор, здесь рассматривать не будем, так как и он и
подробные комментарии к нему ждут тебя на
диске.
Общее
Очень часто люди с одинаковыми хобби соединяются в группы. Так и с добровольными распределенными вычислениями. Есть множество групп людей, которые соединяются по разным признакам — один университет, одна страна, просто понравилась группа. В Украине есть национальная команда, сайт которой distributed.org.ua. На сайте есть форум, где проводится обсуждение на разные темы и где можно получить более детальную информацию о каждом проекте. Такие же национальные команды есть и в России, и в Польше, и в Германии — во многих странах.
Для того чтобы было интереснее, люди устраивают соревнования — меряются тем, сколько полезной работы сделали и сколько очков (кредитов или Cobblestones) заработали. Количество очков зависит от производительности компьютера, от числа задействованных машин (можно под одним именем использовать несколько компьютеров) и времени, сколько компьютер может заниматься вычислениями. Некоторые проекты несколько раз в год проводят так называемые заезды или челленджи — когда соревнуются команды: кто из команд за определенный промежуток времени заработает больше всех кредитов.
“Недостатком” вашей такой помощи науки может служить увеличивающийся счет за электричество. Это и есть та малая плата, благодаря которой вы, сможете вместе с другими добровольцами победить болезни, решить сложные задачи и сформировать карту нашей Галактики. Возможно вы спросите, можно ли на этом зарабатывать? Нет, нельзя. Да, точно нельзя. Это волонтерская помощь. Безвозмездная.
В этом видео расскажу как подключиться к проекту добровольных распределенных вычислений