Jednoduché API pro gridové aplikace - Simple API for Grid Applications
Vývojáři | Centrum pro výpočty a technologie na LSU, Radikální skupina na Rutgersova univerzita, IN2P3 (Francie), a Vrije Universiteit (Amsterdam, Nizozemsko) |
---|---|
Napsáno | C ++, Krajta, Jáva |
Plošina | Cross-platform |
Typ | Grid computing, distribuované výpočty knihovna |
Licence | Zvyšte licenci softwaru, GPL |
webová stránka | sága-projekt |
The Jednoduché API pro gridové aplikace (SÁGA) je skupina souvisejících norem specifikovaných Otevřete Grid Forum definovat aplikační programovací rozhraní (API) pro běžné distribuované výpočty funkčnost.
Přehled
Specifikace SAGA pro distribuované výpočty původně sestávala z jediného dokumentu GFD.90, který byl vydán v roce 2009.
SAGA API neusiluje o nahrazení Globus nebo podobné grid computing systémy middlewaru, a nezaměřuje se na vývojáře middlewaru, ale na vývojáře aplikací bez zázemí v gridových výpočtech. Tito vývojáři si obvykle přejí věnovat svůj čas svým vlastním cílům a minimalizovat čas strávený funkcí kódování infrastruktury. API izoluje vývojáře aplikací od middlewaru.
Specifikace služeb a protokoly pro jejich interakci jsou mimo rámec SAGA. Spíše API usiluje o skrytí podrobností o jakékoli infrastruktuře služeb, které mohou nebo nemusí být použity k implementaci funkcí, které vývojář aplikace potřebuje. API se však shoduje se všemi standardy middlewaru v rámci Otevřete Grid Forum (OGF).[1]
API SAGA definovalo mechanismus k určení dalšího API balíčky které rozšiřují jeho rozsah. Samotné API SAGA Core definuje řadu balíčků: správu úloh, správu souborů, správu replik, vzdálená volání procedur a streamy. SAGA pokrývá nejdůležitější a nejčastěji používané distribuované funkce a je podporována a dostupná ve všech hlavních distribučních soustavách - Extrémní prostředí pro objevování vědy a techniky (XSEDE), EGI a FutureGrid. SAGA podporuje nejen širokou škálu distribuovaných modelů programování a koordinace, ale je také snadno rozšiřitelný pro podporu nového a vznikajícího middlewaru.[2][3]
Standardizace
API SAGA je standardizováno v pracovní skupině SAGA Otevřete Grid Forum.[4] Na základě sady případů použití[5],[6] specifikace SAGA Core API[7] definuje sadu obecných principů API („SAGA Look and Feel“ a sadu API balíčků, které vykreslují běžně používané vzory programování mřížky (správa úloh, správa souborů a přístup, správa replik atd.) Je třeba definovat další balíčky API a jejich vztah k Core API ak jeho „vzhledu a chování“. Na základě toho byla definována řada rozšíření API, které jsou v různých stavech procesu standardizace.[8][9][10][11]
Všechny specifikace SAGA jsou definovány v (příchuť) IDL, a tedy objektově orientovaný, ale jazykově neutrální. Existují různé jazykové vazby (Java, C ++, Python), ale v tomto okamžiku nejsou standardizované. Nicméně různé implementace těchto jazykových vazeb mají relativně koherentní definici API (zejména různé implementace Java sdílejí stejné abstraktní třídy API).
Část „Vzhled a chování“ specifikace SAGA Core API pokrývá následující oblasti:
- zabezpečení a správa relací
- správa oprávnění
- asynchronní operace
- monitorování
- asynchronní oznámení
- správa atributů
- Správa I / O vyrovnávací paměti
Architektura
SAGA je navržen jako objektově orientovaný rozhraní. Zapouzdřuje související funkce do sady objektů, které jsou seskupeny do funkčních jmenné prostory, které se nazývají balíčky v SAGA. Základní implementace SAGA definuje následující balíčky:[12]
- saga :: advert - rozhraní pro Reklamní služba přístup
- saga :: filesystem - rozhraní pro přístup k souborům a adresářům
- saga :: job - rozhraní pro definici, správu a kontrolu úloh
- saga :: namespace - abstraktní rozhraní (používané rozhraním reklamy, souborového systému a repliky)
- saga :: replica - rozhraní pro replika řízení
- saga :: rpc - rozhraní pro vzdálené volání procedur klient a servery
- saga :: sd- rozhraní pro objev služby v distribuovaných prostředích
- saga :: stream - rozhraní pro klienta a servery pro datový proud
Celková architektura SAGA navazuje na vzor adaptéru, a vzor návrhu softwaru který se používá k překladu jednoho rozhraní do druhého. V SAGA překládá volání z balíčků API na rozhraní podkladového middlewaru. Systém run-time SAGA používá pozdní vazba rozhodnout v run-time který zapojit (middlewarový adaptér) načíst a svázat.[13]
Podporovaný middleware
V následující tabulce je uveden seznam distribuovaných systémů middlewaru, které jsou aktuálně podporovány společností SAGA. Sloupec označen Sada adaptérů pojmenuje kolekci (balíček vydání) (sady) adaptérů middlewaru, který poskytuje podporu systému middlewaru.
Middleware systém | Sada adaptérů SAGA | Obor názvů SAGA API |
---|---|---|
Amazon EC2 | saga-adaptéry-aws | sága :: práce |
Kondor | saga-adaptéry-kondor | sága :: práce |
Eukalyptus | saga-adaptéry-aws | sága :: práce |
Globus GRAM (2 a 5) | saga-adapters-globus | sága :: práce |
Globus GridFTP | saga-adapters-globus | saga :: souborový systém |
Globus RLS | saga-adapters-globus | sága :: replika |
HDFS | saga-adaptéry-hdfs | saga :: soubor |
Místní souborový systém | část jádra ságy | saga :: soubor |
Místní vidlice | část jádra ságy | sága :: práce |
Nimbus | saga-adaptéry-aws | sága :: práce |
PBS (Pro) | saga-adaptéry-pbs | sága :: práce |
Platforma LSF | saga-adapters-lsf | sága :: práce |
SQL Reklamní služba | část jádra ságy | saga :: inzerát |
SQL Replická služba | část jádra ságy | sága :: replika |
SSHFS | saga-adapters-ssh | saga :: soubor |
SSH | saga-adapters-ssh | sága :: práce |
TOČIVÝ MOMENT | saga-adaptéry-točivý moment | sága :: práce |
Implementace
Protože definice rozhraní SAGA nejsou vázány na žádný konkrétní programovací jazyk, existuje několik implementací standardů SAGA v různých programovacích jazycích. Kromě implementačního jazyka se navzájem liší svou úplností, pokud jde o standardní pokrytí, a také podporou distribuovaného middlewaru.
SAGA C ++
SAGA C ++ byla první úplná implementace specifikace SAGA Core napsaná v C ++. Aktuálně implementace C ++ není v aktivním vývoji.
RADICAL-SAGA (Python)
RADICAL-SAGA je lehký balíček Pythonu, který implementuje části OGF GFD.90 specifikace rozhraní a poskytuje moduly plug-in pro různé distribuované systémy a služby middlewaru. RADICAL-SAGA implementuje nejběžněji používané funkce GFD.90 na základě rozsáhlé analýzy případových studií a zaměřuje se na použitelnost a jednoduché nasazení v reálných heterogenních distribuovaných výpočetních prostředích a aplikačních scénářích. RADICAL-SAGA v současné době implementuje úlohy a základní rozhraní API pro správu souborů, stejně jako rozšíření API pro správu prostředků. RADICAL-SAGA poskytuje zásuvné moduly pro různé distribuované systémy a služby middlewaru, včetně podpory pro PBS, Sun Grid Engine, SSH, SFTP a další. RADICAL-SAGA lze použít k vývoji distribuovaných aplikací a rámců, které běží na distribuované kybernetické infrastruktuře včetně XSEDE, LONI a FutureGrid, další mraky a místní klastry.
JavaSAGA
JavaSAGA je Java implementace SAGA. Tento stav JavaSAGA zůstává nejistý.
import java.util.io. *int hlavní (int argc, char** argv){ jmenný prostor sa = sága::atributy; jmenný prostor sja = sága::práce::atributy; Snaž se { sága::práce::popis jd; jd.set_attribute (sja::description_executable, „/ home / user / hello-mpi“); jd.set_attribute (sja::description_output, „/home/user/hello.out“); jd.set_attribute (sja::description_error, „/home/user/hello.err“); // Deklarovat to jako úlohu ve stylu MPI jd.set_attribute (sja::description_spmd_variation, "mpi"); // Název fronty, kterou chceme použít jd.set_attribute (sja::description_queue, "kontrolní"); jd.set_attribute (sja::description_spmd_variation, "mpi"); // Počet procesorů, které mají být vyžádány jd.set_attribute (sja::description_number_of_proceses, "32"); sága::práce::servis js(„gram: //my.globus.host/jobmanager-pbs“); sága::práce::práce j = js.create_job(jd); j.běh() } chytit(sága::výjimka konst & E) { std::cerr << "SAGA výjimka chycena:" << E.co() << std::konec; }}
jSAGA
jSAGA je další implementace Java specifikace SAGA Core. jSAGA je v současné době v aktivním vývoji.
DESHL
The DESHL (DEISA Services for Heterogeneous management Layer), poskytuje funkce pro odesílání a správu výpočetních úloh v rámci DEISA. DESHL je implementován jako sada nástrojů příkazového řádku nad API inspirovaným SAGA implementovaným v Javě. Na zadní straně je rozhraní s HiLA, obecnou knihovnou klienta pro přístup k mřížce, která je součástí UNICORE Systém.
Příklady
Zadání úlohy
Typickým úkolem v distribuované aplikaci je odeslat a práce na místní nebo vzdálený správce distribuovaných zdrojů. SAGA poskytuje API na vysoké úrovni s názvem balíček práce pro tohle. Následující dva jednoduché příklady ukazují, jak lze rozhraní API balíčku úloh SAGA použít k odeslání Rozhraní pro předávání zpráv (MPI) úloha ke vzdálenému správci prostředků Globus GRAM.
C ++
#zahrnout <saga/saga.hpp>int hlavní (int argc, char** argv){ jmenný prostor sa = sága::atributy; jmenný prostor sja = sága::práce::atributy; Snaž se { sága::práce::popis jd; jd.set_attribute (sja::description_executable, „/ home / user / hello-mpi“); jd.set_attribute (sja::description_output, „/home/user/hello.out“); jd.set_attribute (sja::description_error, „/home/user/hello.err“); // Deklarovat to jako úlohu ve stylu MPI jd.set_attribute (sja::description_spmd_variation, "mpi"); // Název fronty, kterou chceme použít jd.set_attribute (sja::description_queue, "kontrolní"); jd.set_attribute (sja::description_spmd_variation, "mpi"); // Počet procesorů, které mají být vyžádány jd.set_attribute (sja::description_number_of_proceses, "32"); sága::práce::servis js(„gram: //my.globus.host/jobmanager-pbs“); sága::práce::práce j = js.create_job(jd); j.běh() } chytit(sága::výjimka konst & E) { std::cerr << "SAGA výjimka chycena:" << E.co() << std::konec; }}
Krajta
#! / usr / bin / env python3import sysimport časimport blaženost. sága tak jako ságadef hlavní(jobno: int, zasedání, služba práce) -> Žádný: bfast_base_dir = sága.URL(„sftp: //india.futuregrid.org/N/u/oweidner/software/bfast/“) Snaž se: pracovní adresář = "% s/ tmp / běh /% s" % (bfast_base_dir.cesta, str(int(čas.čas()))) basedir = sága.souborový systém.Adresář(bfast_base_dir, zasedání=zasedání) basedir.make_dir(pracovní adresář) jd = sága.práce.Popis() jd.wall_time_limit = 5 # čas na zeď v minutách jd.total_cpu_count = 1 jd.životní prostředí = {'BFAST_DIR': bfast_base_dir.cesta} jd.working_directory = pracovní adresář jd.spustitelný = '$ BFAST_DIR / bin / bfast' jd.argumenty = ['zápas', '-A 1', '-r $ BFAST_DIR / data / small / reads_5K / reads.10.fastq', '-f $ BFAST_DIR / data / small / reference / hg_2122.fa'] moje práce = js.create_job(jd) moje práce.běh() tisk("Práce #% s začal s ID '% s'a pracovní adresář:'% s'" % (jobno, moje práce.jobid, pracovní adresář)) moje práce.Počkejte() tisk("Práce #% s s ID '% s'dokončeno (RC: % s). Výstup k dispozici v:% s'" % (jobno, moje práce.jobid, moje práce.výstupní kód, pracovní adresář)) basedir.zavřít() až na sága.Výjimka, např: tisk(F"Během provádění úlohy došlo k chybě: {ex}") sys.výstup(-1)-li __název__ == "__hlavní__": exekuční_hostitel = sága.URL(„pbs + ssh: //india.futuregrid.org“) ctx = sága.Kontext() ctx.typ = sága.Kontext.SSH ctx.uživatelské ID = 'oweidner' # jako 'ssh username @ host ...' ctx.uživatelský klíč = „/Users/oweidner/.ssh/rsa_work“ # like ssh -i ... ' zasedání = sága.Zasedání() zasedání.kontexty.připojit(ctx) js = sága.práce.Servis(exekuční_hostitel, zasedání) pro i v rozsah(0, 4): hlavní(i, zasedání, js)
Granty
Práce související s projektem SAGA jsou financovány z těchto grantů:NSF-CHE 1125332 (CDI), NSF-EPS 1003897 (LaSIGMA), NSF-OCI 1007115 (ExTENCI). Předchozí granty zahrnují: NSF-OCI 0710874 (HPCOPS), číslo grantu NIH P20RR016456 a číslo grantu UK EPSRC GR / D0766171 / 1 prostřednictvím OMII-UK
externí odkazy
- SAGA-Bliss - implementace SAGA v Pythonu
- jSAGA - Java implementace SAGA
- SAGA C ++ - C ++ implementace SAGA
- SAGA-GLib - Vala implementace SAGA pro GLib
- PROJEKT SAGA
- POSIX
Poznámky
- ^ T. Goodale, S. Jha, H. Kaiser, T. Kielmann, P. Kleijer, A. Merzky, J. Shalf a C.Smith, Simple API for Grid Applications (SAGA), OGF Document Series 90,http://www.ogf.org/documents/GFD.90.pdf
- ^ SAGA: Simple API for Grid applications, High-Level Application Programming on the Grid Tom Goodale, Shantenu Jha, Harmut Kaiser, Thilo Kielmann, Pascal K leijer, Gregor von Laszewski, Craig Lee, Andre Merzky, Hrabri Rajic, John Shalf Computational Methods in Science and Technology, roč. 12 # 1, 2006
- ^ Interoperabilita sítí na aplikační úrovni s využitím SAGA Shantenu Jha, Hartmut Kaiser, Andre Merzky, Ole Weidner E-SCIENCE ’07: Proceedings of the Third IEEE International Conference on e-Science and Grid Computing (e-Science 2007), 2007
- ^ http://redmine.ogf.org/projects/saga-wg
- ^ Shantenu Jha, Andre Merzky: „Sbírka případů použití pro jednoduché API pro gridové aplikace“, Informační dokument OGF, GFD.70 (pdf)
- ^ Shantenu Jha, Andre Merzky: „Analýza požadavků pro jednoduché API pro gridové aplikace“, Informační dokument OGF, GFD.71 (pdf)
- ^ Tom Goodale, Shantenu Jha, Hartmut Kaiser, Thilo Kielmann, Pascal Kleijer, Andre Merzky, John Shalf, Chris Smith: „Simple API for Grid Applications (SAGA)“, dokument doporučení OGF, GFD.90
- ^ Steve Fisher, Anthony Wilson, Arumugam Paventhan: „Rozšíření SAGA API: Service Discovery API“, dokument doporučení OGF, GFD.144 (pdf)
- ^ Andre Merzky: „Rozšíření SAGA API: Advert API“, dokument doporučení OGF, GFD.177 (pdf)
- ^ Andre Merzky: „Rozšíření SAGA API: Message API“, dokument doporučení OGF, GFD.178 (pdf)
- ^ Steve Fisher, Anthony Wilson: „Rozšíření SAGA API: Information System Navigator API“, dokument doporučení OGF, GFD.195 (pdf)
- ^ Referenční API SAGA C ++ (dokumentace) [1].
- ^ SAGA: Jak to funguje (na Vimeo) [2].