ТехноСаратов → Блог

Грид и с чем его едятБлогПрограммирование

Начнем с того что же такое грид.

www.gridclub.ru/about:

Грид – географически распределенная инфраструктура, объединяющая множество ресурсов разных типов (проц… ессоры, долговременная и оперативная память, хранилища и базы данных, сети), доступ к которым пользователь может получить из любой точки, независимо от места их расположения. Грид предполагает коллективный разделяемый режим доступа к ресурсам и к связанным с ними услугам в рамках глобально распределенных виртуальных организаций, состоящих из предприятий и отдельных специалистов, совместно использующих общие ресурсы. В каждой виртуальной организации имеется своя собственная политика поведения ее участников, которые должны соблюдать установленные правила. Виртуальная организация может образовываться динамически и иметь ограниченное время существования.

Другими словами грид — это технология позволяющая из множества мало мощных компьютеров программным путем сделать много функциональный и мощный сервер или другую желаемую вычислительную систему.

Историческая справка:

Алгоритм шифрования данных (DES) был взломан с помощью огромной сети, состоящей из десятков тысяч компьютеров через 39 дней. Компьютер который подобрал нужный ключ был мощностью 90 мегагерц с 16мб оперативной памяти.

На сегодняшний день грид технологии имеют бурное развитие, так например в Церне (создатели большого адронного коллаидера) используется данная технология для обработки данных с датчиков, с которых скорость поступления данных ~700мб/сек.

На рынке представлено множество решений для написания программ поддерживающий данную концепцию, но хотелось бы остановиться на программном продукте GridGain. Плюсы гридгейна это бесплатность, открытый код, кросплатформеность, Питерская команда разработчиков (хоть и не ориентированна на русских разработчиков, да и как таковой российский рынок IT). Вот как они позиционируют сами себя:

GridGian:

GridGain – это вычислительный грид уровня предприятия, предназначенный для решения проблем организации вычислительных ресурсов, с целью их более полного использования и, как следствие, повышения эффективности всей системы в целом. За этой, на первый взгляд, «мудреной» фразой скрывается простой и дружественный продукт для распараллеливания различных вычислений. Причем продукт, изначально ориентированный для использования в бизнес приложениях с минимальным их изменением.

И так у GridGain не плохая архитектура с помощью которой его конфигурация представляется наиболее просто.

http://technosaratov.ru/galleries/29/397.jpg

В данной схеме представлены все возможности по кофигурированию. GridGain можно настроить для работы в локальной сети, в определенном диапазоне айпи адресов, в интернете, т.е. фактически для любых нужд. Конфигурация грида выполняется посредством Spring файла. GridGain поставляется в набором готовых конфигурационных файлов которые могут быть найдены в каталоге [GRIDGAIN_HOME]/config.

Итак как же можно выполнить наш код на гриде? GridGain предоставляет три различных способа выполнения нашего кода на риде:
1. Аннотация Gridify.
2. Executor service.
3. Пользовательские задачи и подзадачи.

Пример кода с @Gridify:

Но для обработки этой аннотации необходимо использовать какой либо framework,
поддерживающий аспектное программирование. И GridGain поддерживает и поставляет
конфигурацию для AspectJ, Jboss и Spring.
Например для использования AspectJ вам необходимо включить в пути классов каталог

и добавить в строку запуска AOP агента:

Пример кода с GridGain executor service:

Как видно из примера GridGain нода была получена из Spring файла и у нее спользован
executor service.
Вот сам Spring file:

В данном случае нода использует конфигурацию по умолчанию.

Наиболее интересный и гибкий способ это «Пользовательские задачи и подзадачи». Суть данного способа это разбиение всей задачи на два класса GridTask и GridJob, в GridTask задача разбивается на нужное множество подзадач, которые будут распределены на найдены ноды, а в GridJob описывается сама задача которую нужно выполнить.
Пример с GridTask и GridJob решает задачу нахождения числа Pi с помощью метода Монте-Карло.

MainMonteGrid.java

GridMonteTask.java

GridMontedJob.java

На моей Ubuntu OS с jdk 1.6.0_07 была замечена бага с работай функции System.getProperties(), которая не хотела возвращать переменные ОС в следствии чего не возможно было запускать программу, пришлось переписовать класс GridFactory и указывать в нем в явном виде домашнюю директорию с GridGain.

Источники.
GridGain
Число пи
Грид концепция