Jak vyvíjet pro Grid?

Webové služby jako prostředek pro vývoj

Jakmile se zaměříme na vývoj softwaru pro Grid, napadne nás hned několik otázek:

  • Jak vyřešit tak obrovskou heterogenitu prostředí ?
  • Jakým způsobem vyřešit komunikaci mezi jednotlivými komponentami gridu ?
  • Jak vyřešit problém komunikace mezi komponentami napsanými v jiných vývojových jazycích ?
  • Bude každá komponenta mít svůj vlastní protokol ? (počet protokolů bude nebezpečně vzrůstat bez existence jakékoliv standardizace)

Všechny tyto problémy řeší technologie zvaná Web services (Webové služby).

Potenciál webových služeb je obrovský. S jejich pomocí je snadné integrovat jednotlivé aplikace, které jsou často naprogramovány v mnoha různých programovacích jazycích a navíc jsou provozovány na nejrůznějších platformách. Webové služby, resp. otevřený standard XML (eXtensible Markup Language), který webové služby využívají, komunikaci mezi aplikací a klientem značně usnadňuje. Snahou stratégů webových služeb je dát uživatelům možnost přistupovat k potřebným informacím, a to kdykoliv a kdekoliv - a navíc z libovolného zařízení: nejen z běžného osobního počítače či notebooku, ale také z kapesního počítače a nebo mobilního telefonu. A protože mezi jednotlivými zařízeními jsou nemalé rozdíly, musí webové služby fungovat jako dokonale univerzální rozhraní mezi zdrojem dat a klientem.

Proto tvůrci gridu přišli s upravenou verzí webových služeb, kterou pojmenovali Open Grid Services Architecture (OGSA). Hlavním přínosem této architektury je WSRF (Web Service Resource Framework).

Webová služba je nominálně bezstavová, tzn. že si neponechává žádné data mezi voláním. WSRF poskytuje množinu operací, kterou webová služba může implementovat, aby se stala stavovou. Tj. klienti webové služby mohou komunikovat se službami zdrojů a tak získávat a ukládat data.

Jak WS fungují v praxi ?

Pro další postup je nezbytné dát krátký úvod, jak WS fungují, tak aby jsme mohli v konečné fázi webovou službu naimplementovat. Jak jsem již zmiňoval výše, síla WS je v tom, že jsou nezávislé na platformě a programovacím jazyku. Této vlastnosti je docíleno pomocí WSDL (Web Service Description Language). V praxi to znamená, že pokud objevíme nějakou webovou službu, tak je popsána tímto XML popisem, kterému každý rozumí.

V podstatě všechny operace webové služby můžeme popsat takto:

  • Procesy služby (Service Processes)

Do této kategorie patří např. objevení lokace služby či volání několika dalších služeb.

  • Popis služby (Service Description)

Do této kategorie patří již zmíněný popis služby pomocí nezávislého WSDL.

  • Volání služby (Service Invocation)

Do této kategorie patří předávání požadavků mezi klientem a službou. SOAP (Simple Object Access Protocol) specifikuje jak máme formátovat naše požadavky k serveru a jak server formátuje odpovědi.

  • Transport (Service Transport)

Do této kategorie spadá případ jak všechny tyto zprávy mají být přenášeny mezi klientem a serverem. Nejčastějším protokolem je HTTP.

Cyklus volání webové služby

V následujícím odstavci se dostaneme k tomu, jak bude celá služba fungovat a jak formulovat dotazy. Programátor webové služby se vždy soustředí jen na popis služby (pomocí WSDL) a logiky služby. SOAP kód je vždy automaticky generován. Tato práce je delegována softwaru, kterému se říká stub. Klient a server mají vygenerované stuby odděleně.

Nyní předpokládejme službu, kterou jsme již popsali pomocí WSDL. Volání služby proběhne v těchto krocích:

  1. Jakmile klient chce zavolat webovou službu, vždy musí zavolat klientský stub. Stub přeloží lokální volání do vhodného SOAP požadavku. (Nazýváno také jako tzv. marshaling )
  2. SOAP požadavek musí být přenesen na server pomocí HTTP protokolu. Server poté předá SOAP požadavek svému serverovému stubu a ten to přeloží do něčeho srozumitelného, čemu může služba rozumět.
  3. Jakmile proběhl tzv.unmarsheling, server zavolá implementaci služby, což je logika, kterou klient od začátku požaduje.
  4. Výsledek je opět předán serverovému stubu a překonvertován do SOAP odpovědi.
  5. SOAP odpověď je přenesena ke klientovi opět pomocí HTTP protokolu. Klientský stub provede unmarsheling a převede to do něčeho čemu bude klientská aplikace rozumět.
  6. Nakonec klientská aplikace obdrží výsledek svého volání webové služby.

Jak vytvořit jednoduchou WS pomocí GT4 ?

Z výše napsaného plyne důležitost webových služeb pro Grid a my si proto zkusíme jednoduchou webovou službu vytvořit pomocí WSRF Globus toolkitu 4.0, který je použit snad v každé komponentě gridu.

Pro další postup je důležitá alespoň základní znalost programovacího jazyka Java a XML. Základní software potřebný pro tento příklad je tedy následující:

Po naistalování těchto balíku je důležité nastavit následující proměnnou: <em class="error">TeX Embedding failed!</em>ANT_HOME. Po nadefinování těchto proměnných ještě nastavit proměnnou PATH, např.

  1. setenv PATH {<em class="error">TeX Embedding failed!</em>JAVA_HOME/bin:<em class="error">TeX Embedding failed!</em>GLOBUS_LOCATION/etc/globus-devel-env.csh

Poté provedeme kompilaci klienta:

  1. cd ..
  2. cd HelloWebService
  3. javac com/pjakl/HelloWorldService/client/Client.java

A následně můžeme klienta spustit a vyzkoušet požadovanou funkčnost:

  1. java com.pjakl.HelloWorldService.client.Client <a href="http://localhost:8080/wsrf/services/HelloWorldService" title="http://localhost:8080/wsrf/services/HelloWorldService">http://localhost:8080/wsrf/services/HelloWorldService</a> Pavel
  2. Hello Pavel !

Gratuluji k vytvoření vaší první gridové služby !!!