카테고리 없음

연습용

표독's 2016. 8. 22. 18:02


라. 임팔라의 데이터 모델

임팔라는 하둡 분산 파일 시스템에 데이터를 저장한다. 어떤 저장 포맷을 사용하느냐에 따라 데이터 조회시 처리 성능이 달라진다. 하둡의 기본 파일 포맷인 텍스트나 시퀀스 파일은 로우 단위의 데이터 저장 방식을 사용한다. 컬럼 단위의 파일 저장 포맷인 RCFile을 사용할 경우, 데이터 처리 과정에서 발생하는 디스크 입출력 양을 현저하게 줄일 수 있다. 로우 단위로 저장 시, 테이블에서 하나의 컬럼을 읽든 전체 테이블을 읽든 전체 테이블을 읽든 동일한 디스크 입출력이 발생한다. 반면 컬럼 단위의 저장 포맷을 사용하면,  읽고자 하는 컬럼 만큼의 디스크 입출력이 발생하기 때문에 처리 성능을 개선할 수 있다. 물론 전체 컬럼들을 모두 조회하는 질의는 저장 포맷에 의해 성능이 영향을 받지 않는다.


테스트 결과를 따르면, 컬럼 파일 포맷을 사용했을 때 처리 시간이 덜 걸린다. 적은 수의 컬럼을 읽을 수록 훨씬 빠른 처리 성능을 보여주고 있다. 반면 기존 방식인 로우 파일 포맷을 사용해 레코드를 읽을 때는 하나의 컬럼에 접근해도 항상 전체를 읽는 것과 같은 처리 시간을 보여주고 있다. 컬럼 파일 포맷을 사용하는 것이 효율적임이 증명된 셈이다. 다만 하둡에 저장된 파일이 처음부터 컬럼 파일 포맷을 사용하지 않았을 경우, 파일 포맷 변경 작업을 해주어야 한다.


제3절 클라우드 인프라 기술


클라우드 컴퓨팅은 동적으로 확장할 수 있는 가상화 자원들을 인터넷으로 서비스 할 수 있는 기술을 말한다. 이러한 클라우드 서비스들은 SaaS(Software as a Service), PaaS(Platform as a Service), IaaS(Infrastrcure as a Service) 등 크게 3가지 유형으로 나뉜다. VMware나 Xen과 같은 서버 가상화 기술은 데이터센터나 기업들에게 인프라스트럭처를 위한 클라우드 서비스의 가능성을 보여주고 있다. 아마존은 S3(Simple Storage Service)와 EC2(Elastice Cloud Computing) 환경을 제공함으로써 플랫폼을 위한 클라우드 서비스를 최초로 실현해왔다. 또한 구글은 AppEngine, Apps, Gears, Gadgets 등을 제공함으로써 명실공히 웹 기반의 다양한 소프트웨어들이 클라우드 서비스로서 어떻게 구체화될 수 있는지를 보여주고 있다.

클라우드 컴퓨팅에서 인프라 기술은 근간이 되는 기술이며, 인프라 기술들 중에서도 가장 기반이 되는 기술이라고 할 수 있는 서버 가상화 기술은 물리적인 서버와 운영체제 사이에 적절한 계층을 추가해 서버를 사용하는 사용자에게 물리적인 자원은 숨기고 논리적인 자원만을 보여주는 기술을 말한다. 서버 가상화는 하나의 서버에서 여러 개의 애플리케이션, 미들웨어, 운영체제들이 서로 영향을 미치지 않으면서 동시에 사용할 수 있도록 해준다.. 서버 가상화를 가능하게 하는 기술은 아주 다양하며 메인프레임, 유닉스 서버, x86 서버 등에 따라 서로 다른 기술이나 분류체계가 사용된다. 클라우드 컴퓨팅 환경에서 많이 사용되는 서버가 x86계열이기 때문에 여기서는 x86 서버 가상화 기술만을 다룬다. x86 계열 서버 군의 가장 큰 특징은 하드웨어, CPU, 운영체제의 공급 업체가 모두 다르다는 것이다. 이런 환경 때문에 가상화 기술도 업체에 따라 제공되는 수준이 아주 다양하다. 인텔, AMD 등과 같은 CPU 제공업체는 하드웨어 차원의 CPU 가상화를 주로 다루며, VMware나 마이크로소프트, 오픈소스 커뮤니티에서는 소프트웨어 기반의 가상화 제품을 내놓고 있다. 따라서 x86 서버의 가상화 기술은 하나의 업체만으로 설명할 수 없으며, 다른 업체와에 대한 관계를 나타내는 것이다. 그림에서 Hypervisor 계층에 있는 세부 분류는 최근 솔루션 제공업체에 의해 그 경계가 점점 사라지고 있다. 


서버 가상화 기술을 이용할 경우 얻을 수 있는 효과는 다음과 같다. 


가상머신 사이의 데이터 보호

하나의 물리적 서버에서 운영중인 서로 다른 가상 머신들 사이의 접속은 정상적인 네트워크 접속만을 허용한다. 가상머신 사이에는 보안적으로 서로 분리돼 데이터를 보호 받을 수 있다. 


예측하지 못한 장애로부터 보호

가상머신에서 수행중인 애플리케이션의 장애가 다른 가상머신에는 전혀 영향을 미치지 않는다. 애플리케이션, 운영체제의 장애로부터 보호 받을 수 있다.


공유 자원에 대한 강제 사용의 거부

하나의 가상머신은 할당된 자원 이상을 가져가는 것을 차단할 수 있다. 이런 기능을 통해 다른 가상머신에 할당된 자원의 부족 현상을 차단할 수 있다. 예를 들어, 하나의 가상머신의 I/O 병목 현상이 발생해도 다른 가상머신에서 I/O 병목 현상이 발생하지 않는다.


서버 통합

서버 가상화를 통해 얻을 수 있는 가장 일반적인 효과이다. 서비스, 데이터, 사용자 등의 증가로 더 많은 컴퓨팅 자원이 필요해졌지만 데이터 센터의 공간, 전원, 냉각장치는 제한적이다. 이런 문제를 해결하기 위해 기존 서버의 용량을 증설하고 가상머신을 추가함으로써 동일한 데이터센터의 물리적 자원(공간, 전원 등)을 이용하면서 더 많은 서버를 운영할 수 있다.


자원 할당에 대한 증가된 유연성

수시로 변화하는 각 가상머신의 자원 요구량에 맞추어 전체 시스템 자원을 재배치함으로써 자원 활용도를 극대와 할 수 있다.


테스팅

다양한 운영체제나 운영환경에서 테스트가 필요한 경우, 새로운 서버를 추가하지 않아도 테스트 환경을 구성할 수 있다. 부하 테스트가 필요한 경우에도 일시적으로 자원을 줄이는 방법으로 부하 상황을 만들 수 있으며, 다수의 부하 생성 역할을 수행하는 노드도 쉽게 추가할 수 있다.


정확하고 안전한 서버 사이징

필요한 자원만큼만 가상머신을 할당할 수 있으며, 사이징 예측이 불확실한 서버를 구성할 때에도 일단 확보된 리소스를 이용하여 할당한 후 쉽게 추가로 할당할 수 있다.


시스템 관리

마이그레이션 기능을 이용할 경우 운영 중인 가상머신의 중지 없이 가상머신을 다른 물리적인 서버로 이동시킬 수 있다. 이런 기능을 이용하여 다음과 같은 업무를 쉽게 수행할 수 있다.

 - 하드웨어 장애: 서버에 물리적으로 구성된 여러 디스크 중 1개의 디스크에 장애가 발생했을 때, 장애 발생 장비에서 운영되던 가상머신을 서비스 중지 없이 다른 장비로 이동한 후 장애가 발생한 장비의 디스크를 교체한 후 다시 서비스에 투입할 수 있다.

 - 로드 밸런싱: 특정 가상 서버나 가상 서버가 수행중인 물리적인 서버에 부하가 집중되는 경우 여유있는 서버로 가상머신을 이동시킨다.

 - 업그레이드 : 장비의 CPU 추가나 메모리 추가, 디스크 증설 등과 같은 작업이 필요한 경우 다른 장비로 가상머신을 이동시킨 후 업그레이드 작업을 수행할 수 있다.


가. CPU 가상화

하이퍼바이저(Hypervisor)는 물리적 서버 위에 존재하는 가상화 레이어를 통해 운영체제가 수행하는데 필요한 하드웨어 환경을 가상으로 만들어 준다. 엄격하게 구분할 경우에는 차이가 있지만, 일반적으로 가상머신(Virtual machine)을 하이퍼바이저라고 할 수 있다. 하이퍼바이저가 서버 가상화 기술의 핵심으로 x86계열 서버 가상화에서는 소프트웨어 기반으로 하이퍼바이저를 구성한다. 하이퍼바이저를 통해 사용자는 추가 하드웨어 구입 없이 새로운 운영체제의 설치, 애플리케이션의 테스팅 및 업그레이드를 동일한 물리적 서버에서 동시에 수행할 수 있다.


하이퍼바이저는 VMM(Virtual Machine Monitor) 이라고도 하며, 다음과 같은 기능을 수행한다.


하드웨어 환경 에뮬레이션

실행환경 격리

시스템 자원 할당

소프트웨어 스택 보존


하이퍼바이저와 관련된 기술을 분류하는 방법은 여러 가지가 있다. 

플랫폼 별로 : 

x86 계열에는 VMware, MS Virual Server, Xen 등이 있다.

유닉스 계열 IBM의 POWER Hypervisor 등이 있다.

메인프레임 계열로는 z/VM과 하드웨어 펌웨어로 분류되는 PR/SM 등이 있다. 이 문서에서는 일반적으로 많이 통용되는 방식인 가상화를 제공하는 하이퍼바이저의 위치아 기능에 따라 분류한다. 가상화를 제공하는 하이퍼바이저가 물리적인 하드웨어 또는 호스트 운영체제와의 관계에서 어디에서 위치하는지에 따라 베어메탈(Bare-metal) 하이퍼바이저와 호스트 기반(Hosted) 하이퍼바이저로 나뉠 수 있다.

베어메탈 하이퍼바이저는 하드웨어와 호스트 운영체제 사이에 위치하며, 호스트 기반 하이퍼바이저는 호스트 운영체제와 게스트 운영체제 사이에 위치한다.

베어메탈 하이퍼바이저는 다시 반가상화(Para Virtualization)과 완전가상화(Full Virtualization)로 구분할 수 있다. 다음 그림은 하이퍼바이저 가상화 기술에 대한 분류를 나타낸다.


최근에는 하이퍼바이저를 제공하는 소프트웨어 벤더들이 다양한 가상화 기법을 도입하고 있으며, CPU 제조업체에서도 하드웨어에서 가상화 기술을 지원하는 등 새로운 가상화 방법이 계속 나오고 있기 때문에 서버 가상화 기술을 정확하게 분류하기는 힘들다.

X86 계열 운영체제는 자신의 모든 하드웨어에 대한 제어 소유권을 갖고 있다는 가정 아래 하드웨어에 직접 명령을 수행하는 방식으로 디자인돼 있다. x86 아키텍처는 하드웨어에 대한 접근 권한을 관리하기 위해 Ring 0, 1, 2, 3, 등 4개의 레벨로 구성돼 있다. 일반적으로 사용자 애플리케이션은 Ring 3 레벨로 수행되며, 운영체제의 경우 메모리나 하드웨어에 직접 접근해야 하기 때문에 Ring 0 레벨에서 수행된다.


가상 머신 내에서도 운영체제가 필요하고 이 운영체제는 Ring 0의 권한을 필요로 하게 된다. 가상머신의 운영체제가 응용 애플리케이션 권한(Ring 3)으로 수행될 경우 x86 아키텍처에서는 복잡한 문제가 발생한다. Ring 3에서 수행된 가상머신 운영체제에서 Ring 0 수준의 명령을 호출하면 가상화를 지원하는 계층에서 이를 Ring 0 수준의 명령어로 다시 변환해 실행해야 하며, 이를 위해 가상화 지원 계층은 반드시 Ring 0 레벨 (Intel VT-x, AMD-V에서는 Ring -1)로 수행되어야 한다. x86 아키텍처에서 가상화 기술의 핵심은 가상머신이 요청하는 privileged 명령어를 어떻게, 어떤 계층에서 처리 하느냐이다. 가상화의 용어 중 완전 가상화(Full Virtaulization), 반가상화(Para Virtualization)라는 용어도 privileged 명령어를 어떻게 처리하느냐를 기준으로 분류한 것이다.


완전가상화

완전가상화는 CPU뿐만 아니라 메모리, 네트워크 장치 등 모든 자원을 하이퍼바이저가 직접 제어 관리하기 때문에 어떤 운영체제라도 수정하지 않고 설치가 가능한 장점이 있다. 하지만 하이퍼바이저가 자원을 직접 제어하기 때문에 성능에 영향을 미친다. 또한 자원들이 하이퍼바이저에 너무 밀접하게 연관돼있어 운영중인 게스트 운영체제에 할당된 CPU나 메모리 등의 자원에 대한 동적변경 작업이 단일 서버 내에서는 어렵다. 자원에 대한 동적변경을 하기 위해서는 VMware의 VMotion과 같은 솔루션의 도움을 받아야 한다.

완전가상화는 하이퍼바이저보다 우선순위가 낮은 가상머신에서는 실행되지 않는 privileged 명렁어에 대해서 trap을 발생시켜 하이퍼바이저에서 실행하는 방식으로, MS 윈도우와 같은 Guest OS가 하이퍼바이저 상에서 변경되지 않은 상태로 실행될 수 있는 장점이 있으나 Para Virtualization에 비해 속도가 느리다. VMware ESX server, MS Virtual Server 등의 제품이 완전가상화 기반 솔루션이다.

초기 Xen 에서는 완전가상화를 지원하지 않았지만, 최근 Intel VT, AMD- V 환경에서 완전가상화를 지원하고 있다.


하드웨어 지원 완전가상화

최근에는 완전가상화 방식에서 Intel VT-x, AMD-V CPU의 하드웨어에서 제공하는 가상화 기능을 이용하고 있다. 가상머신에서 메모리와 CPU 등의 하드웨어에 명령을 내릴 수 있는 반가상화 수준의성능을 발휘하도록 개선하고 있는 것이다.


CPU에 Ring-1 계층이 추가되었으며, 하이퍼바이저는 Ring-1 에서 수행되고 가상머신의 운영체제(Guest OS)는 Ring 0 에서 수행되어 privileged 명령어에 대해 추가로 변환 과정이 필요 없다. 하이퍼바이저를 거쳐 바로 하드웨어로 명령이 전달돼 빠른 성능을 보장한다. 윈도우 2008 서버의 Hyper-V는 반드시 가상화 지원 CPU만을 사용해야 한다.


인텔에서는 하드웨어 지원 가상화를 사용할 때 다음과 같은 점을 주의해야한다고 밝히고 있다.


하드웨어 지원 가상화를 사용하는 경우 CPU 사용률이 높아진다. 따라서 서버 통합을 목적으로 하는 경우 비효율적 일수도 있다.


인텔에서는 반가상화와 하드웨어 지원 완전가상화를 모두 사용하는 하이브리드 가상화를 제시하고 있다. Xen을 이용한 하이브리드 가상화의 경우, 반가상화용으로 수정된 운영체제에 하드웨어 지원 완전 가상화 모듈을 탑재해 명령어의 종류애 따라 반가상화 또는 완전가상화를 선택 사용하도록 한다.


반가상화

반가상화는 privileged 명령어를 게스트 운영제에서 hypercall로 하이퍼바이저에 전달하고, 하이퍼바이저는 hypercall에 대해서는 privilege 레벨에 상관없이 하드웨어로 명령을 수행시킨다. Hypercall은 게스트 운영체제에서 요청을 하면 하이퍼바이저에서 바로 하드웨어 명령을 실행하는 call을 말한다. 게스트 운영체제가 hypercall을 요청하기 위해서는 게스트 운영체제의 일부분이 수정 되어야 하며, Xen 기반의 리눅스 운영체제의 경우 20%정도 커널이 수정되었다고 한다. 수정된 게스트 운영체제는 CPU나 메모리와 같은 자원에 대한 직접적인 제어권을 가짐으로써 자원의 변화와 같은 동적 가상화 환경에 유연하게 적응할 수 있다. 따라서 반가상화 기반에는 CPU와 메모리 자원의 동적 변경이 서비스의 중단 없이 이루어 질 수 있으며, 완전가상화에 비해 성능이 뛰어나다. 반가상화는 privileged 명령어를 직접 호출(hypercall)하므로 속도는 빠르나 커널을 변경해야 하고, 완전가상화는 모듈과의 통신을 통해 처리하므로 속도는 느리나 커널 변경이 없다. VMware와 같은 상용 솔루션은 완전가상화와 반가상화의 장단점을 보완해 아키텍처, 기능, 성능 등에서 뚜렷한 차이가 없다.