학습내용

  • 하이퍼바이저 기반 가상화의 특징
  • 전가상화와 반가상화
  • 하이퍼바이저 종류


학습목표

  • 하이퍼바이저의 종류와 가상화의 기본 개념에 대해 알아본다.
  • 전가상화와 반가상화기술에 대해 이해하고 차이에 대해 알아본다.
  • 하이퍼바이저별 특징에 대해 알아본다.


하이퍼바이저 기반 가상화의 특징


가상화 관련 기본개념

  • 하이퍼바이저 : 호스트시스템에서 다수의 게스트OS를 돌리기 위한 플랫폼
    • 예) Vmware, Oracle VirtualBox
  • 호스트OS
    • 물리시스템(컴퓨터)에 설치된 OS
  • 게스트OS
    • 가상머신/컨테이너 위에 설치된 OS

  • 예) 윈도우(호스트OS) → VMware(하이퍼바이저) → 윈도우(게스트OS)

하이퍼바이저 유형

  • 타입1 : 하이퍼바이저가 하드웨어 위에서 바로 실행 (Vmware ESXI 솔루션)
  • 타입2 : 호스트OS위에 하이퍼바이저를 실행시키는 방식

하이퍼바이저기반 가상화의 특징

  • 시스템가상화로 인해 다양한 게스트OS를 실행할 수 있음.
    • 윈도우/리눅스/OSX/NAS ...
  • 물리시스템과 게스트OS간의 가상화 기능으로 인한 성능 저하
    • 약 10~15% 정도의 오버헤드
    • 호스트OS와 게스트OS간의 기능 중복(스케줄링 등)


전가상화 반가상화

전가상화(Full Virtualization)

  • 하드웨어를 완전히 가상화
  • OS제약 없이 사용할 수 있음
  • 게스트OS는 자신이 가상머신 위에서 동작하고 있다는 것 인식 불가
  • 시스템에서 물리적인 가상화 지원기능 필요(인텔 VT-x, AMD-v)
    • CPU자체에서 지원되어야함, 저가형 셀러론CPU일 경우 VTX가 지원안되는 경우가 있음.
  • 게스트OS에서 물리자원 직접 접근 불가
    • 반드시 하이퍼바이저를 통해서 접근해야함 → 성능저하


반가상화(Para Virtualization)

  • 게스트OS가 자신이 가상머신 위에서 동작하고 있다는 것을 인식
  • OS제약이 있음
    • OS의 제약, 커널을 수정해야 함(주로 리눅스만 됨)
  • 게스트OS에서 물리자원 직접 접근 가능(Passthrough)
    • → 성능개선
    • HyperCalls(OS명령어)


하이퍼바이저 종류

  • VMWare
    • 대표적인 상용 하이퍼바이저
    • ESXi / Workstation / WorkStation Player
      • ESXi : Type1
      • Workstation / WorkStation Player : Type2
  • MS Hyper-V
    • 윈도우서버에 통합
  • Ctrix Xen(오픈소스)
    • 최초의 반가상화 하이퍼바이저
    • 오픈소스
      • Xen전용으로 Modified 커널을 가진 하이퍼바이저
      • 초창기성능이 좋았지만, 현재 다른 하이퍼바이저와 큰 차이는 없음.
  • KVM (오픈소스)
    • OpenStack에서 사용하는 하이퍼바이저
      • 오픈소스 클라우드 구축 솔루션
    • 하이퍼바이저를 커널의 '서브모듈'로 제공 (.ko)
      • 리눅스 커널에 통합시킨 형태의 하이퍼바이저
    • 메모리관리자/파일시스템/하이퍼바이저
  • 패러렐즈 (Parallels)
    • OSX기반의 하이퍼바이저
  • 오라클 버추얼박스(Oracle VirtualBox)
    • 오라클(구 썬마이크로시스템즈)에서 만든 GPL(라이센스)기반의 하이퍼바이저
    • 무료라이선스로 교육 및 테스트용
    • 단점 : 그래픽 가속을 지원하지 않으므로, 성능이 떨어짐


도커와 같은 컨테이너 기술의 효용성

도커와 같은 컨테이너 기반 기술은 VMWare로 대표되는 하이퍼바이저 기술과 다르게 실행환경의 분리(isolation)라는 개념에서 출발한 개념입니다.

예를 들면 하나의 프로그램을 설치하고 이에 필요한 라이브러리가 있는데, 이를 설치하게 되면 기존시스템에서는 보통 시스템에 영향을 주게 됩니다.

프로그램간 충돌이나 여러가지 문제를 야기하는 경우가 많습니다.

이를 프로그래밍에서는 의존성(Dependency)이라고 합니다. 프로그램 간 궁합, 버전별 궁합과 같은 것을 따져야 하는 것입니다.

프로그램에서 인텔과 AMD CPU종류를 따지고, OS가 32bit냐 64bit냐에 따라 수행 여부가 결정되고, 게임을 할때 NVIDIA비디오 카드냐 AMD비디오카드냐에 따라 수행되기도 하고 성능이 달라지기도 합니다.

윈도우 버전에 따라 DirectX게임들이 수행되고, 수행되지 않는 것은 이제 상식이 되었습니다.

이런 복잡한 상황을 해결하는 것이 컨테이너 기반 가상화입니다.

도커에서는 컨테이너끼리 서로 영향을 미치지 않습니다. 예를 들면 MySQL이나 우분투 서버를 버전별로 설치해서 각각을 아주 쉽게 테스트할 수 있고, 일반 시스템에서 이런 작업을 하려면 보통 까다로운 작업을 해야합니다. 하이퍼바이저에서 가능하지만 디스크관련 설정작업을 해줘야 합니다.

그리고 기존의 프로그램들은 배포(deploy)에 올려두면 손쉽게 다운로드 (Checkout)할 수 있습니다.

서버가 수십, 수백 대라도 문제가 없습니다. 다른 무엇보다도 도커는 가볍습니다.

도커 기반으로 프로그램을 설치하면 2~3% 오버헤드로 시스템을 돌릴 수 있습니다.

이는 하이퍼바이저보다 크게 대별되는 점입니다. 물론 현재는 리눅스 기술에 한정되어 있지만 계속 연구중이라 곧 다른 OS에서 네이티브로 지원이 될것입니다.

앞에서 언급한 이런 특징들로 인해서 도커는 서버사이드에서 굉장히 환영받고 있습니다.

이를 잘 활용하면 기존 가상화기술보다 휠씬 효율적인 서비스를 구축할 수 있습니다.

즉, 비용절약을 많이 할 수 있다는 얘기 입니다. 도커는 구글과 같은 대형 클라우드에 신속히 적용되고 자신의 가치를 증명하고 있습니다.



  • No labels
Write a comment…