그리드 애플리케이션용 심플한 API
Simple API for Grid Applications![]() |
![]() | |
개발자 | LSU 계산 및 테크놀로지 센터, Rutgers University RADIAL 그룹, IN2P3(프랑스), Vrije Universit(네덜란드 암스테르담) |
---|---|
기입처 | C++, Python, Java |
플랫폼 | 크로스 플랫폼 |
유형 | 그리드 컴퓨팅, 분산 컴퓨팅 라이브러리 |
면허증. | 소프트웨어 라이선스, GPL의 부스트 |
웹 사이트 | saga-project |
SAGA(Simple API for Grid Applications)는 Open Grid Forum이 공통 분산 컴퓨팅 기능을 위한 애플리케이션 프로그래밍 인터페이스(API)를 정의하기 위해 지정한 관련 표준 패밀리입니다.
개요
분산 컴퓨팅의 SAGA 사양은 2009년에 발표된 GFD.90이라는 단일 문서로 구성되어 있습니다.
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]쉽게 확장할 수 있습니다.
표준화
SAGA API는 SAGA 워킹 그룹 오픈 그리드 [4]포럼에서 표준화되어 있습니다.SAGA Core API 사양은[7] 일련의 사용 [6]사례를 바탕으로 일반적인 API 원칙('SAGA Look and Feel')과 일반적으로 사용되는 그리드 프로그래밍 패턴(작업 관리, 파일 관리 및 액세스, 복제 관리 등)을 렌더링하는 API 패키지 세트를 정의합니다.SAGA Core 사양은 추가 API 패키지를 정의하는 방법과 코어 API 및 그 'Look and Feel'과의 관계도 정의합니다.이를 바탕으로 다수의 API 확장이 정의되어 표준화 [8][9][10][11]프로세스의 다양한 상태에 있습니다.
모든 SAGA 사양은 IDL로 정의되어 있기 때문에 오브젝트 지향이지만 언어 중립입니다.다른 언어 바인딩(Java, C++, Python)이 존재하지만 이 시점에서는 표준화되지 않았습니다.그럼에도 불구하고, 이러한 언어 바인딩의 다른 구현은 비교적 일관된 API 정의를 가지고 있습니다(특히, 다른 Java 구현은 동일한 추상 API 클래스를 공유합니다).
SAGA Core API 사양의 'Look and Feel' 부분은 다음 영역을 포함합니다.
- 보안 및 세션 관리
- 허가 관리
- 비동기 조작
- 감시
- 비동기 통지
- 속성 관리
- I/O 버퍼 관리
아키텍처
SAGA는 객체 지향 인터페이스로 설계되었습니다.SAGA에서는 패키지라고 불리는 기능 네임스페이스로 그룹화된 일련의 오브젝트에 관련 기능을 캡슐화합니다.SAGA 코어 실장에서는, 다음의 [12]패키지가 정의됩니다.
- saga:: 애드버타이즈: 애드버타이즈서비스 액세스용 인터페이스
- saga:: filesystem: 파일 및 디렉토리 액세스용
- saga:: 작업 - 작업 정의, 관리 및 제어를 위한 인터페이스
- saga : advestive - 추상 인터페이스(애드버타이즈먼트, 파일시스템 및 복제 인터페이스에서 사용)
- saga:: 복사: 복제 관리용 인터페이스
- saga::rpc:클라이언트 및 서버를 호출하는 리모트프로시저의 인터페이스
- sdaga: 분산 환경에서의 서비스 검출용 sd- 인터페이스
- saga:: stream - 데이터 스트림클라이언트 및 서버 인터페이스
SAGA의 전체적인 아키텍처는 어댑터 패턴, 즉 어떤 인터페이스를 다른 인터페이스로 변환하는 데 사용되는 소프트웨어 설계 패턴을 따릅니다.SAGA에서는 API 패키지의 콜을 기반이 되는 미들웨어의 인터페이스로 변환합니다.SAGA 런타임 시스템은 런타임에 로드 및 [13]바인딩할 플러그인(미들웨어 어댑터)을 결정하기 위해 레이트바인딩을 사용합니다.
지원되는 미들웨어
다음 표에 SAGA에서 현재 지원되는 분산 미들웨어 시스템을 보여 줍니다.Adapter Suite라는 라벨이 붙은 열은 미들웨어 시스템을 지원하는 미들웨어 어댑터의 컬렉션(릴리스 패키지)을 나타냅니다.
미들웨어 시스템 | SAGA 어댑터 스위트 | SAGA API 네임스페이스 |
---|---|---|
아마존 EC2 | 어답터, 앵무새 | saga: 작업 |
콘도르 | 사가 적응기 | saga: 작업 |
유칼립투스속 | 어답터, 앵무새 | saga: 작업 |
Globus GRAM (2 및 5) | 사가 적응기 | saga: 작업 |
Globus 그리드FTP | 사가 적응기 | saga: 파일시스템 |
글로버스 RLS | 사가 적응기 | saga: 개요 |
HDFS | saga-adapters-hdfs | saga: 파일 |
로컬 파일 시스템 | 사가코어의 일부 | saga: 파일 |
로컬 포크 | 사가코어의 일부 | saga: 작업 |
님버스 | 어답터, 앵무새 | saga: 작업 |
PBS(프로) | 사가 적응자 | saga: 작업 |
플랫폼 LSF | 사극 적응자 | saga: 작업 |
SQL 광고 서비스 | 사가코어의 일부 | saga: 애드버타이즈 |
SQL Replica 서비스 | 사가코어의 일부 | saga: 개요 |
SSHFS | 사극 적응자 | saga: 파일 |
SSH | 사극 적응자 | saga: 작업 |
토크 | 사극 적응자 | saga: 작업 |
실장
SAGA 인터페이스 정의는 특정 프로그래밍 언어에 얽매이지 않기 때문에 SAGA 표준의 여러 구현이 다른 프로그래밍 언어로 존재합니다.구현 언어 외에 표준 적용 범위 및 분산 미들웨어 지원에서 서로 완전성이 다릅니다.
SAGA C++
SAGA C++는 C++로 작성된 SAGA 코어 사양의 첫 번째 완전한 구현입니다.현재 C++ 구현은 진행 중이 아닙니다.
RADIAL-SAGA(피톤)
RADIAL-SAGA는 OGF GFD.90 인터페이스 사양의 일부를 구현하고 다양한 분산 미들웨어 시스템과 서비스를 위한 플러그인을 제공하는 경량 Python 패키지입니다.RADIAL-SAGA는 광범위한 사용 사례 분석을 바탕으로 GFD.90에서 가장 일반적으로 사용되는 기능을 구현하고 실제 이기종 분산 컴퓨팅 환경 및 애플리케이션 시나리오에서의 조작성과 심플한 도입에 중점을 두고 있습니다.RADIAL-SAGA는 현재 작업 및 파일 관리 핵심 API와 리소스 관리 API 확장을 구현하고 있습니다.RADIUS-SAGA는 PBS, Sun Grid Engine, SSH, SFTP 등의 지원을 포함한 다양한 분산 미들웨어 시스템과 서비스를 위한 플러그인을 제공합니다.RADIAL-SAGA를 사용하여 XSEDE, LONI 및 FutureGrid, 기타 클라우드 및 로컬 클러스터를 포함한 분산 사이버 인프라에서 실행되는 분산 애플리케이션과 프레임워크를 개발할 수 있습니다.
자바사가
JavaSAGA는 SAGA의 Java 구현입니다.JavaSAGA의 이 상태는 아직 불확실합니다.
수입품 java.util.io 를 참조해 주세요.* 인트 주된 (인트 argc, 차** argv) { 네임스페이스 sa = 사가::특성; 네임스페이스 자 = 사가::일::특성; 해라 { 사가::일::묘사 jd; jd.set_module (자::description_incapable, "/home/user/hello-mpi"); jd.set_module (자::description_output, "/home/user/hello.out"); jd.set_module (자::description_error(설명_오류), "/home/user/hello.err"); // 이 작업을 MPI 형식의 작업으로 선언합니다. jd.set_module (자::description_spmd_discriptions, "mpi"); // 사용할 큐의 이름 jd.set_module (자::description_description(설명), '체크'); jd.set_module (자::description_spmd_discriptions, "mpi"); // 요청할 프로세서의 수 jd.set_module (자::description_number_of_discripts, "32"); 사가::일::서비스 js("그램://my.globus.host/jobmanager-pps"); 사가::일::일 j = js.create_job(jd); j.달려.() } 또 만나(사가::예외. 컨스턴트 & e) { 표준::cerr << > "SAGA 예외 발견: " << > e.뭐() << > 표준::끝; } }
사가
jSAGA는 SAGA Core 사양의 또 다른 Java 구현으로 현재 jSAGA는 개발 중입니다.
데스
DESHL(DEISA Services for Etheric Management Layer)은 DEISA 내에서 계산 작업을 제출하고 관리하는 기능을 제공합니다.DESHL은 Java에서 구현된 SAGA에서 영감을 받은 API 위에 명령줄 도구 세트로 구현됩니다.백엔드에서는 UNICORE 시스템의 일부인 범용 그리드액세스 클라이언트 라이브러리인 HiLA와 인터페이스합니다.
예
작업 제출
분산 응용 프로그램의 일반적인 태스크는 로컬 또는 원격 분산 리소스 관리자에게 작업을 제출하는 것입니다.SAGA는 이를 위한 작업 패키지라는 고급 API를 제공합니다.다음으로 SAGA 작업 패키지 API를 사용하여 Message Passing Interface(MPI) 작업을 리모트 Globus GRAM 자원 매니저에 송신하는 예를 나타냅니다.
C++
#실패하다 <contraction/contractions.hpp> 인트 주된 (인트 argc, 차** argv) { 네임스페이스 sa = 사가::특성; 네임스페이스 자 = 사가::일::특성; 해라 { 사가::일::묘사 jd; jd.set_module (자::description_incapable, "/home/user/hello-mpi"); jd.set_module (자::description_output, "/home/user/hello.out"); jd.set_module (자::description_error(설명_오류), "/home/user/hello.err"); // 이 작업을 MPI 형식의 작업으로 선언합니다. jd.set_module (자::description_spmd_discriptions, "mpi"); // 사용할 큐의 이름 jd.set_module (자::description_description(설명), '체크'); jd.set_module (자::description_spmd_discriptions, "mpi"); // 요청할 프로세서의 수 jd.set_module (자::description_number_of_discripts, "32"); 사가::일::서비스 js("그램://my.globus.host/jobmanager-pps"); 사가::일::일 j = js.create_job(jd); j.달려.() } 또 만나(사가::예외. 컨스턴트 & e) { 표준::cerr << > "SAGA 예외 발견: " << > e.뭐() << > 표준::끝; } }
파이썬
#!/usr/bin/env python3 수입품 시스템 수입품 시간을 수입품 delice.delice.delice.delice.delice. ~하듯이 사가 방어하다 주된(작업 없음: 인트, 세션, 작업 서비스) -> 없음.: bfast_base_module = 사가.URL("sftp://india.futuregrid.org/N/u/oweidner/software/bfast/") 해라: 동작하다 = "%s/tmp/실행/%s" % (bfast_base_module.경로., 스트레이트(인트(시간을.시간을()))) 베이스 = 사가.파일 시스템.디렉토리(bfast_base_module, 세션=세션) 베이스.make_filengths(동작하다) jd = 사가.일.묘사() jd.wall_time_limit(벽 시간 제한) = 5 벽걸이 시간(분) jd.total_cpu_count = 1 jd.환경 = {'BFAST_DIR': bfast_base_module.경로.} jd.working_directory = 동작하다 jd.실행 가능한 = '$BFAST_DIR/bin/bFAST' jd.논쟁들 = ['일치, '-A 1', '-r $BFAST_DIR/data/small/reads_5K/reads.10.fastq', '-f $BFAST_DIR/data/small/reference/hg_2122.fa'] 내 일 = js.create_job(jd) 내 일.달려.() 인쇄물(「작업 번호%s아이디로시작했습니다.%s' 및 작업 디렉토리:%s'" % (작업 없음, 내 일.작업하다, 동작하다)) 내 일.잠깐만요.() 인쇄물(「작업 번호%s아이디로%s' 완료(RC:%s) 출력: '%s'" % (작업 없음, 내 일.작업하다, 내 일.종료 코드, 동작하다)) 베이스.가까운.() 제외하고 사가.예외., ex: 인쇄물(f"작업 실행 중 오류가 발생했습니다.{ex}") 시스템.퇴장(-1) 한다면 __name__ == "_메인__": execution_host = 사가.URL("pbs+http://india.futuregrid.org") ctx = 사가.맥락() ctx.유형 = 사가.맥락.SSH ctx.사용자 ID = '아이돌' # 'module username@host...'와 같은 번호 ctx.사용자 키 = '/Users/oweidner/.ssh/rsa_work' # ssh - i...' 세션 = 사가.세션() 세션.콘텍스트.추가하다(ctx) js = 사가.일.서비스(execution_host, 세션) 위해서 i …에. 범위(0, 4): 주된(i, 세션, js)
허가
SAGA 프로젝트와 관련된 작업은 다음과 같은 보조금으로 지원된다.NSF-CHE 1125332(CDI), NSF-EPS 1003897(LaSIGMA), NSF-OCI 1007115(ExTENCI).이전 인가에는 NSF-OCI 0710874(HPCOPS), NIH 인가 번호 P20R016456 및 영국 EPSRC 인가 번호 GR/D0766171/1이 포함됩니다(OMI-UK 경유).
외부 링크
- SAGA-Bliss - Python의 SAGA 구현
- jSAGA - SAGA의 Java 구현
- SAGA C++ - SAGA의 C++ 구현
- SAGA-GLIB - SAGA for GLIB의 Vala 구현
- 사가 프로젝트
- POSIX
메모들
- ^ T. Goodale, S. Jha, H. Kaiser, T. Kielmann, P. Klejer, A.머스키, J. 샬프, C.Smith, 그리드 애플리케이션(SAGA), OGF Document Series 90,http://www.ogf.org/documents/GFD.90.pdf
- ^ SAGA: 그리드 애플리케이션용 심플한 API, 그리드에서의 고레벨 애플리케이션 프로그래밍, Tom Goodale, Shantenu Jha, Harmut Kaiser, Thilo Kielmann, Pascal Klejer, Gregor von Laszewski, Craig Lee, Andre Merzky, Hrabic
- ^ SAGA Shantenu Jha, Hartmut Kaiser, Andre Merzky, Ole Weidner E-SCIENCE '07: 제3회 IEEE 국제 전자과학 및 그리드 컴퓨팅 회의 진행(e-Science 2007)을 사용한 애플리케이션 수준에서의 그리드 상호 운용성
- ^ http://redmine.ogf.org/projects/saga-wg
- ^ Shantenu Jha, Andre Merzky: "그리드 애플리케이션용 심플 API 사용 사례 모음", OGF 정보 문서, GFD.70(pdf)
- ^ Shantenu Jha, Andre Merzky: "그리드 애플리케이션용 심플 API 요건 분석", OGF 정보 문서, GFD.71(pdf)
- ^ Tom Goodale, Shantenu Jha, Hartmut Kaiser, Thilo Kielmann, Pascal Klejer, Andre Merzky, John Shalf, Chris Smith: "그리드 애플리케이션을 위한 심플 API (SAGA), OGF 권장 문서, GFD90"
- ^ Steve Fisher, Anthony Wilson, Arumugam Paventhan: "SAGA API 확장:Service Discovery API", OGF 권장 문서, GFD.144(pdf)
- ^ Andre Merzky: "SAGA API 확장:광고 API", OGF 권장 문서, GFD.177(pdf)
- ^ Andre Merzky: "SAGA API 확장:메시지 API", OGF 권장 문서, GFD.178(pdf)
- ^ Steve Fisher, Anthony Wilson: "SAGA API 확장:Information System Navigator API", OGF 권장 문서, GFD.195(pdf)
- ^ SAGA C++ 레퍼런스 API(문서) [1]
- ^ SAGA: (Vimeo에서의) 구조 [2]