Cloud API Call Architecture

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

Cloud API Call Architecture

MetaCloud는 응용 프로그램에 대한 클라우드 서비스의 선택과 개발을 개발자가 자유롭게 구축 할 수 있는 통합 클라우드 시스템 모델이다. 메타클라우드에서의 응용프로그램은 단 하나의 클라우드 공급업체의 서비스를 이용하는 것이 아닌 여러 공급업체의 서비스를 동시에 이용하거나, 서비스를 사용자의 입맛에 따라 서비스를 자유롭게 이동할 수 있다. 하지만 클라우드 서비스 업체마다 응용프로그램을 만들기 위한 API가 다르기 때문에 이를 완화시킬 하나의 추상화된 공통된 API가 필요하게 되었다. 이에 DeltaCloud, JCloud, LIbcloud등이 메타클라우드의 API로 등장하게 되었다. 각 API마다 기반 언어가 다르며, 지원되는 기능에 있어 차이점을 갖고 있다. 본 Paper에서는 메타클라우드 API를 사용하여 만든 응용프로그램이 각 클라우드 서비스 업체에 호출 하고 이어 호출 받은 해당 클라우드 서비스 업체에서 어떠한 과정을 거쳐 응용 프로그램이 요구한 API Call을 수행하는지에 대해 알아 보았다. .

먼저 ①메타클라우드 API로 만든 응용프로그램은 해당 클라우드 서비스 업체에 HTTP헤더에 사용자 인증정보를 실어 전송하게 된다. ②사용자 인증정보를 바탕으로 연결된 후, ③메타클라우드 API 내에 해당 클라우드 서비스 업체의 Driver를 사용하게 된다. 메타클라우드 API는 클라우드 서비스 공급업체에서 제공하는 API를 추상화 시켜 만든 API이므로 해당 서비스를 제어하는데 있어 기능적 문제점이 없다. 여기서 말하는 기능은 예를 들어 이미지를 만들고, 데이터센터 위치를 정하고 가상머신을 생성하고, 작동시키는 등의 작업을 말한다. 이러한 메타클라우드 호출구조에 이어 클라우드 서비스자체에서 예를 면 AWS의 경우 클라우드 시스템은 내부적으로 어떠한 System logic으로 동작하고, 어떠한 과정을 거쳐 VM을 만들고 동작하는지에 대해 알아 보았다.

AWS를 살펴보면, AWS는 Management Console이라는 GUI 인터페이스와, 개발자들이 쉽게 사용할 수 있는 API인터페이스를 제공하고 있다. 이에 개발자가 응용 프로그램에서 AWS에서 하는 기능을 만들기 위해서는 EC2 API(Amazon Elastic Compute Cloud API) 가 필요하다.

AWS Architecture

Amazon Compute Cloud(Amazon EC2)를 이용하여 응용프로그램을 만들기 위해서는 4가지 일을 해야 한다. 첫 번째로 Amazon Machine Image(AMI)를 만들어 소프트웨어를 하나의 이미지로 패키지화 하는데, 이 이미지에는 사용하는 운영체제와 환경 설정, 애플리케이션, 라이브러리가 들어가게 된다. AMI에는 소프트웨어 인스턴스를 부팅하는데 필요한 모든 정보가 들어가게 된다. 두 번째로 이러한 AMI를 Amazon S3(Amazon Simple Storage Service) 서비스의 저장소에 업로드 한다. 일단 저장소에 저장되면 해당 AMI에 안전하게 접근하여 사용할 수 있다. 이러한 S3 서비스와 상호작용하기 위해서는 SSH클라이언트로 접근해야 한다. 세 번째로 직접 만든 AMI를 Amazon EC2에 등록한다. Amazon EC2에 등록하면 해당 등록된 해당 AMI에 대한 고유번호(ID)를 받게 된다. 네 번째로 이 AMI ID와 이 AMI의 하나 이상의 인스턴스를 실행하고 모니터링하며, 또는 중지시키는 Amazon EC2 웹 서비스 API를 이용한다.

EC2 / AMI / Hypervisor / Xen

EC2 서비스를 시작하기 위해서는 어떤 운영체제를 사용할지 먼저 결정한다. 이를 AMI(Amazon Machine Image)라고 불리 우는데, 사용자가 AMI에서 데이터, 어플리케이션, 설정등을 S3위에 이미지 형태로 업로딩하면 EC2가 VM환경에서 AMI를 구동하는 형태로 사용을 하는 것이다. 이러한 System 구성이 가능하게 한 것은 바로 가상화 기술이다. 가상화 솔루션은 여러 개의 CPU를 가지고 있는 중형 서버에 여러 개의 서로 다른 OS인스턴스를 설치하여 저렴하게 서버를 운영할 수 있도록 해준다. 이러한 가상화 기술을 가능하게 해주는 소프트웨어가 바로 하이퍼바이저(Hypervisor)이다.

AMI는 Xen 기반으로 되어 있다. Xen은 반 가상화(para-virtualization)기법을 사용하게 되는데, 운영체제가 직접 하드웨어를 제어하지 않고 중간 레이어(Layer)인 하이퍼바이저에게 요청하고, 하이퍼바이저는 하드웨어에 요청해서 응답 받는 수직 구조를 가지고 있다. 전가상화 방식에 비해 호출이 적게 일어나기 때문에 상대적으로 성능은 높다. 그러나 Xen위에 동작하는 운영체제는 커널의 일부 소스가 수정되어야 하는 단점이 있다. 이어서 운영체제 이미지(AMI)를 선택한 후에는 컴퓨팅 자원을 선택한다. 컴퓨팅 자원을 EC2 인스턴스라고 표현하는데 선택할 수 있는 타입은 AWS에서 총 10가지를 지원하고 있다. 또한 한번 설정되어 운영중인 EC2 컴퓨팅 인스턴스는 변경할 수가 없다.

< AWS Architecture>

 

생성된 EC2는 IP와 Public DNS명을 받는다. EC2는 기본적인 계정관리, ACL관리, 로드밸런서(Load Balancer), 모니터링(Monitoring)이 가능하다. 위 EC2서비스를 시작하기 위한 작업은 Management Console에서도 가능하지만 개발자가 직접 EC2 Command Tool을 사용하여 API작업을 통해 구축 할 수도 있다.

Libvirt / 통합 IAAS 솔루션 ( OpenNebula)

RedHat에서는 Libvirt 라이브러리를 플랫폼 가상화(하이퍼바이저 및 VM)을 관리하기 위한 API로 도입했다. Libvirt가 흥미로운 이유는 수많은 하이퍼바이저 솔루션(KVM, XEN등)을 지원하고 수많은 언어( C, Python, Ruby) 에 대한 API 바인딩을 제공하기 때문이다. Libvirt는 플랫폼 하이퍼바이저와의 직접적인 인터페이스를 통해 API를 더 큰 인프라 관리 솔루션으로 확장하는 " 최종 관리 단계 " 를 제공한다. Libvirt를 사용하면 VM을 쉽게 시작하고 중지할 수 있을 뿐만 아니라 API를 사용하여 플랫폼 간에 VM을 마이그레이션하는 등의 작업도 수행할 수 있다.

Eucalyptus, OpenNebula, Numbus와 같은 오픈 소스 패키지에서는 모든 필수 기능 (가상화, 관리, 인터페이스 및 보안 포함)을 단일 패키지로 통합하는 포괄적인 방법을 사용한다. 이러한 패키지를 서버 및 스토리지 네트워크에 추가하면 유연한 클라우드 컴퓨팅 및 스토리지 인프라 (IAAS)를 구축 할 수 있다. 이 중에 OpenNebula는 MetaCloud에서 제시한 Hybrid Cloud 개념을 지원하는데 개인용 클라우드 인프라와 공용 클라우드 인프라(AWS)를 결합하여 확장 수준을 더 높인다. OpenNebula는 Xen, KVM등을 지원하며, Libvirt를 사용하여 관리 및 검사 작업을 수행한다.

 

< Libvirt – Opennebula Architecture >

 

EC2는 하이퍼바이저 Zen을 사용하여 확장성 있고 가상화된 개인 서버를 제공하는 Publc Cloud이다. 통합 IAAS 솔루션인 Opennebula 나 OpenStack은 Public Cloud Vender(EC2)의 서비스를 이용 할 수 있을 뿐만 아니라 직접 다양한 KVM, ZEN 하이퍼바이저를 사용하여 인스턴스를 직접 구축하여 Private Cloud를 구축할 수 있다. 뿐만 아니라 이러한 Public Cloud와 Private 모두 사용이 가능한 Hybrid Cloud도 구축할 수 있다. 이러한 기술이 바탕이 되는 가장 중요한 솔루션은 바로 가상화 솔루션의 핵심인 다양한 하이퍼바이저에 대한 통합 솔루션이다. 각각 다른 하이퍼바이저에 대해 관리를 하려 할 때 XEN과 KVM모두 따로 설정하고 VM을 구축하는 것이 아닌 하나의 가상화 API를 통해 하이퍼바이저를 관리하는 솔루션이 바로 Libvirt이다. 위 그림에서 보듯이 Opennebula 상에서 Libvirt를 통해 다양한 하이퍼바이저를 하나의 API로 관리 하고, 뿐만 아니라 Xen기반에 EC2 인스턴스를 생성하는 AWS의 서비스 조차 관리 할 수 있게 되는 것이다. 반면 MetaCloud API는AWS, Rackspace 같은 Cloud Service Vendor 뿐만 아니라 통합 IAAS 솔루션인 Opennebula, Openstack등을 통합적으로 관리하는 솔루션인 것이다. 이를 그림으로 보면 다음과 같다.

 

< Cloud API Call Architecture >