Розробка grid-додатків за допомогою інструментальних засобів з відкритими вихідними кодами (исходники), Вільне ПЗ, Програмні керівництва, статті

Компоненти з відкритими вихідними кодами


Спільнота прихильників відкритих вихідних кодів має і підтримує величезний діапазон інструментальних засобів і продуктів, які дуже легко можуть використовуватися в інтегрованих grid-середовищах. Інструментальні засоби з відкритими вихідними кодами охоплюють весь спектр різного програмного забезпечення і технологій, від операційних систем, таких як Linux і BSD, до повнофункціональних середовищ розробки на C / C + +, таких як GNU CC. Можна також отримати доступ до простих у використанні мов програмування сценаріїв, таким як Perl, а також до компонентів, наборам інструментальних програм і інтегрованим середах розробки, таким як Web-services tool kits від Apache або Eclipse Integrated Development Environment (IDE).


Ці компоненти можна використовувати індивідуально або спільно для створення grid-рішення, застосовуючи вбудовані рішення або переваги стандартизації grid-рішень, включаючи групу Web-сервісів WS-*, часто використовувану в середовищах розробки grid-додатків, таких як Globus.


Головною перевагою використання компонентів з відкритими вихідними кодами є простота доступу, розробки і розгортання. Оскільки програмне забезпечення надається вільно, можна використовувати, розгортати і пробувати різні рішення до тих пір, поки не знайдеться підходяще.


Іноді використання інструментальних засобів з відкритими вихідними кодами може також прискорити вирішення завдання. Причина цього полягає в тому, що подібні інструментальні засоби колективно розробляються групою людей, які можуть допрацьовувати і модифікувати оригінальний вихідний код. Це дозволяє знайти проблемний або занадто довго виконується компонент і виправити його код, щоб полегшити його використання або зробити його більш корисним.


Але, можливо, найважливіше полягає в тому, що для переважної більшості рішень з відкритими вихідними кодами можна вільно використовувати, змінювати і розширювати оригінальний код для власних потреб і вимог. Якщо вибране інструментальне засіб не надає потрібну інформацію, його функціональність зазвичай можна розширити, чого не можна сказати про більшість комерційних програм, або можна змінити оригінальний вихідний код для досягнення своїх цілей.


Майже завжди можна скористатися гнучкістю оригінального рішення для своїх потреб. Давайте почнемо розгляд функціональності і гнучкості, пропонованих найбільш поширеним рішенням – мовами програмування сценаріїв з відкритими вихідними кодами.


Використання мов сценаріїв


Основною областю, де можна скористатися перевагами моделі відкритих вихідних кодів, є мови сценаріїв. Такі мови як Perl, PHP, Python і Ruby надають широкий спектр функціональності і дозволяють швидко і легко розробляти програму, що може бути використано в розподіленому середовищі.


Мовою сценаріїв (через відсутність необхідності слідувати звичайної послідовності написання / компіляція / компоновка / виконання) розробку програми часто можна виконати набагато швидше, ніж на традиційному C / C + +. Більш того, всі мови сценаріїв надають бібліотеки та розширення для підключення до різних технологій Web-сервісів, таких як SOAP і XML-RPC, а це означає, що можна швидко розробити рішення, яке буде інтерфейсом до існуючої інфраструктури, або створити абсолютно нові Web-сервіси для підтримки grid-сервісу.


Web-сервіси часто є основною частиною сучасних Web-рішень. Web-сервіси надають багато переваг, таких як легке розгортання, гнучкість і сумісність. Наприклад, можна створити клієнта Web-сервісів на Perl:


Лістинг 1. Розробка клієнта Web-сервісів на Perl





#!/usr/bin/perl
use warnings;
use strict;
use SOAP::Lite;
print SOAP::Lite
-> uri(“http://snode1:32080/”)
-> proxy(“http://snode1:32080/?session=store”)
-> submit_image($image)
-> result;
print ”
“;

У даному прикладі, взятому з grid-рішення (написано на Perl) і реализующем систему зберігання фотографій (посилання на серію статей “Створення Grid з використанням Perl” наведено в розділі “Ресурси“), Ми використовуємо модуль SOAP::Lite для компонування SOAP-клієнта. В цьому випадку ми звертаємося до Web-сервісу на порт 32080 grid-сайту snode1 і передаємо зображення в систему.


Конфігурацію індивідуальних серверів в grid-рішенні можна спростити, використовуючи внутрішній хеш-тип Perl, як показано нижче.


Лістинг 2. Використання внутрішнього хеш-типу Perl





$node = {
“name” => “linux-grid-1”,
“type” => “snode”,
“remote => “snode1”,
“gridid” => “43729810-09399528-817022102”,
“grid” => “image-grid-1”,
“nodeid” => “57175600-10287415-53438102”,
“distributorid” => “”,
“distributor” => “”,
“verification-id” => “”,
};

Після передачі фотографії в grid ми використовуємо сгенерированную окремими вузлами інформацію для відстежування поточної доступності їх систем зберігання, вибору вузла і сериализации інформації (використовуючи Perl Dumper) в структуру, яку можна зберегти в базі даних.


Розподіл інформації з grid проводиться шляхом отримання списку поточних очікують запитів і обробки списку провайдерів (grid-вузлів), а потім використовується SOAP-інтерфейс для розподілу остаточної одиниці роботи на цільовий вузол. Пошук вузлів для існуючого елемента працює майже в зворотному порядку – ми передаємо пошуковий запит на кожен з відомих вузлів і об’єднуємо відповіді.


У лістингу 3 показаний інший приклад; на цей раз обчислювальний grid написаний повністю на Python. Для даного рішення ми використовували не тільки Web-сервіси, але також гнучкість мови Python як мови сценаріїв.


Для більшості обчислювальних grid-рішень необхідно розробити програму, що може виконувати обчислення і повертати результати. Використовуючи Python, можна розподілити Python-сценарій, що виконує обчислення. Замість обмежень функціональності, пропонованих автономним додатком, ми маємо повну гнучкість для виконання будь-якого Python-сценарію розподіленим чином.


Основою grid-функціональності є Web-сервіс, на цей раз використовує XML-RPC, який легше реалізувати. Python-модуль основного провайдера (grid-вузол) наведено нижче.


Лістинг 3. Обчислювальний grid на Python





import time,sys
sys.path.append(“..”)
import DWGrid
from xmlrpclib import Server
gridspec = DWGrid.DWGrid()
provider = DWGrid.DWGridProvider(gridspec,”sulaco”,”192.168.0.101″)
provider.register_component()
distributor = Server(gridspec.distributor)
def get_workunits():
global provider,gridspec
items = distributor.getworkunits(5)
counter = 0
for item in items:
gridspec.workunitqueue.add(item,”queue”,item[“_workunitid”])
counter = counter+1
return counter
def run_calculation(item):
workunit = provider.grid.workunitqueue.get(item,”queue”)
distributor.log_status(provider.name,1)
gridspec.workunitqueue.move(workunit[“_workunitid”],”queue”,”active”)
modulename = workunit[“calctype”]
try:
exec “import calculate_” + modulename + ” as calculate”
except:
(result,moduledata) = distributor.get_service_byname(modulename,”module”)
if (result == 0):
modulefile = open(“calculate_%s.py” % modulename,”w”)
modulefile.write(moduledata)
modulefile.close()
try:
exec “import calculate_” + modulename + ” as calculate”
except:
gridspec.workunitqueue.move(workunit[“_workunitid”],”active”,”queue”)
print “Error, module recovered from server does not load”
sys.exit(1)
else:
print “Error, module %s from server doesnt exist” % (modulename)
gridspec.workunitqueue.move(workunit[“_workunitid”],”active”,”queue”)
sys.exit(1)
distributor.log_event(“log”,provider.name,
“Starting Processing Workunit ID %s” % (item))
calcfunc = calculate.DWGridComputational()
result = calcfunc.execute(workunit[“args”])
distributor.log_event(“log”,provider.name,”Finished Processing
Workunit ID %s” % (item))
workunit[“result”] = result
gridspec.workunitqueue.move(workunit[“_workunitid”],”active”,”complete”)
gridspec.resultqueue.add(workunit,”queue”,workunit[“_workunitid”])
def put_results(items):
for resultid in items:
workunit = gridspec.resultqueue.get(resultid,”queue”)
gridspec.resultqueue.move(resultid,”queue”,”active”)
try:
distributor.putresult(workunit)
except:
gridspec.resultqueue.move(resultid,”active”,”queue”)
return
gridspec.resultqueue.move(resultid,”active”,”complete”)
while 1: # Перш за все, необхідно перевірити, чи є щось # В нашій черзі, що потрібно обчислити
items = provider.grid.workunitqueue.list(“queue”)
if len(items) > 0:
run_calculation(items[0])
else:
count = get_workunits()
if count == 0:
distributor.log_status(provider.name,0)
time.sleep(60)
continue
items = provider.grid.resultqueue.list(“queue”)
if len(items) > 0:
put_results(items)

Хоча цей лістинг може здатися страхітливим, ви бачите основні елементи, які виконують grid-компоненти:



Те, що все засноване на Python grid-рішення зайняло трохи більше 300 рядків коду і є досить гнучким для обробки різноманітних обчислювальних модулів і результатів, включаючи елементи реєстрації, розподілу та збору даних, демонструє, наскільки прискорюється розробка з використанням Python або інших рішень з відкритими вихідними кодами.


Бібліотеки та інтегровані середовища з відкритими вихідними кодами


Я вже описував, як переваги інструментальних засобів з відкритими вихідними кодами дозволяють змінювати для ваших потреб оригінальний код, але часто в цьому немає необхідності. Потрібна функціональність та інструментальні засоби часто вже доступні, не тому що вони вбудовані в оригінальне рішення, а тому що рішення часто більш гнучкі і розширюваність.


Перед розглядом деяких основних інтегрованих середовищ можна не згадати про базові бібліотеках і розширеннях, пропонованих багатьма мовами сценаріїв. Python і PHP поставляються з великим набором стандартних модулів і функціональністю, готовими до використання. Є також величезна кількість розширень сторонніх виробників. Perl має широко відому бібліотеку модулів Comprehensive Perl Archive Network (CPAN).


Існує кілька інтегрованих середовищ, створених за допомогою технології з відкритими вихідними кодами і комбінують функціональність багатьох різних компонентів в систему, яку можна використовувати для розробки та розгортання різних типів додатків. Хоча не всі розглянуті тут інтегровані середовища з відкритими вихідними кодами призначені для розробки grid-рішень, більшість з них можна адаптувати, змінити або використовувати в якості основи для розробки grid-рішень.


LAMP і його похідні


Оригінальна інтегрована середа LAMP, що позначає комплект, що складається з операційної системи Linux, HTTP-сервера Apache, бази даних MySQL і наборів інструментальних засобів PHP, використовувалася для створення Web-сайтів. З часом LAMP породила багато похідних продуктів. Наприклад, символ “P” часто використовувався для додаткового позначення заснованих на Perl і Python середовищ, або він міг замінюватися на “R” (LAMR) для позначення рішень Ruby або Ruby on Rails, а також на “J” для систем Java ™ / JSP.


“L” замінена для Windows – WAMP, яка трансформувалася в WIMP (Windows і IIS), SAMP (Solaris), MAMP (Mac OS X) і навіть BAMP (BSD). MySQL теж часто замінювалося на PostgreSQL (LAPP). Додавалися також комерційні інтегровані середовища і додатки, наприклад, акроніми WASP (Windows, Apache, SQL Server і PHP) і OPAL (Oracle).


Середа LAMP була призначена для розробки та розгортання Web-сайтів та використовувала деякі кращі окремі елементи в комбінації, в якій багато з них вже використовувалися. Хоча ця середу не призначалася для розробки grid-рішень, об’єднання цих окремих інструментальних засобів в один пакет може значно полегшити розробку і розгортання grid-рішень.


Ми можемо використовувати переваги кожного інструментального засобу для обробки різних частин типового grid-рішення:



Крім надання можливості швидкої розробки, використання LAMP або її похідних дозволяє легко і швидко виконувати розгортання. Більшість дистрибутивів Linux поставляється зі стандартним набором LAMP. Отже, створення grid-рішень, що використовують середу LAMP, часто зводиться до встановлення та налаштування окремих заснованих на Linux grid-вузлів і розгортання сценаріїв grid-додатки на цих вузлах.


Інструментальні засоби Apache Java


Хоча сама по собі Java не є системою з відкритими вихідними кодами, величезна кількість інструментальних засобів і бібліотек з відкритими вихідними кодами створено з використанням технології Java для забезпечення основної функціональності (наприклад, Web-сервісів), а також для створення деяких інструментальних засобів, специфічних для grid. Найважливіші з різних доступних інструментальних засобів пропонує Apache Software Foundation.


Apache розробила набір інструментальних засобів, які ми можемо використовувати при створенні інтегрованих grid-середовищ:



Комбінуючи ці сервіси і використовуючи функціональність, пропоновану різними заснованими на Web-сервісах рішеннями, можна легко створити grid-рішення.


Всі перераховані вище рішення є рішеннями з відкритими вихідними кодами. Проте вони строго контролюються і управляються організацією Apache Software Foundation – групою розробників і проектувальників, які гарантують збереження призначення і цілей вищевказаних рішень в індивідуальних проектах.


ActiveGrid


Система ActiveGrid не є, як випливає з назви, специфічною для grid інтегрованої середовищем розробки і розгортання. Не є вона й істинної системою з відкритими вихідними кодами. ActiveGrid – Це інтегрована середу, що дає можливість застосовувати LAMP при розробці додатків, які дозволяють використовувати grid-подібну технологію для розробки розподілених бізнес-додатків.


Система заснована на двох компонентах: ActiveGrid Application Builder для проектування і розробки програми та ActiveGrid Application Server, який можна використовувати для розгортання програми.


Суть полягає в розробці повнофункціональних додатків, що використовують перевагу інтегрованої grid-середовища, надаючи більш компактні, масштабовані компоненти, які можна використовувати для розробки більш компактних, відокремлених додатків.


Резюме


Ми розглянули переваги і недоліки розробки grid-рішення з використанням технології з відкритими вихідними кодами. Ключові моменти, які можна виділити в наведених в даній статті прикладах та інформації, – це простота використання і швидкість розробки. Використовуючи комбінацію інтегрованих середовищ швидкої розробки, пропонованих мовами сценаріїв і багатьма бібліотеками та рішеннями з відкритими вихідними кодами, можна дуже швидко і легко створити grid-рішення.


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*