[ADP_과목 2. 데이터 처리 기술 이해_제 2장 데이터 처리 기술_2] 본문

IT/ADP

[ADP_과목 2. 데이터 처리 기술 이해_제 2장 데이터 처리 기술_2]

호랑구야 2020. 9. 28. 09:00

* 다음 내용은 [데이터 분석 전문가 가이드] (2019년 개정판)을 읽고 정리한 내용입니다.

 2 분산 컴퓨팅 기술

 

  • 분산 컴퓨팅 기술
    • 저가형 서버들이 클러스터링을 수행하여 그것으로부터 다양한 리소스(CPU, 메모리, 하드디스크, 파일, 프로세스)들을 모아 표준화한 대규모 고성능 컴퓨팅 플랫폼을 구축하는 것
    • 최근 컴퓨팅 환경이 주목한다
    • 정보분석 분야(데이터 중심의 텍스트 마이닝 + 로그 모델링)에서 활용이 높다

1. MapReduce

  • 분할정복 방식으로 대용량 데이터를 병렬 처리하는 프로그래밍 모델
  • 특별한 옵션 없으면 Map Task 하나가 1개의 블록(64MB)을 대상으로 연산을 수행
  • Map 과정에서 생산된 중간 결과물을 Reduce Task들(사용자가 개수 지정)이 받아와 정렬 및 필터링 작업을 거쳐 최종 결과물을 생성

. 구글 MapReduce

  • 처리해야 할 데이터가 매우 커 수백 대 혹은 수천 대 서버들에 분산 처리 해야 함
  • 코드의 복잡성이 증가해 많은 개발 시간이 소요
  • 개발자에게 병렬화, 장애 복구 등 복잡성을 추상화하여 핵심 기능 구현에만 집중하게 하기위해 MapReduce를 개발
  • 논문으로 접할 수 있고, 실제 구현은 공개되지 않음
  • 프로그래밍 모델

    • Map
      • Key와 Value의 쌍들을 입력으로 받음
      • (Key, Value) 쌍은 Map을 거쳐 다수의 새로운 (Key, Value)쌍들로 변환되어 로컬 파일 시스템에 임시 저장
    • Reduce
      • 임시 파일들은 프레임워크에 의해 Reduce에 전송
      • 이때, 자동으로 Shuffling과 group by 정렬 후 Reduce 입력 레코드로 들어감
      • 형식은 Key와 Value의 리스트
      • 입력 레코드는 사용자가 정의한 Reduce 함수를 통해 최종 Output으로 산출
    • 장애 복구 등 세세한 이슈 신경쓰지 않고, Map과 Reduce 함수를 작성하는 것으로 대규모 병렬 연산 작업 수행이 가능하다
  • 실행과정

    • 사용자가 MapReduce 프로그램 작성해 실행
    • 마스터는 입력 데이터 소스를 갖고 스케쥴링
    • split
      • 하나의 큰 파일은 여러 개의 파일 split로 나뉨
      • Map 프로세스들의 할당 단위
      • 블록 사이즈인 64MB 혹은 128MB
    • split 수만큼 Map Task가 워커로부터 fork(시스템 호출)됨 동시에 실행되어 Output을 로컬 파일 시스템에 저장한다
    • Output 값들은 Partitioner라는 Reduce 번호를 할당해 주는 클래스를 통해, 어떤 Reduce에 보내질지 정해진다
    • Default로는 Key의 Hash값을 Reduce의 개수로 Modular 계산한 값(나누기에서 나머지값)이 부여되어, 동일한 Key는 같은 Reduce로 배정된다
    • Map 단계가 끝나면, 원격의 Reduce 워커들이 자기에 할당된 Map의 중간 값들을 네트워크로 가진다
    • 사용자의 Reduce 로직을 실행해 최종 산출물을 얻어낸다
    • Reduce의 개수는 Map의 개수보다 적다
    • Map의 중간 데이터 사이즈 따라 성능이 좌우된다
    • 분산 Grep이나 빈도 수 계산 등 작업은 Map 단계 거치며 데이터 사이즈가 크게 줄어들고 줄어든 크기만큼 Reduce 오버헤드도 줄어들어 성능상 이점이 많다
    • 정렬같은 작업은 그대로 Reduce에 전해지므로, 오버헤드에 따른 수행 성능이 저하되므로 MapReduce 모델이 적합하지 않은 작업이다
  • 폴트톨러런스

    • 각 프로세스에서 Master에게 Task 진행 상태를 주기적으로 보낸다
    • Master는 특정 워커의 Task가 더 이상 진행되지 않거나, 상태 정보를 일정 시간 동안(Heartbeat Timeout) 받지 못하면, 문제가 있다고 결론짓는다
    • Shared Nothing 아키텍처이므로, 장애 복구 메커니즘 간단하다
    • 해당 Task가 처리해야 할 데이터 정보만 다른 워커에게 전해주고, 받은 데이터 정보를 인자로 새로운 Task를 재실행한다

 

. Hadoop MapReduce

  • 구글에서 발표한 논문을 바탕으로 자바 언어로 구현한 시스템
  • 분산파일 시스템인 HDFS와, Hadoop MapReduce가 하둡의 핵심 구성요소
  • 성능과 안정성이 검증된 상태
  • 아키텍쳐

    • 데몬 관점에서 4개의 구성요소를 가짐
    • 분산 파일 시스템의 데몬
      • NameNode
        • 분산 파일 시스템의 데몬
        • 이름 영역을 관리
      • DataNode
        • 분산 파일 시스템의 데몬
        • 데이터 입출력 처리를 수행
    • JobTracker
      • MapReduce 시스템의 마스터
      • 1) 클라이언트에서 하둡작업을 실행 시, 프로그램 바이너리와 입출력 디렉터리와 같은 환경정보들을 전송받는다
      • 2) 받은 작업을 다수의 Task로 쪼갠 후, TaskTracker에게 보낸다
      • 5) Heartbeat을 받으면 해당 TaskTracker에게 할당된 Task가 있는지 Queue에서 살펴보고
        • 6) 있으면 Heartbeat의 Response 메시지에 Task 정보를 실어 TaskTracker에게 보낸다
    • TaskTracker
      • 워커 데몬
      • 3) 받은 Task를 데이터 지역성을 보장할지 감안해 내부적으로 스케쥴링하여 Queue에 저장한다
      • 4) JobTracker에게 3초에 한 번씩 주기적으로 Heartbeat을 보내 살아있음을 알린다
      • 7) Response 메시지 내용을 분석해, 프로세스를 fork해 자기에게 할당된 Task를 처리한다
  • 하둡의 성능

    • Sort는 어떤 작업을 하더라도, Map에서 Reduce로 넘어가는 과정에서 항상 발생하는 내부적 프로세스
    • 데이터가 커질수록 처리 시간이 선형적으로 증가한다
    • 플랫폼 자체적으로 선형 확장성 가져야 시간을 줄일 수 있다
    • Sort는 분산컴퓨팅 플랫폼의 성능과 확장성을 동시에 측정 할 수 있는 좋은 실험이다
  • 하둡 사용 현황

    • 야후
      • 하둡 프로젝트의 주요 후원자로 가장 활발하게 사용한다
      • 2만대 서버에 설치, 가장 큰 단일 클러스터는 약 4000대 규모
      • 연구 개발 및 서비스용으로 사용한다
      • WebMap이라는 그래프 기반 검색 엔진
        • 알려진 웹 페이지들의 모든 edge 및 링크 정보를 계산, 그 결과를 다양한 검색 애플리케이션에서 사용하는 거대한 그래프
        • 주기적으로 100개 이상의 MapReduce 작업을 체인 형태로 묶어 실행한다
        • 출력 결과만 압축해 300TB 이상 나올 정도로 대용량 데이터를 다룬다
        • 인터넷 포털과 IT 서비스 회사들에서 대용량 데이터 분석 등 다양한 목적으로 하둡을 사용한다

 

2. 병렬 쿼리 시스템

스크립트나 사용자에게 친숙한 쿼리 인터페이스를 통해 병렬 처리가능한 시스템이 개발되었다

. 구글 Sawzall

  • MapReduce를 추상화한 스크립트 형태의 병렬 프로그래밍 언어
  • 사용자가 이해하기 쉬운 인터페이스를 제공, 개발 생산성을 높임
  • MapReduce 이해가 없는 사용자도 쉽게 병렬 프로그래밍 가능
  • 구글 전체 MapReduce의 30%가 Sawzall 작업
  • MapReduce를 추상화한 최초의 병렬 쿼리 언어

 

. 아파치 Pig

  • 야후에서 개발한 오픈소스 프로젝트화한 데이터 처리를 위한 고차원 언어
  • Hadoop MapReduce위에서 동작하는 추상화된 병렬 처리 언어
  • 아파트 하둡의 서브 프로젝트
  • 네이티브 MapReduce와 비교한 성능은 90%
  • 야후 전체 MapReduce 작업의 약 30%가 Pig 이용
  • 개발 동기

    • MapReduce의 코드 특성상 의미 파악이 어려울 수 있어 공유가 잘 안되므로 의미적으로 SQL과 비슷하나 새로운 언어를 정의하였는데, 그것이 Pig Latin이라는 텍스터 언어이다
  • 사용 예제

    • 기본적으로 무공유구조이기 때문에 일반 RDB(관계형 데이터베이스)로는 쉽게 해결이 가능한 Join 연산이 매우 복잡해진다
    • 코드 길이는 1/20 이하로, 개발 시간도 1/10 이하로 감소된다
    • 프로그래밍 코드도 더 이해하기 쉽고 직관적이어서 공유하기 편하다
  • 사용 현황

    • 야후 내부 검색 인프라, 광고 연관성 분석, 사용자 의도 분석, 검색엔진 쿼리 분석, Hoffman's PLSI 등 이다

 

. 아파치 하이브

  • 페이스북에서 개발한 데이터 웨어하우징 인프라로 아파치 내 하둡 서브 프로젝트로 등록되어 개발중이다
  • 하둡 플랫폼위에서 동작한다
  • SQL 기반의 쿼리 언어와 JDBC를 지원한다
  • 하둡에서 가장 많이 사용되는 병렬처리 기능인, Hadoop-Streaming을 쿼리 내부에 삽입하여 사용이 가능하다
  • 사용 편의성과 성능을 동시에 지원한다
  • 개발 배경

    • 페이스북
      • 사용 DBMS 기반의 데이터 웨어하우스 시스템을 운영한다
      • 라이선스 등 관리 및 운영비용 절감의 필요성이 대두되었다
    • 하둡으로 교체 후에 필요한 기능, CLI, 코딩 없이 AD-hoc 질의 기능, 스키마 정보 관리 기능 등을 하나씩 구현하였다
    • 현재 5000대 서버로 구성된 하이브-하둡 클러스터 존재한다
    • 수십 PB 이상 압축된 데이터를 관리한다
    • 일일 데이터 처리량은 수십 PB로 동시에 수천 건 이상의 애드훅 분석 쿼리 작업을 수행한다
  • 하이브 아키텍쳐

    • MetaStore
      • Raw File의 콘텐츠를 일종의 테이블 컬럼처럼 구조화된 형태로 관리할 수 있게 해주는 스키마 저장소
      • Embedded Derby를 기본 DB로 사용한다
    • 앞 단의 CLI를 이용해 Join, Group by 등 SQL 쿼리를 수행한다
    • Parser에서 쿼리를 받아 구문 분석한 후
    • MetaStore에서 테이블과 파티션 정보를 참조해 Execution Plan을 만들어 Execution Engine에 보낸다
    • Execution Engine
      • 하둡의 JobTracker와 NameNode와 통신을 담당하는 창구 역할
      • MapReduce 작업 실행하고 파일을 관리
    • SerDe
      • Serializer / Deserializer의 줄임말
      • 테이블의 로우, 컬럼의 구분자 등 저장 포맷을 정의해주는 컴포넌트
      • Hadoop의 InputFormat과 OutputFormat에 해당
  • DDL(Data Definition Language)

    • Create Table, Drop Table, Rename Table
    • Alter Table, Add Column
    • Show Table, Describe Table
  • DML(Data Manipulation Language)

    • 로컬에서 DFS로 LOAD DATA
    • 쿼리 결과를 테이블, 로컬 파일시스템, DFS에 저장
  • Query

    • Select, Group by, Sort by, Joins, Union, Sub Queries, Sampling, Transform

 

 

3. SQL on Hadoop

  • 실제 업무에서는 데이터 실시간 조회, 처리 업무가 많아 실시간 SQL 질의 분석 기술이 필요
  • 하둡상에 저장된 대용량 데이터를 대화형식의 SQL 질의를 통해 처리, 분석
  • 가장 많이 회자되고 있는 기술은 임팔라

. 임팔라 개요

  • 가장 먼저 대중에게 공개된 기술
  • Cloudera가 Dremel의 논문을 읽은 후, 하둡 상에서 실시간, ad-hoc 질의가 가능할 것 같아 개발
  • 12년 10월 시험 버전을 공개
  • 13년 5월 정식 버전을 배포
  • 분석과 트랜잭션 처리 모두 지원 목표인 SQL 질의 엔진
  • 하둡과 Hbase에 저장된 데이터를 대상으로 SQL 질의 가능
  • 고성능 위해 C++ 사용하고, 실행 중 최적화된 코드를 생성해 데이터를 처리

 

. 임팔라 동작 방식

  • 모든 노드에 임팔라 데몬이 구동된다
  • 사용자는 임의의 노드에 JDBC/ODBC/임팔라쉘 이용해 쿼리 요청이 가능하다
  • 사용자의 쿼리는 데이터 지역성 고려해 노드 전체로 분산되어 수행한다
  • 사용자 쿼리 요청 받은 코디네이터 데몬은 분산되어 수행된 각 임팔라 노드의 부분 결과를 취합한 결과값을 만들어 사용자에게 제공한다
  • 실제 운영 환경에서 라운드로빈방식으로 사용자 쿼리를 분산하고, 전 노드들이 쿼리에 대해 코디네이터 역할을 고르게 수행할 수 있도록 한다

 

. 임팔라의 SQL 구문

  • 기본적으로 하이브의 SQL 이용
  • 어떤 구문 지원되는지 확인 필요
  • DDL(Data Definition Language)
    • Create Database/Table
    • Alter Table
    • Drop Database/Table
    • Show Database/Tabe, Describe Database
  • DML(Data Manipulation Language)
    • Select, Shere, GroupBy, OrderBy 구문 지원
    • Insert into/overwrite 구문 지원
    • 데이터 변경구문 지원X
    • Delete 지원X, Drop시 데이터가 삭제 됨
  • Builtin Functions
    • 수학함수
      • abs, acos, log 등...
    • 타입 변환
      • day, from_unixtime, now 등...
    • 조건문
      • if, case 등...
    • 문자열 함수
      • ascii, concat, regexp

 

. 임팔라의 데이터 모델

  • 하둡 분산 파일 시스템에 데이터를 저장
  • 저장 포맷에 따라 데이터 조회 처리 성능이 달라짐
  • 하둡 기본 파일 포맷인 텍스트/시퀀스 파일
    • row 단위 데이터 저장 방식 사용
    • 테이블에서 하나의 컬럼을 읽든 전체 테이블을 읽든 동일한 디스크 입출력이 발생
  • RCfile
    • column 단위 파일 저장 포맷
    • 읽고자하는 컬럼만큼의 디스크 입출력이 발생한다
    • 처리 성능 개선이 가능하다
    • 파일 포맷 변경 작업이 필요할 수도 있다

 

 

 


 

 3 클라우드 인프라 기술

  • 클라우드 컴퓨팅: 동적으로 확장할 수 있는 가상화 자원들을 인터넷으로 서비스할 수 있는 기술
    • SaaS, Software as a Service
    • PaaS, Platform as a Service
    • IaaS, Infrastructure as a Service
  • VMware/Xen 같은 서버 가상화 기술은 데이터센터나 기업들에게 인프라스트럭처를 위한 클라우드 서비스 가능성을 보여준다
  • 아마존
    • S3(Simple Storage Service)와 EC2(Elastic Cloud Computing) 환경을 제공하며 플랫폼을 위한 클라우드 서비스를 최초로 실현하였다
  • 구글
    • AppEngine, Apps, Gears, Gadgets 등 제공해 웹 기반의 다양한 소프트웨어들이 클라우드 서비스로서 어떻게 구체화될 수 있는지 보여준다
  • 인프라 기술: 클라우드 컴퓨팅에서 근간이 되는 기술
  • 서버 가상화 기술
    • 인프라 기술 중 가장 기반이 되는 기술
    • 물리적인 서버와 운영체제 사이에 적절한 계층을 추가해 서버를 사용하는 사용자에게 물리적인 자원을 숨기고 논리적인 자원만을 보여주는 기술
    • 하나의 서버에 여러 개의 애플리케이션, 미들웨어, 운영체제들이 서로 영향을 미치지 않으면서 동시에 사용 가능하게 한다
    • 가능하게 하는 기술은 아주 다양하며, 메인 프레임, 유닉스 서버, x86 서버 등에 따라 서로 다른 기술이나 분류체계가 사용된다
    • x86 서버 가상화 기술
      • 하드웨어, CPU, 운영체제의 공급 업체가 모두 다르다
      • 인텔, AMD 등 CPU 제공업체: 하드웨어 차원의 CPU 가상화
      • VMware, 마이크로소프트, 오픈소스 커뮤니티: 소프트웨어 기반의 가상화 제품
      • 다른 업체와의 협력관계와 기술 조합의 안정성 등을 살펴보아야 한다
      • 최근 솔루션 제공업체에 의해 Hypervisor 계층 세부 분류 경계가 점점 사라지고 있다
  • 서버 가상화 기술로 얻을 수 있는 효과

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

      • 서로 다른 가상 머신들 사이 접속은 정상적인 네트워크 접속만을 허용
      • 가상머신 사이 보안적으로 서로 분리되어 데이터 보호 가능
    • 예측하지 못한 장애로부터 보호

      • 가상머신에서 수행중인 애플리케이션 장애가 다른 가상머신에 영향 미치지X
      • 애플리케이션, 운영체제의 장애로부터 보호가능
    • 공유 자원에 대한 강제 사용의 거부

      • 하나의 가상머신은 할당된 자원 이상 가져가는 것을 차단 가능
      • 다른 가상머신에 할당된 자원의 부족 현상 차단 가능
    • 서버 통합

      • 서비스, 데이터, 사용자 등의 증가로 더 많은 컴퓨팅 자원이 필요해졌지만, 데이터 센터의 공간, 전원, 냉각장치는 제한적이다
      • 기존 서버의 용량을 증설하고 가상머신을 추가함으로 동일한 데이터센터의 물리적자원(공간, 전원 등)을 이용하며 더 많은 서버의 운영 가능
    • 자원 할당에 대한 증가된 유연성

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

      • 다양한 운영체제/운영환경의 테스트 필요할 경우, 테스트 환경 구성이 가능
      • 부하 테스트 필요한 경우, 일시적으로 자원 줄여 부하 상황 만들 수 있다
      • 다수의 부하 생성 역할 수행 노드도 쉽게 추가 가능하다
    • 정확하고 안전한 서버 사이징

      • 필요한 자원만큼만 가상머신 할당 가능
      • 사이징 예측이 불확실한 서버 구성 시에도 확보된 리소스 이용하여 할당한 후 쉽게 추가로 할당 가능
    • 시스템 관리

      • 마이그레이션 사용해 운영 중인 가상머신의 중지 없이 가상머신을 다른 물리적 서버로 이동 가능
        • 하드웨어 장애
          • 장애 발생 장비에서 운영되던 가상머신을 서비스 중지X 다른 장비로 이동, 장애 발생 장비 교체 후 서비스 재투입
        • 로드 밸런싱
          • 특정 가상 서버/가상 서버가 수행중 물리적 서버에 부하가 집중되는 경우 여유 있는 서버로 가상머신 이동
        • 업그레이드
          • 장비의 CPU 추가/메모리 추가/디스크 증설 등에 다른 장비로 가상머신을 이동 후 업그레이드 작업 수행 가능

. CPU 가상화

  • Hypervisor
    • 물리적 서버 위에 존재하는 가상화 레이어를 통해 운영체제가 수행하는데 필요한 하드웨어 환경을 가상으로 만든다
    • 일반적으로 가상머신을 일컫는다
    • 서버 가상화 기술의 핵심으로 x86계열 서버 가상화에서 소프트웨어 기반으로 하이퍼바이저 구성
    • 추가 하드웨어 구입X, 새로운 운영체제 설치/애플리케이션 테스팅 및 업그레이드를 동일한 물리적 서버에서 동시에 수행 가능
    • VMM, Virtual Machine Monitor
      • 하드웨어 환경 에뮬레이션
      • 실행환경 격리
      • 시스템 자원 할당
      • 소프트웨어 스택 보존
    • 플랫폼 별로 분류
      • x86
        • VMware, MS virtual Server, Xen
      • 유닉스
        • IBM의 POWER Hypervisor
      • 메인프레임
        • x/VM
        • 하드웨어 펌웨어인 PR/SM
    • 하이퍼바이저 위치로 분류
      • Bare-metal
        • 하드웨어와 호스트 운영체제 사이에 위치
        • Para-Virtualization, 반가상화
        • Full Virtualizatiion, 전가상화
      • Hosted
        • 호스트 운영체제와 게스트 운영체제 사이에 위치
    • x86 계열 운영체제
      • 자신의 모든 HW에 대한 제어 소유권 갖고 있다는 가정 아래, HW에 직접 명령을 수행하는 방식으로 디자인
      • HW에 대한 접근 권한 관리위해 Ring 0, 1, 2, 3 등 4개의 레벨로 구성
        • 일반적 사용자 애플리케이션은 Ring 3 레벨로 수행
        • 운영체제는 메모리/HW에 직접 접근 위해 Ring 0 레벨로 수행
        • 가상 머신 내에서도 운영체제가 필요하고, Ring 0 권한이 필요
      • 가상화 기술의 핵심
        • 가상머신이 요청하는 privileged 명령어를 어떻게, 어떤 계층에서 처리 하는가
  • 완전가상화

    • Full virtualizaion
    • CPU, 메모리, 네트워크 장치 등 모든 자원을 하이퍼파이저가 직접 제어,관리하며, OS를 수정하지 않고 설치가 가능하다
    • 하이퍼바이저가 자원을 직접 제어하기 때문에 성능에 영향을 미침
    • 단일서버 내에서는 운영중인 Guest OS에 할당된 CPU나 메모리 등 자원에 대한 동적변경 작업이 어렵다.
      • VMware의 VMotion과 같은 솔루션의 도움이 필요
    • 하이퍼바이저보다 우선순위가 낮은 가상머신에서는 실행안되는 privileged 명령어에 대해 trap을 발생시켜,
      하이퍼바이저에서 실행하는 방식
    • 장점) Guest OS가 하이퍼바이저 상에서 변경되지 않은 상태로 실행됨
    • 단점) Para Virtualization에 비해 속도가 느리다
    • 완전가상화 기반 솔루션
      • VMware ESX Server, MS Virtual Server 등
      • 최근 Intel VT, AMD-V 환경에서 지원
  • 하드웨어 지원 완전가상화

    • Intel VT-x, AMD-V CPU의 HW에서 제공하는 가상화 기능을 이용한다
    • 가상머신에서 메모리/CPU 등 HW에 명령을 내리는 반가상화 수준의 성능을 발휘하고 개선한다
    • CPU에 Ring -1 계층이 추가되고 하이퍼바이저가 수행된다
    • Guest OS는 Ring 0에서 수행되어 privileged 명령어에 대해 추가로 변환 과정이 필요 없다
    • 하이퍼바이저를 거쳐 바로 HW로 명령이 전달되어 빠른 성능을 갖는다
    • 윈도우 2008 Hyper-V는 반드시 가상화 지원 CPU만 사용해야 한다
    • 인텔
      • HW 지원 가상화 사용 시, CPU 사용률 높아지므로, (특히 I/O나 메모리 많이 사용 시 더 높아짐) 서버 통합을 목적으로 할 경우 비효율적일 수 있다
      • 반가상화와 HW지원 완전가상화 모두 사용하는 하이브리드 가상화 제시
      • Xen 이용한 하이브리드 가상화
        • 반가상화용으로 수정된 OS에 HW지원 완전가상화 모듈을 탑재해 명령어 종류 따라 반가상화/완전가상화를 선택하고 사용한다
  • 반가상화

    • Para Virtualization
    • privileged 명령어를 Guest OS에서 hypercall로 하이퍼바이저에 전달한다
    • 하이퍼바이저는 hypercall에 대해서는 privilege 레벨에 상관 없이 HW로 명령을 수행한다
    • Hypercall: Guest OS에서 요청하면, 하이퍼바이저에서 바로 HW 명령을 실행하는 call
    • Guest OS가 hypercall 요청 위해서는 Guest OS의 일부분 수정이 필요하다
    • Xen 기반 리눅스 OS 경우, 20% 정도 커널이 수정한다
    • 수정된 Guest OS는 CPU/메모리 등 자원에 대한 직접적 제어권 가짐으로써 자원의 변화와 같은 동적 가상화 환경에 유연하게 적응이 가능하다
    • CPU/메모리 자원의 동적 변경이 서비스 중단없이 이루어지고 성능이 뛰어나다
    • privileged 명령어 직접 호출(hypercall)하므로 속도는 빠르나 커널 변경이 필요하다
    • 완전가상화는 dynamic vinary translation(Xen은 emulation)모듈과의 통신으로 처리하는데, 속도는 느리나 커널 변경이 필요없다
    • VMware 같은 상용 솔루션은 완전가상화와 반가상화의 장단을 보완해 아키텍처, 기능, 성능 등에서 뚜렷한 차이가 없다
    • VMware에서 반가상화 지원하지 않고, VMI(Virtual Machine Interface)라는 표준 인터페이스를 제시한다
      • 이 인터페이스 준수하는 모든 Guest OS를 지원하는 방식으로 반가상화 지원
      • 정식 표준아니지만, 리눅스 진영에서 도입하려는 움직임이 있다
  • 하드에웨어 대한 드라이버가 있는 계층에 따라 나눠짐

    • Monolithic
      • 가상머신이 I/O를 위해 HW에 접근할 때 사용하는 드라이버를 하이퍼바이저 계층에서 모두 갖고 있는 방식
      • VMware
        • 모든 I/O 요청은 하이퍼바이저가 수행한다
      • 성능은 조금 향상될 수 있지만 HW가 추가되거나, 드라이버 업데이트 시 하이퍼바이저가 수정되어야 한다
      • 코드가 많아 장애 발생 가능성이 높다
    • Microkernel
      • 가상머신이 I/O를 위해 HW에 접근할 때 사용하는 드라이버를 각 가상머신에서 갖고 있는 방식
      • Xen
        • Guest OS는 가상 드라이버 갖고 있어 I/O 요청은 Host OS를 거쳐야 가능하다
        • Guest와 Host는 격리되어 있어, 하이퍼바이저/VMBus를 이용해 요청을 주고 받는다
      • 속도가 조금 느리지만, 하이퍼바이저 계층이 간단하여 드라이버 업데이트/HW 추가에 따른 하이퍼바이저 변경이 필요하지 않고, 장애 발생 확률이 훨씬 낮다
  • 호스트 기반 가상화

    • 완전한 운영체제가 설치되고 가상화를 담당하는 하이퍼바이저가 Host OS 위에 탑재되는 방식
    • 단점)
      • 성능과 자원 관리 능력에 제약 사항이 많다
      • 단일 OS의 취약성
        • Host OS 레벨에서 보안 이슈발생 시, 전체 Guest OS의 신뢰성에도 문제가 발생한다
    • VMware Workstaion, Microsoft Virtual PC
    • 주로 테스트 환경에 사용되었으며 최근에는 많이 사용하지 않는다
    • 기존 레거시 애플리케이션 중 아주 오래된 HW이거나 HW 지원하는 특정 OS에서만 수행되어야 하는 애플리케이션을 가상화 기반에서 운영하는 경우에 사용한다
  • 컨테이터 기반 가상화

    • Host OS 위에 가상의 OS를 구성하기 위한 운영 환경 계층을 추가해 OS만을 가상화한 방식
    • 훨씬 적게 가상화하므로 한 대의 서버에서 더 많은 컨테이너를 실행 가능
    • 가상 운영환경: 가상화 지원하는 계층(하이퍼바이저라 부르지 X)
    • 가상화 수준이 낮아 빠른 성능을 갖지만, 하나 가상 OS 에서 실행되는 애플리케이션의 자원 사용에 따라 다른 가상 OS가 영향을 받는다는 단점이 있다
    • Host OS의 보안 취약성/문제에 의해 모든 가상 OS가 영향을 받아 문제 발생 가능
    • 오픈소스 진영의 OpenVZ, OpenVZ를 상용화한 Virtuozzo, Solaris Containers, Linux-VServer 등

 

. 메모리 가상화

  • VMware의 기법
  • OS가 메모리를 관리하기 위해 사용된다 
    • 물리주소: 0부터 시작해 실제 물리적 메모리 크기 나타냄
    • 가상주소: 하나의 프로세스가 가리킬 수 있는 최대 크기로, 32bit에서는 4GB까지 가능
  • 32bit OS의 사용자 프로세스는 4GB까지 사용가능
  • 프로그램 주소는 가상주소 값이므로,가상주소 값의 위치인 VPN(Virtual Page Number)를 실제 물리적 주소값 위치MPN(Machine Page Number)로 매핑하는 과정이 필요하며 page table을 이용한다
  • 매핑 연산을 HW적으로 도와주는 것을 TLB(Translation lookaside buffer)라고 한다
  • VMKernel
    • VMware의 하이퍼바이저 핵심 모듈
    • Service Console, 디바이스 드라이버들의 메모리 영역을 제외한 나머지 전체 메모리 영역을 모두 관리한다
    • 가상머신에 메모리를 할당한다
    • 생성된 가상머신은 자신에게 할당된 메모리들을 연속된 공간의 실제 물리적 메모리로 인식한다
  • VMware
    • 하이퍼바이저 내 Shadow Page Table을 별도로 두어 가상 메모리 주소와 물리 메모리 주소의 중간 변환 과정을 가로챈다
    • 연속된 빈 공간의 메모리가 실제 존재하는 것처럼 Guest OS 에게 매핑해주는 역
    • 개별적인 모든 가상머신들이 자신만의 메모리 주소 공간을 갖도록 한다
  • 1GB 물리적 메모리 가진 1대의 물리장비에 2개 가상머신 탑재
    • 하이퍼바이저 내에서도 일부 메모리 사용해야 하므로, 하이퍼바이저가 가상머신에 할당하는 메모리는 768MB
    • A는 최소할당이 256MB로 실제로는 512MB 사용
    • B는 최소할당이 512MB로 실제로는 256MB 사용
    • B가 256MB 메모리 더 필요하여 A가 사용하는 메모리 반납이 필요할 때 사용 가능한 방법
      • Memory ballooning

        • VMKernel은 예약된 메모리보다 더 많은 메모리를 사용하는 가상머신의 메모리 영역을 빈 값으로 강제로 채워, 가상머신 OS가 자체적으로 swapping하도록 한다
        • 가상머신 OS에서 보이는 물리적 메모리(실제로는 하이퍼바이저에서 제공한 논리적 메모리)가 채워지고 있다는 것을 감지한 가상머신 OS는 swap 파일에 메모리 영역을 page out 시키고 메모리를 비우게 된다
        • 하이퍼바이저는 page out된 메모리영역을 다른 가상머신에 할당
      • Transparent page sharing

        • 각 가상머신에 할당된 메모리 중 동일한 내용을 담고 있는 페이지는 물리적 메모리 영역에 하나만 존재시키고 모든 가상머신이 공유하게 한다
      • Memory Overcommitment

        • 2GB 메모리 가진 물리적 장비는 512MB를 최소할당 가질 가상머신 5개를 수행할 수 있다
        • 앞선 두 가지 기법 이용해 가능하지만, 모든 가상머신이 메모리 사용이 많은 업무 수행 시 심각한 성능저하가 발생 가능하므로 권장하지 않는다

 

. I/O 가상화

  • 하나의 물리적 장비에 여러 개 가상 머신이 실행될 때 가장 큰 문제는 I/O에서의 병목현상으로 I/O 자원의 공유 및 파티셔닝이 필요하다
  • 하나의 물리적 머신에서 운영되는 가상머신 간 통신이 필요하고 아래 기술되는 기술이 사용된다
  • 가상 이더넷

    • 대표적 I/O 가상화 기술로, 물리적으로 존재하지 않는 자원을 만들어 내는 에뮬레이션 기능을 이용
    • 각 가상 머신들 사이에 물리적 네트워크 어댑터 없이도 메모리 버스를 통해 고속 및 고효율 통신이 가능
    • 가상 LAN 기술 기반으로 네트워크 파티션도 가능하게 한다
    • 하나의 서버에 4개의 가상머신을 구성하는 경우, 2개의 가상머신을 묶어 가상 LAN으로 구성하면 각 가상 LAN 사이 통신이 불가능
    • 별도의 물리적 어댑터와 케이블을 사용않고도 네트워크의 이중화, 네트워크의 안정적 단절 등이 가능하다
  • 공유 이더넷 어댑터

    • 여러 개의 가상 머신이 물리적 네트워크 카드 공유가 가능하며 이를 통해 외부 네트워크와 통신이 가능하다
    • 가상 머신 개수보다 물리적 어댑터 개수가 적은 경우, 여러 가상머신들이 물리적 이더넷 어댑터 공유 가능
    • 병목현상 발생 가능
    • 10G 환경에서, 네트워크 어댑터 내 가상화를 지원하여 어댑터 메모리 버퍼를 가상머신에 별도로 할당해 마치 하나의 물리적 어댑터를 가상머신 하나에 할당하는 것과 동일한 효과내는 제품도 출시되었다
  • 가상 디스크 어댑터

    • 한 대의 서버가 여러 개 가상머신 구성한 경우, 가장 문제인 부분이 외장 디스크 사용 가능하게 하는 파이버 채널 어댑터와 같은 I/O 어댑터의 부족이다
    • 가상화된 환경에서 가상 디스크 이용해 가상머신이 디스크 자원 획득하는 방법
      • 내장 디스크)
        • 가상 I/O 레이어가 내장 디스크를 소유하고 이들을 논리적 디스크 드라이브로 나눈다
        • 논리적으로 나눠진 드라이버는 LUN(Logical Unit Number)으로 각 파티션에 가상 디스크 어댑터 통해 분산한다
        • 논리적 디스크 자원을 물리적 자원으로 인식한다
      • 외장 디스크)
        • 가상 I/O 레이어가 파이버 채널 어댑터 통해 외장 디스크의 LUN을 획득한다
        • 가상 I/O 레이어가 이 자원을 각 가상머신에 가상 디스크 어댑터를 통해 분배한다
        • 가상 I/O 레이어를 통해 제공된 논리적 디스크 볼륨은 이용하는 다른 가상머신에게 SCSI 디스크로 표시한다

 

반응형
Comments