일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- KMOOC
- ADP
- 데이터분석전문가
- 조지프 나이
- 코테
- EBS
- 데이터분석전문가가이드
- 알고리즘
- MySQL
- 빅데이터
- 미분적분학
- 자료구조
- Progate
- Udemy
- 위대한 수업
- 당신이 몰랐던 진화론
- 정치학
- Joseph Samuel Nye Jr.
- 공부정리
- 맛집
- 백준
- K-MOOC
- Great Minds
- python
- Baekjoon
- CNN10
- 누가 진정한 리더인가
- 후기
- ADsP
- Hacker Rank
Archives
- Today
- Total
ㅇ
[ADP_과목 2. 데이터 처리 기술 이해_제 2장 데이터 처리 기술_2] 본문
* 다음 내용은 [데이터 분석 전문가 가이드] (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 함수를 작성하는 것으로 대규모 병렬 연산 작업 수행이 가능하다
- Map
-
실행과정
- 사용자가 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
- 분산 파일 시스템의 데몬
- 데이터 입출력 처리를 수행
- NameNode
- 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에 해당
- MetaStore
-
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
- x86
- 하이퍼바이저 위치로 분류
- Bare-metal
- 하드웨어와 호스트 운영체제 사이에 위치
- Para-Virtualization, 반가상화
- Full Virtualizatiion, 전가상화
- Hosted
- 호스트 운영체제와 게스트 운영체제 사이에 위치
- Bare-metal
- 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 추가에 따른 하이퍼바이저 변경이 필요하지 않고, 장애 발생 확률이 훨씬 낮다
- Monolithic
-
호스트 기반 가상화
- 완전한 운영체제가 설치되고 가상화를 담당하는 하이퍼바이저가 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 디스크로 표시한다
- 내장 디스크)
반응형
'IT > ADP' 카테고리의 다른 글
[ADP_과목 3. 데이터 분석 기획_제 2장 분석 마스터 플랜] (0) | 2020.11.02 |
---|---|
[ADP_과목 3. 데이터 분석 기획_제 1장 데이터 분석 기획의 이해] (0) | 2020.10.12 |
[ADP_과목 2. 데이터 처리 기술 이해_제 2장 데이터 처리 기술_1] (0) | 2020.09.07 |
[ADP_과목 2. 데이터 처리 기술 이해_제 1장 데이터 처리 프로세스] (0) | 2020.08.31 |
[ADP_과목 1. 데이터 이해_제 3장 가치 창조를 위한 데이터 사이언스와 전략 인사이트] (0) | 2020.08.24 |
Comments