stringtranslate.com

API simple para aplicaciones Grid

La API simple para aplicaciones Grid ( SAGA ) es una familia de estándares relacionados especificados por el Open Grid Forum para definir una interfaz de programación de aplicaciones (API) para una funcionalidad informática distribuida común .

Descripción general

La especificación SAGA para computación distribuida originalmente consistía en un solo documento, GFD.90, que se publicó en 2009.

La API SAGA no pretende reemplazar a Globus o sistemas de middleware de computación grid similares , y no está dirigido a desarrolladores de middleware, sino a desarrolladores de aplicaciones sin experiencia en computación grid. Estos desarrolladores normalmente desean dedicar su tiempo a sus propios objetivos y minimizar el tiempo dedicado a codificar la funcionalidad de la infraestructura. La API aísla a los desarrolladores de aplicaciones del middleware.

La especificación de servicios y los protocolos para interactuar con ellos está fuera del alcance de SAGA. Más bien, la API busca ocultar los detalles de cualquier infraestructura de servicio que pueda o no usarse para implementar la funcionalidad que el desarrollador de la aplicación necesita. Sin embargo, la API se alinea con todos los estándares de middleware dentro de Open Grid Forum (OGF). [1]

La API SAGA definió un mecanismo para especificar paquetes API adicionales que amplían su alcance. La propia SAGA Core API define una serie de paquetes: gestión de trabajos, gestión de archivos, gestión de réplicas, llamadas a procedimientos remotos y transmisiones. SAGA cubre la funcionalidad distribuida más importante y utilizada con frecuencia y es compatible y está disponible en todos los principales sistemas de red: Extreme Science and Engineering Discovery Environment (XSEDE), EGI y FutureGrid. SAGA no sólo soporta una amplia gama de modelos distribuidos de programación y coordinación, sino que también es fácilmente extensible para soportar middleware nuevo y emergente. [2] [3]

Estandarización

La API SAGA está estandarizada en el Grupo de Trabajo SAGA, el Foro Open Grid . [4] Basado en un conjunto de casos de uso [5] , [6] la especificación SAGA Core API [1] define un conjunto de principios generales de API (el 'SAGA Look and Feel' y un conjunto de paquetes API que se representan comúnmente Patrones de programación Grid utilizados (gestión de trabajos, gestión y acceso a archivos, gestión de réplicas, etc.). La especificación SAGA Core también define cómo se definirán los paquetes API adicionales y cómo se relacionan con la API Core y con su "apariencia y sensación". En base a eso, se han definido una serie de extensiones de API que se encuentran en varios estados del proceso de estandarización .

Todas las especificaciones SAGA están definidas en (una versión de) IDL y, por lo tanto, están orientadas a objetos, pero son neutrales en cuanto al lenguaje. Existen diferentes enlaces de lenguaje (Java, C++, Python), pero, en este momento, no están estandarizados. Sin embargo, las diferentes implementaciones de estos enlaces de lenguaje tienen una definición de API relativamente coherente (en particular, las diferentes implementaciones de Java comparten las mismas clases API abstractas).

La parte 'Look and Feel' de la especificación SAGA Core API cubre las siguientes áreas:

Arquitectura

La arquitectura SAGA C++/Python: un sistema de ejecución liviano envía llamadas API desde la aplicación al middleware a través de un conjunto de complementos o adaptadores .

SAGA está diseñado como una interfaz orientada a objetos . Encapsula la funcionalidad relacionada en un conjunto de objetos, que se agrupan en espacios de nombres funcionales , que se denominan paquetes en SAGA. La implementación central de SAGA define los siguientes paquetes: [11]

La arquitectura general de SAGA sigue el patrón de adaptador , un patrón de diseño de software que se utiliza para traducir una interfaz a otra. En SAGA traduce las llamadas de los paquetes API a las interfaces del middleware subyacente. El sistema de tiempo de ejecución SAGA utiliza enlace tardío para decidir en tiempo de ejecución qué complemento ( adaptador de middleware ) cargar y enlazar. [12]

Middleware soportado

La siguiente tabla enumera los sistemas de middleware distribuido que actualmente son compatibles con SAGA. La columna denominada Adapter Suite nombra la colección (paquete de lanzamiento) del (conjunto de) adaptadores de middleware que proporciona soporte para el sistema de middleware.

Implementaciones

Dado que las definiciones de la interfaz SAGA no están vinculadas a ningún lenguaje de programación específico, existen varias implementaciones de los estándares SAGA en diferentes lenguajes de programación. Además del lenguaje de implementación, se diferencian entre sí por su integridad en cuanto a cobertura estándar, así como por su soporte para middleware distribuido.

SAGAC++

SAGA C++ [13] fue la primera implementación completa de la especificación SAGA Core, escrita en C++. Actualmente, la implementación de C++ no se encuentra en desarrollo activo.

RADICAL-SAGA (Python)

RADICAL-SAGA [14] es un paquete Python liviano que implementa partes de la especificación de interfaz OGF GFD.90 [1] y proporciona complementos para diferentes sistemas y servicios de middleware distribuido. RADICAL-SAGA implementa las funciones más utilizadas de GFD.90 basándose en un análisis exhaustivo de casos de uso y se centra en la usabilidad y la implementación simple en escenarios de aplicaciones y entornos informáticos distribuidos heterogéneos del mundo real. RADICAL-SAGA actualmente implementa las API principales de administración de trabajos y archivos, así como la extensión API de administración de recursos. RADICAL-SAGA proporciona complementos para diferentes sistemas y servicios de middleware distribuido, incluido el soporte para PBS , Sun Grid Engine , SSH , SFTP y otros. RADICAL-SAGA se puede utilizar para desarrollar aplicaciones y marcos distribuidos que se ejecutan en una ciberinfraestructura distribuida, incluidos XSEDE, [15] LONI y FutureGrid, [16] otras nubes y clústeres locales.

JavaSAGA

JavaSAGA es una implementación Java de SAGA. Este estado de JavaSAGA sigue siendo incierto.

importar java.util.io.* int main ( int argc , char ** argv ) { espacio de nombres sa = saga :: atributos ; espacio de nombres sja = saga :: trabajo :: atributos ;              prueba { saga :: trabajo :: descripción jd ;     jd . set_attribute ( sja :: descripción_executable , "/home/user/hello-mpi" ); jd . set_attribute ( sja :: descripción_salida , "/home/user/hello.out" ); jd . set_attribute ( sja :: descripción_error , "/home/user/hello.err" );         // Declarar esto como un trabajo estilo MPI jd . set_attribute ( sja :: descripción_spmd_variation , "mpi" );    // Nombre de la cola que queremos usar jd . set_attribute ( sja :: descripción_queue , "checkpt" ); jd . set_attribute ( sja :: descripción_spmd_variation , "mpi" ); // Número de procesadores para solicitar jd . set_attribute ( sja :: descripción_número_de_procesos , "32" );           saga :: trabajo :: servicio js ( "gram://my.globus.host/jobmanager-pbs" ); saga :: trabajo :: trabajo j = js . crear_trabajo ( jd );      j . ejecutar () } catch ( saga :: excepción const & e ) { std :: cerr << "Excepción SAGA detectada: " << e . qué () << std :: endl ; } }                

jSAGA

jSAGA [17] es otra implementación Java de la especificación SAGA Core. jSAGA se encuentra actualmente en desarrollo activo.

DESHL

DESHL [18] (Servicios DEISA para capa de gestión heterogénea), proporciona funcionalidad para el envío y gestión de trabajos computacionales dentro de DEISA . DESHL se implementa como un conjunto de herramientas de línea de comandos además de una API inspirada en SAGA implementada en Java. En el back-end, interactúa con HiLA, una biblioteca cliente genérica de acceso a la red, que forma parte del sistema UNICORE .

Ejemplos

Envío de trabajo

Una tarea típica en una aplicación distribuida es enviar un trabajo a un administrador de recursos distribuidos local o remoto . SAGA proporciona una API de alto nivel llamada paquete de trabajo para esto. Los siguientes dos ejemplos sencillos muestran cómo se puede utilizar la API del paquete de trabajos SAGA para enviar un trabajo de interfaz de paso de mensajes (MPI) a un administrador de recursos Globus GRAM remoto.

C++

#incluir <saga/saga.hpp> int main ( int argc , char ** argv ) { espacio de nombres sa = saga :: atributos ; espacio de nombres sja = saga :: trabajo :: atributos ;              prueba { saga :: trabajo :: descripción jd ;     jd . set_attribute ( sja :: descripción_executable , "/home/user/hello-mpi" ); jd . set_attribute ( sja :: descripción_salida , "/home/user/hello.out" ); jd . set_attribute ( sja :: descripción_error , "/home/user/hello.err" );         // Declarar esto como un trabajo estilo MPI jd . set_attribute ( sja :: descripción_spmd_variation , "mpi" );    // Nombre de la cola que queremos usar jd . set_attribute ( sja :: descripción_queue , "checkpt" ); jd . set_attribute ( sja :: descripción_spmd_variation , "mpi" ); // Número de procesadores para solicitar jd . set_attribute ( sja :: descripción_número_de_procesos , "32" );           saga :: trabajo :: servicio js ( "gram://my.globus.host/jobmanager-pbs" ); saga :: trabajo :: trabajo j = js . crear_trabajo ( jd );      j . ejecutar () } catch ( saga :: excepción const & e ) { std :: cerr << "Excepción SAGA detectada: " << e . qué () << std :: endl ; } }                

Pitón

#!/usr/bin/env python3 importar  sys importar  tiempo importar  bliss.saga  como  sagadef  principal ( número de trabajo :  int ,  sesión ,  servicio de trabajo )  ->  Ninguno :  bfast_base_dir  =  saga . URL ( "sftp://india.futuregrid.org/N/u/oweidner/software/bfast/" ) intente :  workdir  =  " %s /tmp/run/ %s "  %  ( bfast_base_dir . ruta ,  str ( int ( time . time ())))  basedir  =  saga . sistema de archivos . Directorio ( bfast_base_dir ,  sesión = sesión )  basedir . make_dir ( dirección de trabajo ) jd  =  saga . trabajo . Descripción ()  jd . wall_time_limit  =  5  # tiempo de pared en minutos  jd . total_cpu_count  =  1  jd . entorno  =  { "BFAST_DIR" :  bfast_base_dir . ruta }  jd . directorio_de_trabajo  =  directorio de trabajo  jd . ejecutable  =  "$BFAST_DIR/bin/bfast"  jd . argumentos  =  [ "coincidencia" ,  "-A 1" ,  "-r $BFAST_DIR/data/small/reads_5K/reads.10.fastq" ,  "-f $BFAST_DIR/data/small/reference/hg_2122.fa" ] mitrabajo  =  js . create_job ( jd )  mi trabajo . correr () print ( "Nº de trabajo %s comenzó con ID ' %s ' y directorio de trabajo: ' %s '"  %  ( jobno ,  myjob . jobid ,  workdir )) mi trabajo . esperar () print ( "Trabajo # %s con ID ' %s ' terminado (RC: %s ). Salida disponible en: ' %s '"  %  ( jobno ,  myjob . jobid ,  myjob . exitcode ,  workdir )) basar . cerca () excepto  saga . Excepción ,  por ejemplo :  print ( f "Se produjo un error durante la ejecución del trabajo: { ex } " )  sys . salir ( -1 )si  __name__  ==  "__main__" :  ejecución_host  =  saga . URL ( "pbs+ssh://india.futuregrid.org" )  ctx  =  saga . Contexto ()  ctx . tipo  =  saga . Contexto . SSH  ctx . ID de usuario  =  "oweidner"  # como 'ssh nombre de usuario@host...'  ctx . clave de usuario  =  "/Users/oweidner/.ssh/rsa_work"  # como ssh -i ...' sesión  =  saga . Sesión ()  sesión . contextos . agregar ( ctx ) js  =  saga . trabajo . Servicio ( ejecución_host ,  sesión ) para  i  en  el rango ( 0 ,  4 ):  principal ( i ,  sesión ,  js )

Subsidios

El trabajo relacionado con el Proyecto SAGA está financiado por las siguientes subvenciones: NSF-CHE 1125332 (CDI), [19] NSF-EPS 1003897 (LaSIGMA), [20] NSF-OCI 1007115 (ExTENCI). [21] Las subvenciones anteriores incluyen: NSF-OCI 0710874 (HPCOPS), subvención NIH número P20RR016456 y subvención EPSRC del Reino Unido número GR/D0766171/1 a través de OMII-UK [22]

enlaces externos

Notas

  1. ^ abc T. Goodale; S. Jha; H. Káiser; T. Kielmann; P. Kleijer; A. Merzky; J. Shalf; C. Smith. "Una API simple para aplicaciones Grid (SAGA)" (PDF) . Serie de documentos OGF 90 .
  2. ^ SAGA: una API simple para aplicaciones Grid, programación de aplicaciones de alto nivel en Grid Tom Goodale, Shantenu Jha, Harmut Kaiser, Thilo Kielmann, Pascal K leijer, Gregor von Laszewski, Craig Lee, Andre Merzky, Hrabri Rajic, John Shalf Computational Métodos en ciencia y tecnología, vol. 12 # 1, 2006
  3. ^ Interoperabilidad de red a nivel de aplicación utilizando SAGA Shantenu Jha, Hartmut Kaiser, Andre Merzky, Ole Weidner E-SCIENCE '07: Actas de la tercera conferencia internacional IEEE sobre e-ciencia y computación grid (e-Science 2007), 2007
  4. ^ "Descripción general - SAGA WG - Foro Open Grid".
  5. ^ Shantenu Jha, Andre Merzky: "Una colección de casos de uso para una API simple para aplicaciones Grid", documento informativo OGF, GFD.70 (pdf)
  6. ^ Shantenu Jha, Andre Merzky: "Un análisis de requisitos para una API simple para aplicaciones Grid", documento informativo OGF, GFD.71 (pdf)
  7. ^ Steve Fisher, Anthony Wilson, Arumugam Paventhan: "Extensión de API SAGA: API de descubrimiento de servicios", documento de recomendación de OGF, GFD.144 (pdf)
  8. ^ Andre Merzky: "Extensión API SAGA: API publicitaria", Documento de recomendación de OGF, GFD.177 (pdf)
  9. ^ Andre Merzky: "Extensión API SAGA: API de mensajes", Documento de recomendación de OGF, GFD.178 (pdf)
  10. ^ Steve Fisher, Anthony Wilson: "Extensión API SAGA: API del navegador del sistema de información", Documento de recomendación de OGF, GFD.195 (pdf)
  11. ^ "La API de referencia de SAGA C++ (documentación)".
  12. ^ "SAGA: cómo funciona". www.vimeo.com .
  13. ^ "SAGA C ++".
  14. ^ "RADICAL-SAGA".
  15. ^ "Gracias por su interés en XSEDE".
  16. ^ "FuturoGrid". Archivado desde el original el 25 de noviembre de 2010.
  17. ^ "JSAGA".
  18. ^ "DESHL". Archivado desde el original el 8 de junio de 2012.
  19. ^ NSF-CHE 1125332 (CDI)
  20. ^ NSF-EPS 1003897 (LaSIGMA)
  21. ^ NSF-OCI 1007115 (ExTENCI)
  22. ^ OMII-Reino Unido