2013. 10. 23. 21:12ㆍCloud/멀티클라우드
Compare Closs-Platform Cloud API(Jcloud, Libcloud, Deltacloud)
- Compute API 측면에서의 API 비교
Cloud API는 응용 프로그램에서 클라우드 컴퓨팅을 빌드 하는 목적을 위해 사용 된다. Cloud API는 소프트웨어가 직접 또는 간접적으로 인터페이스를 통해 하나 이상의 클라우드 서비스에 Compute, Storage 작업을 요청 할 수 있다. Cloud API는 Cloud Service Provider의 특정 기능을 사용할 수 있다. 하지만 이러한 Cloud API로 만든 크로스 플랫폼 인터페이스는 여러 Cloud Service업체에 서비스를 엑세스 할 수 있는 장점을 가지고 있지만, 공급 업체의 특정 솔루션에 대한 제한이 있을 수 있다. Cloud API는 Infrasturucture, Storage, Application Clusters등에 걸쳐 필요에 따라 응용프로그램을 만드는데 사용된다. Infrastructure API는 응용 프로그램이 작동할 수 있는 리소스를 수정하거나 생성 혹은 삭제한다. 예를 들어 가상 머신을 구성하거나 생성 혹은 삭제 할 수 있다. Storage API는 Data Blobs의 저장 공간을 생성/삭제/데이터엑세스 하는데 사용되며 예를 들어 데이터베이스, 웹포털, 전자 상거래등에 사용된다. 마지막으로 Applciaton Cluster 측면에서는 인터페이스에 기능을 제공하고, 웹에서 응용프로그램을 사용하는데 사용된다 주 예로 CRM, ERP, 소셜미디어등이 있다. 대부분의 Cloud API는 Cloud Service를 사용하는 데 있어 추상화 적인 API를 제공하고, 해당 Cloud를 제어하는 목적으로 설계되었다. Cloud API는 Cloud Service에 대한 인증된 API호출이 Cloud Service System에 대해 변경 되는 것을 보장 하기 위해 인증 메커니즘을 갖추고 있으며, Cloud Provider는 보안을 보장 하기 위해 HTTPS를 통해 전달되는 ID, 인증키를 바탕으로 API호출에 있어 승인/인증을 제공한다.
Closs-Platform Cloud API는 Cloud API를 기반으로 클라우드 제공업체보다 더 높은 수준의 추상화된 기능을 제공하며, 하나 이상의 공급자의 컴퓨팅에 대한 엑세스 또는 클라우드를 리소스를 활요하는데 있어 단일 API호출 사용을 가능하게 한다. 이것은 코드의 복잡성을 감소시키며, 시간을 절약 시키고 여러 API를 기반으로하여 Cloud Provider에 엑세스시키는 구현을 하지 않아도 되는 이점을 가지고 있다.
Closs-Platform Cloud API의 주요 기능 중 하나는 다른 API에 대한 API를 만드는 것이다. 이러한 통합 인터페이스 구현을 통해 infrastructure 뿐만 아니라 새로운 클라우드 중심의 기술을 만들 수 있다.
현재 오픈 소스 프로젝트시장은 각 관계 업계들이 단일화 되고 통합적인 API를 확립시키는데 있어 개발 경쟁이 치열한 상황이다 이에 본Paper는 각광받고 있는 3개의 Multi Cloud API( Jcloud, Libcloud, Deltacloud)를 Compute API 측면에서 비교하려고 한다.
Jcloud |
Libcloud |
Deltacloud | |
Language |
Java, Clojure |
Python |
Ruby, REST |
Comonent |
Compute/Blobstore |
Compute/Storage/Loadblancer/DNS |
REST API/Client API |
Client Contorol |
No |
Create/Deploy/Reboot/Destory |
Create/start/Stop/Reboot/Destory |
Storage Control |
Yes |
Yes |
No |
Main Provider |
Microsoft, IBM, Rackspace, Birvanix, Gogrid |
Amazon, Opennebula, Gogrid, Openstack, IBM |
Amazon, Opennebula, Rackspace, RHEV-M, Rimuhosting |
< Compare Cloud API Functionality >
먼저 Jcloud를 살펴보면 이 API는 Apache 재단에서 여러 클라우드 서비스간에 호환 될 수 있는 서비스를 위한 공통된 API개발을 목표로 만든 오픈 소스 API 라이브러리 이다. Public Cloud의 관리 기능을 추상화 해놓았으며, 언어는 JAVA를 기반으로 한다. API가 추상화 되어 있어 Cloud service의 Provider만 변경하면 손 쉽게 사용이 가능한 이점이 있다. API의 구성으로는 다음과 같다.
- BlobStore API : Microsoft Azure의 Blob 서비스 및 아마존 S3등의 스토리지 서비스 관리 기능을 제공한다. 또한 동기 및 비동기식 API들 뿐만 아니라, 데이터에 대한 엑세스 기능을 제공한다.
- Compute API : Amazon의 Public Cloud인 EC2나 Private Cloud인 VMware의 Vcloud 를 매핑시키는 기능을 제공한다. 또한, Jcloud Compute API는 Cloud Service의 여러 인스턴스에 있어서 다수의 연결이 아닌 하나의 연결로 다수 개의 인스턴스를 엑세스 할 수 있다. 그리고 jcloud는 기본 클라우드 API에 상관 없이 인스턴스를 실행할 수 있다. 또한, 서비스가 지원하는 임의의 암호나 키에 대해서 서비스를 시작시킬 때 인스턴스에 SSH key를 함께 이동 할 수 있다.
Jcloud는 드라이버 기반으로서 이루어져 있으며, 각 Cloud Provider에 접근할 수 있는 Frame Work를 제공하며 각 서비스 별로 나누어져 있는 Driver을 통해 이용할 수 있는 공통된 API집합을 제공한다.
< Jcloud Arcitecture>
Jcloud는 템플릿이라는 개념을 지원하는데 템플릿은 클라우드 환경을 구축 할 때, 사용자가 요구하는 인스턴스의 환경 및 요구사항을 캡슐화 하는 방법이다. 템플릿은 다음과 같은 요소로 구성된다.
Image |
인스턴스를 부팅하는 운영체제 |
Hardware |
CPU, 메모리, 디스크 등 |
Location |
인스턴스를 실행하는 데이터센터 |
Option |
부팅할 때 실행 하는 포트나 선택적 매개 변수를 포함한 스크립트를 정의 |
이러한 템플릿은 TempletBuilder API를 통하여 실행된다. 이때 템플릿의 각 옵션들은 Cloud Service Vendor가 제공하는 이미지 요구사항과 일치 시켜야 한다. 이러한 템플릿을 바탕으로 인스턴스를 부팅하는 운영체제, Hardware Profile, Location등에 대한 이미지를 생성 할 수 있다. 생성된 이미지내에 인스턴스를 생성 할 수 있으며, 이때 생성된 인스턴스에 대해 Group으로 묶어서 다 같이 한번에 관리 할 수 있는 기능을 제공한다. 예를 들어 템플릿으로 미리 요구된 사항에 있어 한꺼번에 여러 개의 인스턴스를 생성한다든지 생성된 인스턴스에 있어 전체적인 사용률이나 상태를 비교하고자 하는 목적 등으로 사용된다. 하지만 Jcloud는 인스턴스에 대한 제어 기능 실행/재실행/삭제/정지등의 Control 기능은 지원하지 않는다.
Jcloud API는 Java, Clojure 2가지 언어로 사용 가능하며 Apache Maven Project를 통해 응용프로그램을 개발할 수 있다. 가장 큰 장점으로는 Jcloud는 이기종의 인프라에 대한 지원기능 (이식성 Portablility)가 강하다 다시 말해 오픈 클라우드를 위해 개발한 컴퓨팅 서비스, 프로그래밍 언어 및 프레임 워크 데이터 및 어플리케이션을 다른 클라우드 환경에서 그대로 쓸 수 있는 이점이 있다. 이러한 환경속에서 특정 클라우드를 위한 애플리케이션을 만들어도 이 애플리케이션을 다른 환경으로 이전시 다른 언어로 재 개발 하거나 다른 API를 쓸 필요가 없다. 또 재구축이 필요할 때마다 재 테스트와 재 인증심사를 보증하지 않아도 된다. Jcloud는 Public Cloud 상에서 일관된 Runtime 환경을 제공 함으로서 이식성을 강화하였다.
두 번째 Libcloud는 여러 Cloud Service Provider 간에 인터페이스를 제공하는 python 기반 클라이언트로서 개발자들이 여러 클라우드 서비스 사이에서 동작하는 소프트웨어를 쉽게 개발하는 것을 지원 한다. Libcloud는 현재 Apache에서 지속적으로 개발 하고 있다. Libcloud는 해당 Cloud Provider의 Driver를 호출 후 받아온 Driver Image를 바탕으로 Compute/Stroage/Loadblancer/DNS API를 통해 해당 Cloud Service 작업을 시행한다. Libcloud Compute API는 API만으로는 이미지를 생성할 수는 없다. 또한 이미지 작업단계에서 발생되는 데이터센터 선정, 하드웨어 프로필 설정, OS설정, 파티션 설정등의 기능을 독자적으로 할 수가 없다. 하지만 Libcloud는 해당 이미 만들어져 있는 Cloud Service의 이미지 목록을 불러와 이미지에 노드(인스턴스)를 생성, 삭제 할 수 있으며, Jcloud와는 다르게 실행/재부팅을 할 수 있다. 하지만 이미 실행중인 인스턴스에 대해 중지 기능은 지원하지 않는다. 인스턴스를 생성할 때 AWS나 Deltacloud에서 지원하는 Hardware Profile 기능은 지원하지 않는다.. 이미지에 대한 생성 권한이 없으므로 사용자가 원하는 OS에 대한 선택은 Libcloud API를 통해서 할 수가 없다. 이에 OS를 선택하기 위해서는 해당 Cloud Service의 이미지 생성단계에서 직접 Hardware Profile과 OS를 선택해주어야 한다.
Libcloud API는 EC2같은 Cloud Provider의 API가 Overriding 되어 있는 형태이므로 AWS EC2같은 특정 사용업체 API와 같이 사용을 하여도 무방하다.
< Libcloud Arcitecture >
마지막으로 Deltacloud는 Infrastruture 만 놓고 보았을 땐 가장 지원되는 기능이 많은 API이다. Deltacloud는 Public/Private 클라우드 간에 상호 호환될 수 있는 공통된 API 개발을 목표로 시작 되었으며, REDHO주도로 오픈소스 프로젝트로 진행되고 있다. 가장 핵심적인 목표는 EC2등의 Public Cloud와 Opennebula, LIbvirt등으로 구축한 내부 Private 클라우드를 하나로 통합하여 동일한 인터페이스로 관리 할 수 있게 해주는 것이 목적이다. 또한, Cloud API의 변경 및 비호환성에 대한 문제를 추상화되고 통일화된 API를 제공함으로서 해결시켜주고, Deltacloud의 솔루션 뿐만 아니라 타 API의 솔루션과 쉽게 연결이 가능 하다. Deltacloud는 Cloud의 인스턴스에 대한 막강한 관리 기능을 제공할 뿐만 아니라 더 나아가 클라우드 기반 서비스 모델까지 만들 수 있는 기능을 제공한다. Deltacloud는 REST API 기반이며, Deletacloud Server는 Ruby언어로 작성되어 있다.
Deltacloud는 특정 클라우드 관리 구현 방식에 제한되어 있지 않으며, 가벼운 REST 웹API를 통해 이용할 수 있다. 다양한 언어로 작성된 클라이언트 라이브러리와 함께 사용 가능하다. On-premise 든지, Public Cloud든지, Private Cloud든지 간에 클라우드 인프라를 구축 하려고 할 때, 클라우드 제공업체들과 통신하는 방식에 있어 선택의 폭을 넓힌 모듈식 아키텍쳐와 유연성을 제공한다. 사용자는 클라우드 제공업체를 추가할 때 '드라이버' 라고 불리는 모듈 형식의 코드 묶음만 변경하면 된다.
< Deltacloud Architecture >
Deltacloud는 앞서 설명햇다시피 드라이버 기반으로서 각 클라우드 프로바이더에 접근할 수 있는 프레임 워크를 제공하며 REST 기반으로 이용할 수 있는 공통된 API집합을 제공한다. Deltacloud는 Deltacloud 코어, Deltacloud API를 통해서 Deltacloud에 엑세스 하기위한 라이브러리 (libdeltacloud-LPGLV2), Deletacloud API으로 통신을 하기 위한 Deltacloud 클라이언트 3가지 파일로 구성되는데 이 중 Deletacloud코어는 Deltacloud API의 Web기반 UI로서 1) 이미지 상태나 클라우드 상태에 대한 중앙 집중적인 기능 2) 클라우드 간에 인스턴스 마이그레이션 기능 3) 로컬 이미지 관리 및 클라우드 프로비저닝 지원 같은 기능들을 제공한다. Deltacloud는 REST 기반 API이므로 프로그램내 Deltacloud 라이브러리를 직접 등록할 필요가 없으며, REST인터페이스를 구현한 서버에 HTTP기반으로 Deltacloud API를 호출하게 된다.
Deltacloud에서 클라이언트가 Deltacloud Server에 요청을 보내기 위해서는 REST의 원칙에 따라 표준 HTTP에 따라 GET/ POST/ PUT /DELETE를 통해 요청을 한다. 이 때 API의 URL부분에 Deltacloud 콜렉션을 통해 작업을 진행한다. Cloud Provider의 계정만 있다면 이 클라우드 Service에서 지원 되는 모든 기능을 사용 할 수 있다. 데이터 센터의 위치 목록을 확인 할수 있고, 선택할 수 있으며, 이미지를 만들고 인스턴스 운영체제 및 하드웨어프로필을 직접 선택할 수 있으며, 인스턴스에 있어 중지/실행/보류/시작/완료 등 모든 기능을 지원한다. 또한 인스턴스 엑세스하는데 필요한 Key를 생성,삭제할 수 있는 등 Cloud Service가 지원하는 거의 모든 기능을 사용할 수 있다. 아래 표는 각 Cloud Service별로 지원되는 기능을 보여준다.
< Deltacloud Compute Driver Functionality>
Deltacloud는 Libcloud(python), Jcloud(java)와 가장 큰 차이점은 언어 독립적인 부분이다. Cloud Provider의 System을 관리하는 어플리케이션을 만든다고 가정 했을 때 Libcloud, jcloud를 사용하게 되면 클라이언트 언어는 JAVA, PYTHON을 통해 만들어야 한다는 점이 있다. 하지만 Deltacloud는 어떠한 언어로 작성된 클라이언트와 관계없이 REST방식으로 Deltacloud Server에 호출시킴으로 전혀 언어에 대한 문제점이 없다. Libcloud, Jcloud 두 API모두 Runtime Portability가 강하나 이는 전혀 다른 개념으로서 이미 Jcloud나 Libcloud로 만들어 논 클라이언트에서 다른 Cloud Service Vendor로 연결을 하여도 문제가 없다는 뜻이지 응용 프로그램을 만드는데 사용한 Cloud API의 Language가 달라지는게 아니라는 뜻이다. 기본적으로 Libcloud와 Jcloud로 만든 응용 프로그램은 각 언어에 맞는 컴파일러를 통해 컴파일 하게 된다. 이 과정에서 이 API를 사용하기 위한 Plugin은 특정 언어 java, python에만 동작하게 되어 있어 이러한 기능을 C로 비슷하게 만들어놓고 컴파일을 돌릴 시에 해당 API 호출에 대한 Plugin이 개발되어 있지 않기 때문에 동작 되지 않는다. 하지만 Deltacloud는 위 두 API와 구조적으로 전혀 다른 REST방식의 API이므로 어떠한 언어로 작성된 클라이언트 어플리케이션에서 REST API호출만 하면 Deltacloud Server에 접근이 가능하므로 사용이 가능하다. 또한 libcloud, jcloud와 Deltacloud간의 차이점은 Deltacloud는 WEB service로 사용할 수 있는 유일한 클라우드 API인것이다. Jcloud와 Libcloud는 콘솔 기반의 어플리케이션을 만들 때 사용되는 API이다. Deltacloud는 Deltacloud Portal(Deltacloud API의 웹기반 UI)를 통해 웹 서비스를 사용할 수 있다. 즉 다시 말해 REST API로 호출 받는 Deltacloud Server는 내부적으로 두가지 중요한 영역이 있다. 첫 번째 부분에는 수신되는 HTTP요청과 답변 형식이 (REQUEST / RESPONSE) 부분이 일반 웹서비스의 작업을 띠고 있고, 두번 째 부분은 생성할 실제 서버에 대한 Concepts가 없어도 클라우드 드라이버 API를 연결하게 하는 간단한 인터페이스로 구성되어 있다.
< DeltacloudServer Architecture >
Jcloud와 Libcloud는 WebService를 지원하는 API가 없고 두 API는 구조 자체가 콘솔 기반의 어플리케이션을 만드는 것이 주 된 목적이다.
본 Paper에서 다룬 Deltacloud, LIbcloud, Jcloud에 대한 기능적 비교는 다음 표와 같다.
Jcloud |
Libcloud |
Deltacloud | |
Create New Image |
YES |
NO |
YES |
Create New instance |
YES |
YES |
YES |
Instance Control (Start/Stop/Reboot/Desottory> |
NO |
YES |
YES |
LIST ALL/GET hardwareprofile,Realms,image,Instacne |
YES |
YES |
YES |
< Compare 3 Cloud API Functionality >
'Cloud > 멀티클라우드' 카테고리의 다른 글
Cloud API Components (0) | 2013.10.23 |
---|---|
Cloud API Call Architecture (0) | 2013.10.23 |
[Paper Review] Metacloud - Wind of Change: From Vendor Lock-in to the Meta Cloud (0) | 2013.10.23 |
Jcloud (0) | 2013.10.23 |
Deltacloud 2013-02-21 (0) | 2013.10.23 |