Jump to content

Простой API для Grid-приложений

(Перенаправлено с SAGA (компьютеры) )
Простой API для Grid-приложений
Разработчик(и) Центр вычислений и технологий LSU IN2P3 , RADICAL Group в Университете Рутгерса , (Франция) и Vrije Universiteit (Амстердам, Нидерланды)
Написано в С++ , Питон , Ява
Платформа Кросс-платформенный
Тип Грид-вычисления , распределенных вычислений библиотека
Лицензия Лицензия на программное обеспечение Boost , GPL
Веб-сайт сага-проект .org

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 C++/Python: легкая система выполнения распределяет вызовы 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 [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]

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Jump up to: а б с Т. Гудейл; С. Джа; Х. Кайзер; Т. Кильманн; П. Клейер; А. Мерзкий; Дж. Шальф; К. Смит. «Простой API для Grid-приложений (SAGA)» (PDF ) Серия документов OGF 90 .
  2. ^ SAGA: Простой API для Grid-приложений, высокоуровневое программирование приложений в Grid. Том Гудэйл, Шантену Джа, Хармут Кайзер, Тило Кильманн, Паскаль Клейер, Грегор фон Лашевски, Крэйг Ли, Андре Мерцки, Храбри Раич, Джон Шальф Вычислительные методы в науке и технике, вып. 12 № 1, 2006 г.
  3. ^ Взаимодействие с сетями на уровне приложения с использованием SAGA. Шантену Джа, Хартмут Кайзер, Андре Мерцки, Оле Вейднер E-SCIENCE '07: материалы Третьей международной конференции IEEE по электронной науке и грид-вычислениям (e-Science 2007), 2007 г.
  4. ^ «Обзор — SAGA WG — Форум Open Grid» .
  5. ^ Шантену Джа, Андре Мерцки: «Сборник вариантов использования простого API для грид-приложений», информационный документ OGF, GFD.70 (pdf)
  6. ^ Шантену Джа, Андре Мерцки: «Анализ требований к простому API для Grid-приложений», информационный документ OGF, GFD.71 (pdf)
  7. ^ Стив Фишер, Энтони Уилсон, Арумугам Павентан: «Расширение API SAGA: API обнаружения сервисов», рекомендательный документ OGF, GFD.144 (pdf)
  8. ^ Андре Мерцки: «Расширение API SAGA: API рекламы», рекомендательный документ OGF, GFD.177 (pdf)
  9. ^ Андре Мерцки: «Расширение API SAGA: API сообщений», рекомендательный документ OGF, GFD.178 (pdf)
  10. ^ Стив Фишер, Энтони Уилсон: «Расширение API SAGA: API навигатора информационной системы», рекомендательный документ OGF, GFD.195 (pdf)
  11. ^ «Справочный API SAGA C++ (документация)» .
  12. ^ «САГА: Как это работает» . www.vimeo.com .
  13. ^ «САГА С++» .
  14. ^ «РАДИКАЛ-САГА» .
  15. ^ «Спасибо за интерес к XSEDE» .
  16. ^ «Будущая сетка» . Архивировано из оригинала 25 ноября 2010 г.
  17. ^ «ДжСАГА» .
  18. ^ «ДЕШЛ» . Архивировано из оригинала 8 июня 2012 г.
  19. ^ NSF-CHE 1125332 (CDI)
  20. ^ NSF-EPS 1003897 (LaSIGMA)
  21. ^ NSF-OCI 1007115 (ExTENCI)
  22. ^ OMII-Великобритания
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: f003d0fd5bbd0074f3ef91b286e98e74__1713511020
URL1:https://arc.ask3.ru/arc/aa/f0/74/f003d0fd5bbd0074f3ef91b286e98e74.html
Заголовок, (Title) документа по адресу, URL1:
Simple API for Grid Applications - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)