Простой API для Grid-приложений
Разработчик(и) | Центр вычислений и технологий LSU IN2P3 , RADICAL Group в Университете Рутгерса , (Франция) и Vrije Universiteit (Амстердам, Нидерланды) |
---|---|
Написано в | С++ , Питон , Ява |
Платформа | Кросс-платформенный |
Тип | Грид-вычисления , распределенных вычислений библиотека |
Лицензия | Лицензия на программное обеспечение Boost , GPL |
Веб-сайт | сага-проект |
Simple API for Grid-приложения ( SAGA ) — это семейство связанных стандартов, определенных Open Grid Forum для определения интерфейса прикладного программирования (API) для общих функций распределенных вычислений .
Обзор
[ редактировать ]Спецификация SAGA для распределенных вычислений изначально состояла из одного документа GFD.90, выпущенного в 2009 году.
SAGA API не стремится заменить Globus или аналогичные системы промежуточного программного обеспечения для грид-вычислений и предназначен не для разработчиков промежуточного программного обеспечения, а для разработчиков приложений, не имеющих опыта работы в грид-вычислениях. Такие разработчики обычно желают посвятить свое время своим собственным целям и свести к минимуму время, затрачиваемое на кодирование функциональности инфраструктуры. API изолирует разработчиков приложений от промежуточного программного обеспечения.
Спецификация сервисов и протоколов взаимодействия с ними выходит за рамки SAGA. Скорее, API стремится скрыть детали любых сервисных инфраструктур, которые могут или не могут использоваться для реализации функциональности, необходимой разработчику приложения. Однако API соответствует всем стандартам промежуточного программного обеспечения Open Grid Forum (OGF). [1]
SAGA API определил механизм указания дополнительных пакетов API , которые расширяют его область действия. Сам SAGA Core API определяет ряд пакетов: управление заданиями, управление файлами, управление репликами, удаленные вызовы процедур и потоки. SAGA охватывает наиболее важные и часто используемые распределенные функции и поддерживается и доступна во всех основных грид-системах — Extreme Science and Engineering Discovery Environment (XSEDE), EGI и FutureGrid. SAGA не только поддерживает широкий спектр моделей распределенного программирования и координации, но также легко расширяется для поддержки нового и появляющегося промежуточного программного обеспечения. [2] [3]
Стандартизация
[ редактировать ]API SAGA стандартизирован в рабочей группе SAGA на форуме Open Grid . [4] На основе набора сценариев использования [5] , [6] спецификация SAGA Core API [1] определяет набор общих принципов API («Внешний вид SAGA» и набор пакетов API, которые отображают часто используемые шаблоны программирования Grid (управление заданиями, управление файлами и доступом, управление репликами и т. д.). Спецификация SAGA Core также определяет, как должны быть определены дополнительные пакеты API, а также то, как они связаны с базовым API и его «внешним видом». На основе этого был определен ряд расширений API, которые находятся на различных стадиях процесса стандартизации. [7] [8] [9] [10]
Все спецификации SAGA определены в (разновидности) IDL и, следовательно, объектно-ориентированы, но нейтральны к языку. Существуют различные языковые привязки (Java, C++, Python), но на данный момент они не стандартизированы. Тем не менее, различные реализации этих языковых привязок имеют относительно согласованное определение API (в частности, разные реализации Java используют одни и те же абстрактные классы API).
Часть спецификации SAGA Core API «Внешний вид» охватывает следующие области:
- безопасность и управление сеансами
- управление разрешениями
- асинхронные операции
- мониторинг
- асинхронные уведомления
- управление атрибутами
- Управление буфером ввода-вывода
Архитектура
[ редактировать ]SAGA спроектирован как объектно-ориентированный интерфейс. Он инкапсулирует связанные функциональные возможности в наборе объектов, которые сгруппированы в функциональные пространства имен называются пакетами , которые в SAGA . Основная реализация SAGA определяет следующие пакеты: [11]
- saga::advert - интерфейс для к рекламному сервису доступа
- saga::filesystem - интерфейс для доступа к файлам и каталогам
- saga::job - интерфейс для определения заданий, управления и контроля
- saga::namespace — абстрактный интерфейс (используется интерфейсами рекламы, файловой системы и реплики)
- saga::replica - интерфейс для репликами управления
- saga::rpc - интерфейс для удаленных вызовов процедур клиента и серверов
- saga::sd — интерфейс для обнаружения сервисов в распределенных средах
- saga::stream - интерфейс для клиента и серверов потока данных
Общая архитектура SAGA соответствует шаблону адаптера — шаблону проектирования программного обеспечения , который используется для преобразования одного интерфейса в другой. В SAGA он преобразует вызовы из пакетов API в интерфейсы базового промежуточного программного обеспечения. Система времени выполнения SAGA использует позднее связывание решить, , чтобы во время выполнения какой плагин ( адаптер промежуточного программного обеспечения ) загрузить и привязать. [12]
Поддерживаемое промежуточное программное обеспечение
[ редактировать ]В следующей таблице перечислены распределенные системы промежуточного программного обеспечения, которые в настоящее время поддерживаются SAGA. В столбце « Набор адаптеров» указывается коллекция (выпускной пакет) адаптеров промежуточного программного обеспечения, обеспечивающих поддержку системы промежуточного программного обеспечения.
Система промежуточного программного обеспечения | Комплект адаптеров SAGA | Пространство имен SAGA API |
---|---|---|
Амазон EC2 | сага-адаптеры-AWS | сага::работа |
Кондор | сага-адаптеры-кондор | сага::работа |
Эвкалипт | сага-адаптеры-AWS | сага::работа |
Глобус ГРАМ (2 и 5) | сага-адаптеры-глобус | сага::работа |
Глобус ГридFTP | сага-адаптеры-глобус | сага::файловая система |
Глобус РЛС | сага-адаптеры-глобус | сага::реплика |
HDFS | сага-адаптеры-hdfs | сага::файл |
Локальная файловая система | часть ядра саги | сага::файл |
Локальная вилка | часть ядра саги | сага::работа |
Облако | сага-адаптеры-AWS | сага::работа |
ПБС (Про) | сага-адаптеры-PBS | сага::работа |
Платформа ЛСФ | сага-адаптеры-LSF | сага::работа |
SQL- рекламы Служба | часть ядра саги | сага::реклама |
SQL Служба реплики | часть ядра саги | сага::реплика |
СШФС | сага-адаптеры-ssh | сага::файл |
SSH | сага-адаптеры-ssh | сага::работа |
МОМЕНТ | сага-адаптеры-крутящий момент | сага::работа |
Реализации
[ редактировать ]Поскольку определения интерфейса SAGA не привязаны к какому-либо конкретному языку программирования, существует несколько реализаций стандартов SAGA на разных языках программирования. Помимо языка реализации, они отличаются друг от друга полнотой стандартного покрытия, а также поддержкой распределенного промежуточного программного обеспечения.
САГА С++
[ редактировать ]САГА С++ [13] была первой полной реализацией спецификации SAGA Core, написанной на C++. В настоящее время реализация C++ не находится в активной разработке.
РАДИКАЛ-САГА(Питон)
[ редактировать ]РАДИКАЛ-САГА [14] — это легкий пакет Python, реализующий части OGF GFD.90. [1] спецификацию интерфейса и предоставляет плагины для различных распределенных систем и сервисов промежуточного программного обеспечения. RADICAL-SAGA реализует наиболее часто используемые функции GFD.90 на основе обширного анализа вариантов использования и фокусируется на удобстве использования и простоте развертывания в реальных гетерогенных распределенных вычислительных средах и сценариях приложений. RADICAL-SAGA в настоящее время реализует задание и основные API-интерфейсы управления файлами, а также расширение API-интерфейса управления ресурсами. RADICAL-SAGA предоставляет плагины для различных распределенных систем и сервисов промежуточного программного обеспечения, включая поддержку PBS , Sun Grid Engine , SSH , SFTP и других. RADICAL-SAGA можно использовать для разработки распределенных приложений и инфраструктур, работающих на распределенной киберинфраструктуре, включая XSEDE, [15] ЛОНИ и FutureGrid, [16] другие облака и локальные скопления.
ЯВАСАГА
[ редактировать ]JavaSAGA — это Java-реализация SAGA. Этот статус JavaSAGA остается неопределенным.
import java.util.io.*
int main (int argc, char** argv)
{
namespace sa = saga::attributes;
namespace sja = saga::job::attributes;
try
{
saga::job::description 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");
// Declare this as an MPI-style job
jd.set_attribute (sja::description_spmd_variation, "mpi");
// Name of the queue we want to use
jd.set_attribute (sja::description_queue, "checkpt");
jd.set_attribute (sja::description_spmd_variation, "mpi");
// Number of processors to request
jd.set_attribute (sja::description_number_of_processes, "32");
saga::job::service js("gram://my.globus.host/jobmanager-pbs");
saga::job::job j = js.create_job(jd);
j.run()
}
catch(saga::exception const & e)
{
std::cerr << "SAGA exception caught: " << e.what() << std::endl;
}
}
jSAGA
[ редактировать ]jSAGA [17] это еще одна Java-реализация спецификации SAGA Core. jSAGA в настоящее время находится в стадии активной разработки.
ДЭШЛ
[ редактировать ]ДЭШЛ [18] (DEISA Services for Heterogeneous Management Layer) обеспечивает функциональные возможности для отправки и управления вычислительными заданиями в DEISA . DESHL реализован как набор инструментов командной строки поверх API-интерфейса SAGA, реализованного на Java. На внутренней стороне он взаимодействует с HiLA, общей клиентской библиотекой доступа к сети, которая является частью системы UNICORE .
Примеры
[ редактировать ]Отправка вакансии
[ редактировать ]Типичная задача распределенного приложения — отправить задание локальному или удаленному менеджеру распределенных ресурсов . Для этого SAGA предоставляет API высокого уровня, называемый пакетом заданий . Следующие два простых примера показывают, как API пакета заданий SAGA можно использовать для отправки задания интерфейса передачи сообщений (MPI) удаленному менеджеру ресурсов Globus GRAM.
С++
[ редактировать ]#include <saga/saga.hpp>
int main (int argc, char** argv)
{
namespace sa = saga::attributes;
namespace sja = saga::job::attributes;
try
{
saga::job::description 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");
// Declare this as an MPI-style job
jd.set_attribute (sja::description_spmd_variation, "mpi");
// Name of the queue we want to use
jd.set_attribute (sja::description_queue, "checkpt");
jd.set_attribute (sja::description_spmd_variation, "mpi");
// Number of processors to request
jd.set_attribute (sja::description_number_of_processes, "32");
saga::job::service js("gram://my.globus.host/jobmanager-pbs");
saga::job::job j = js.create_job(jd);
j.run()
}
catch(saga::exception const & e)
{
std::cerr << "SAGA exception caught: " << e.what() << std::endl;
}
}
Питон
[ редактировать ]#!/usr/bin/env python3
import sys
import time
import bliss.saga as saga
def main(jobno: int, session, jobservice) -> None:
bfast_base_dir = saga.Url("sftp://india.futuregrid.org/N/u/oweidner/software/bfast/")
try:
workdir = "%s/tmp/run/%s" % (bfast_base_dir.path, str(int(time.time())))
basedir = saga.filesystem.Directory(bfast_base_dir, session=session)
basedir.make_dir(workdir)
jd = saga.job.Description()
jd.wall_time_limit = 5 # wall-time in minutes
jd.total_cpu_count = 1
jd.environment = {"BFAST_DIR": bfast_base_dir.path}
jd.working_directory = workdir
jd.executable = "$BFAST_DIR/bin/bfast"
jd.arguments = ["match", "-A 1",
"-r $BFAST_DIR/data/small/reads_5K/reads.10.fastq",
"-f $BFAST_DIR/data/small/reference/hg_2122.fa"]
myjob = js.create_job(jd)
myjob.run()
print("Job #%s started with ID '%s' and working directory: '%s'"
% (jobno, myjob.jobid, workdir))
myjob.wait()
print("Job #%s with ID '%s' finished (RC: %s). Output available in: '%s'"
% (jobno, myjob.jobid, myjob.exitcode, workdir))
basedir.close()
except saga.Exception, ex:
print(f"An error occurred during job execution: {ex}")
sys.exit(-1)
if __name__ == "__main__":
execution_host = saga.Url("pbs+ssh://india.futuregrid.org")
ctx = saga.Context()
ctx.type = saga.Context.SSH
ctx.userid = "oweidner" # like 'ssh username@host ...'
ctx.userkey = "/Users/oweidner/.ssh/rsa_work" # like ssh -i ...'
session = saga.Session()
session.contexts.append(ctx)
js = saga.job.Service(execution_host, session)
for i in range(0, 4):
main(i, session, js)
Гранты
[ редактировать ]Работа, связанная с проектом SAGA, финансируется за счет следующих грантов: NSF-CHE 1125332 (CDI), [19] NSF-EPS 1003897 (LaSIGMA), [20] NSF-OCI 1007115 (ExTENCI). [21] Предыдущие гранты включают: NSF-OCI 0710874 (HPCOPS), номер гранта NIH P20RR016456 и номер гранта EPSRC Великобритании GR/D0766171/1 через OMII-UK. [22]
Внешние ссылки
[ редактировать ]- SAGA-Bliss — реализация SAGA на Python.
- jSAGA — Java-реализация SAGA.
- SAGA C++ — реализация SAGA на языке C++.
- SAGA-GLib — реализация SAGA для GLib на языке Vala.
- САГА ПРОЕКТ
- ПОСИКС
Примечания
[ редактировать ]- ^ Jump up to: а б с Т. Гудейл; С. Джа; Х. Кайзер; Т. Кильманн; П. Клейер; А. Мерзкий; Дж. Шальф; К. Смит. «Простой API для Grid-приложений (SAGA)» (PDF ) Серия документов OGF 90 .
- ^ SAGA: Простой API для Grid-приложений, высокоуровневое программирование приложений в Grid. Том Гудэйл, Шантену Джа, Хармут Кайзер, Тило Кильманн, Паскаль Клейер, Грегор фон Лашевски, Крэйг Ли, Андре Мерцки, Храбри Раич, Джон Шальф Вычислительные методы в науке и технике, вып. 12 № 1, 2006 г.
- ^ Взаимодействие с сетями на уровне приложения с использованием SAGA. Шантену Джа, Хартмут Кайзер, Андре Мерцки, Оле Вейднер E-SCIENCE '07: материалы Третьей международной конференции IEEE по электронной науке и грид-вычислениям (e-Science 2007), 2007 г.
- ^ «Обзор — SAGA WG — Форум Open Grid» .
- ^ Шантену Джа, Андре Мерцки: «Сборник вариантов использования простого API для грид-приложений», информационный документ OGF, GFD.70 (pdf)
- ^ Шантену Джа, Андре Мерцки: «Анализ требований к простому API для Grid-приложений», информационный документ OGF, GFD.71 (pdf)
- ^ Стив Фишер, Энтони Уилсон, Арумугам Павентан: «Расширение API SAGA: API обнаружения сервисов», рекомендательный документ OGF, GFD.144 (pdf)
- ^ Андре Мерцки: «Расширение API SAGA: API рекламы», рекомендательный документ OGF, GFD.177 (pdf)
- ^ Андре Мерцки: «Расширение API SAGA: API сообщений», рекомендательный документ OGF, GFD.178 (pdf)
- ^ Стив Фишер, Энтони Уилсон: «Расширение API SAGA: API навигатора информационной системы», рекомендательный документ OGF, GFD.195 (pdf)
- ^ «Справочный API SAGA C++ (документация)» .
- ^ «САГА: Как это работает» . www.vimeo.com .
- ^ «САГА С++» .
- ^ «РАДИКАЛ-САГА» .
- ^ «Спасибо за интерес к XSEDE» .
- ^ «Будущая сетка» . Архивировано из оригинала 25 ноября 2010 г.
- ^ «ДжСАГА» .
- ^ «ДЕШЛ» . Архивировано из оригинала 8 июня 2012 г.
- ^ NSF-CHE 1125332 (CDI)
- ^ NSF-EPS 1003897 (LaSIGMA)
- ^ NSF-OCI 1007115 (ExTENCI)
- ^ OMII-Великобритания