Cloud API Components

2013. 10. 23. 21:14Cloud/멀티클라우드

Cloud API Components

< Cloud API Components (L:Metacloud ,R:Livirt >

클라우드 서비스 기반으로 운영되는 응용프로그램이 해당 클라우드 서비스의 특정 API를 사용해야 하는 문제를 해결해야 하는 문제를 메타클라우드 모델에서는 여러가지 기술을 통해 해결방안을 제시하고 있다. 그 중 표준화된 클라우드 프로그래밍 API로서 제시하는 메타클라우드API는 추상적으로 통일된 프로그래밍 API를 개발자에게 제공함으로서 특정 클라우드 공급업체로만 사용이 가능한 운용프로그램이 아닌 어떠한 클라우드 공급업체 서비스와도 사용이 가능한 응용프로그램을 개발 할 수 있게 해준다. 이 API의 구조를 계층별로 살펴보면 ①Driver Layer ②API Layer 2가지로 나뉜다고 할 수 있다. Driver Layer에서는 다른 API와의 Binding을 가능케 해주는 부분이 있으며, 클라우드 서비스 공급업체와의 연결과 사용을 위한 Driver가 존재 한다. 이러한 구성으로 이루어진 메타클라우드 구성요소들은 각기 다른 클라우드 서비스 업체와의 Manager들과 연결되어 이를 API를 통해 조작할 수 있다. 메타클라우드 API Layer에서는 대표적으로 4가지로 나뉘는데 ①Compute API ②Storage API ③Loadbalance API ④DNS API 이다. ( *메타클라우드 API별로 다를 수 있음 ) ①Compute API 에서는 1)클라우드 리소스 프로바이저닝 2) VM마이그레이션 및 모니터링 3) VM컨트롤 기능을 각 클라우드 서비스 업체의 Compute Manager, VM Manager가 하는 일을 처리할 수 있는 함수들로 이루어져 있다. 이를 통해 2개의 Manager가 하는 일을 구현할 수 있다. 또 한 마찬가지로 ②Storage API 에서 예를 들어 AWS의 S3가 하는 일을 구현할 수 있으며 ③Loadbalance API에서는 클라우드 서비스 업체의 밸런서 기능 ④DNS API 에서는 클라우드 서비스업체의 DNS기능을 구현 할 수 있다.

 

메타클라우드 API와 달리 Libvirt는 다른 목적으로부터 시작된다. 가상화 솔루션인 하이퍼바이저는 한 개의 컴퓨팅 환경에서 다수개의 OS를 올리기 위해 사용되는 중간 계층의 소프트웨어이다. 이러한 하이퍼바이저를 통하여 가상머신을 올리고 하이퍼바이저를 통해 가상머신을 조작하게 되는데 이 때 이러한 부분을 응용 프로그램에서 조작 가능하게 하려 할 경우 필요한 것이 하이퍼바이저 API이다. 하이퍼바이저 API의 기능은 위 메타클라우드 Compute API의 기능과 비슷하다. ① 클라우드 리소스 자원들을 구성 및 프로바이저닝 ② VM마이그레이션 ③ VM인스턴스 컨트롤등의 기능을 지원한다. 이러한 하이퍼바이저의 API를 이용하여 개발자는 하나의 컴퓨팅 환경에서 다수개의 OS를 올릴 수 있게 되는것이다.

그렇다면 Libvirt는 무엇이며 왜 필요한 것일까 또한 메타클라우드 API와 어떠한 차이가 있는가? 에 대한 궁금증이 남아있다. 본 Paper 첫 부분에서 메타클라우드 모델이 필요한 이유에 대해서 설명을 했었다. 이와 비슷하게 설명을 하자면 한 개의 하이퍼바이저와 해당 하이퍼바이저의 API만을 사용하여 응용프로그램을 만들 경우에 다른 하이퍼바이저를 사용하는 응용프로그램을 만들어야 할 때 응용프로그램을 다시 재 개발 해야하는 문제점이 생긴다. 이러한 하이퍼바이저Lock-in을 막기 위해 개발된 API가 바로 Libvirt다. Libvirt의 가장 큰 목적은 다양한 하이퍼바이저를 하나의 API로 사용하는 응용 프로그램을 만들어 응용프로그램의 개발에 있어 유연성을 주기 위한 이유를 가지고 있다. Libvirt.h의 라이브러리의 API 함수들의 기능은 메타클라우드 API의 Compute API와 기능이 거의 비슷하다. 다만 차이점이 있다면 Libvirt는 직접 노드(Pysical Machine) 상에서 VM을 관리한다는 것이고 메타클라우드는 클라우드 서비스 업체의 VM을 관리 한다는 것에 있어서 차이점을 갖고 있다.

대부분의 메타클라우드 API들은 Libvirt Driver을 지원한다. 그럼 메타클라우드 API에서 Libvirt의 위치는 어디일까? 라는 궁금증이 생긴다. 메타클라우드 API는 클라우드 서비스업체의 Driver만 지원하는 것이 아니라 오픈소스플랫폼인 OpenNebular, OpenStack의 Driver도 지원한다. 오픈 소스 플랫폼은 클라우드 개발 환경에 있어서 개발자가 쉽게 개발할 수 있도록 지원해주는 메인 프레임이라 할 수 있다. 오픈 소스 플랫폼을 통해 개발자는 AWS와 같은 클라우드 서비스를 할 수 있다. 오픈 소스 플랫폼에서 기존 클라우드 서비스 업체의 Compute Manager기능과 가상머신을 올리기 위한 환경을 구현하기 위해서 하이퍼바이저의 API 필요하다. 하이퍼바이저 API를 사용해서 개발할 경우 사용하는 하이퍼바이저의 다양성을 위해 Libvirt를 사용하게 되는 것이다. 그렇다면 여기서 다시 의문이 남는다. Libvirt를 사용하지 않고 오픈 소스 플랫폼상에서 메타클라우드 API를 사용해서 Compute Manager의 기능을 만들 수 있지 않을까? 라는 궁금이 남는다. 하지만 메타클라우드를 사용해서 Compute Manager개발하는 경우 큰 문제점이 있다. 바로 메타클라우드에서는 하이퍼바이저와의 직접적인 연결은 지원하지 않는다는 것이다. 하이퍼바이저에 대한 연결이 지원이 되지 않기 때문에 당연히 하이퍼바이저의 기능을 메타클라우드에서 오버라이딩해서 사용할 수가 없게 되는 것이다. 그러므로 오픈 소스 플랫폼을 통한 개발에 있어 개발자들은 Libvirt나 하이퍼바이저API를 통해 Compute Manager부분을 개발 하고 있다.

본 Paper는 메타클라우드, Libvirt의 각기 다른 사용목적과 API의 구성을 설명하는 Paper이다. 메타클라우드 API와 Libvirt는 보기에는 하는일이 같아 혼동하기 쉽지만 개발 목적과 쓰이는 용도가 다르며, 쓰이는 위치가 다른 API이다. 메타클라우드 API는 각기 다른 클라우드 서비스와의 연결과 제어, 그리고 클라우드 서비스를 기반으로 하는 응용 프로그램에 대한 개발에 대한 유연성을 고려하기 위함이고 Libvirt API 는 각기 다른 하이퍼바이저 와의 연결과 제어 그리고 하이퍼바이저를 기반으로하는 응용 프로그램에 대한 유연성을 제공하기 위함이다.