CS 전공/생각?2011. 3. 25. 15:52
예전에 애리조나대 문 교수님께서, 컴퓨터공학은 응용학문이다 보니 실제로 중요한 법칙 같은 것은 몇 개가 안되는 것 같다.
라는 말씀을 하셨는데, 문득 옳은 지적이신 것 같다는 생각이 요새 많이 든다.
대부분의 SW 개발 업무라는 것이 어떤 문제가 주어졌을 때 그 문제를 푸는 방법(알고리즘)과 그의 구현(프로그램)이라고 한다면, 대부분의 개발 업무라는게 이런 식인 것 같다.

1) 문제가 주어진다.
2) 한 문제를 여러 작은 문제들로 나눈다.
3) 각 문제에 대한 기존 해결책이 있는지 조사한다.
4) 있으면, 가장 낫다는 놈을 가져다 쓰고 없으면 만든다.
5) 합쳐보고 테스트하고, 추가로 최적화시켜 본다.

그리고 이렇게 해서 잘 쓰다가 요구하는 성능치가 더 높아지면, HW를 추가로 공급하거나, 또는 알고리즘을 개선하는 방법을 써야 한다. 많은 경우 기존 알고리즘을 개선하는 방법은 크게 다음과 같은 것같다.

1) 입력 데이터 크기 줄이기
 - 같은 알고리즘이라도 처리에 필요하지 않는 데이터는 읽지 않음으로써 성능 향상을 꾀할 수 있다.
 - 사실 불필요한 데이터 읽기를 피하기 위한 가장 잘 알려진 데이터 구조는 인덱스이다.
 - 최근의 컬럼-기반 DBMS도 요구되는 데이터만 읽기 위해 데이터를 행-기반에서 열-기반으로 옮긴걸로 간소화할 수 있겠다.

2) 알고리즘 자체의 성능 개선
  - 대개는 최악 복잡도를 개선하는 것을 목적으로 하는데, 실제로는  최악 복잡도는 낮아도 평균 복잡도가 우수한 알고리즘들도 많이 선택되는 듯.

3) 시스템 구조에 좀더 적합한 알고리즘
  - 같은 복잡도라도 시스템 구조를 좀더 잘 활용하는 알고리즘들이 효과적이다. 대표적인 것이 메모리 계층에서 데이터 이동이 많지 않도록 cache-aware한 알고리즘들이다. 복잡도는 더 높은 cuckoo hash가 실제로는 더 빠른 것을 보면 메모리 계층에 대한 고려는 매우 중요.

4) 분산/병렬 처리
  - 알고리즘을 병렬화해서 shared-nothing 또는 shared-memory 구조에서 분산 병렬처리하는 방식으로변경(scale-out)
 
5) 추가 자원 투입
  - 더나은 컴퓨팅 성능을 갖는 HW를 투입(scale-up)

대충 이게 다일 듯.
쓰고나면 별로 하는 일 없어보이는데 왜 이쪽 일이라는 것은 언제나 복잡해 보이는지 모르겠다.
Posted by Bart
CS 전공/리뷰2011. 3. 25. 00:44
목 차
1. 데이터 센터와 클라우드 컴퓨팅
2. MapReduce
3. MapReduce에 관한 논쟁: 장점과 단점
4. MapReduce 개선에 관한 연구들
5. 연구 분야와 도전 과제들
6. 결론 및 향후 전망
관련 연구 


 

1. 데이터 센터와 클라우드 컴퓨팅

 
 
컴퓨터 구조학의 대가인 UC버클리 대 교수 David A. Patterson이 “데이터 센터가 곧 컴퓨터”라고 언급한 바와 같이 현재의 컴퓨팅은 개인이 소유한 PC를 이용한 컴퓨팅에서 데이터 센터가 보유한 무수히 많은 서버들을 이용하여 컴퓨팅을 임대, 사용하는 클라우드 컴퓨팅 으로 빠르게 넘어가고 있다[1].

클라우드 컴퓨팅은 “최소한의 관리만으로 빠르게 제공, 해제될 수 있는 조정 가능한 컴퓨팅 자원의 공유 풀을 접근할 수 있는 요구 중심의 네트워크 접근을 위한 모델”[2]로 정의한다. 클라우드 컴퓨팅을 위한 데이터 센터에서는 많은 계산이 요구되는 대용량 데이터를 많은 저가의 범용 x86 머신에 분배하여 병렬 처리하는 방식으로 확장성(scalability)를 제공한다. 이와 유사한 개념으로 기존에도 그리드 컴퓨팅과 같은 개념이 존재하였지만, 클라우드 컴퓨팅은 데이터 센터라는 지역적으로 집중된 한 곳에 많은 PC들을 설치해놓고 컴퓨팅을 대여, 이용한 만큼 과금한다는 점에서 자발적인 참여와 노드들이 서로 다른 관할권에 속하는 그리드 컴퓨팅과는 구별된다.  

MapReduce[3]는 이러한 데이터 센터 중심의 컴퓨팅에서 “첫 번째 명령어” [1]라고 언급될 정도로 여러 분야 특히 대용량 데이터 분석 및 처리 분야에서 많은 각광을 받고 있다. 2009년 한해 구글에서는 총 3,467K 개의 작업을 평균 488개의 노드를 이용해 처리했다고 밝혔다. 한 해에 데이터는 총 544,130 TB에 이르렀다 한다[4]. MapReduce의 오픈 소스 Java 구현인 Hadoop 또한 많은 분야에서 널리 이용되고 있다[5].
 

 2. MapReduce

MapReduce는 Google에서 정보 검색을 위한 데이터 가공(색인어 추출, 정렬 및 역 인덱스 생성 등)을 목적으로 개발된 분산 환경에서의 병렬 데이터 처리 기법이자 프로그래밍 모델이며, 또한 이를 지원하는 시스템이다[3]. MapReduce는 비공유 구조(shared-nothing)로 연결된 여러 노드 PC들을 가지고 대량의 병렬 처리 방식(MPP; Massively Parallel Processing)으로 대용량 데이터를 처리할 수 있는 방법을 제공한다.  이를 보다 간편하게 하기 위해 MapReduce는 LISP 프로그래밍 언어에서의 map과 reduce 함수의 개념을 차용하여 시스템의 분산 구조를 감추면서 범용 프로그래밍 언어를 이용해 병렬 프로그래밍을 가능하게 한다.

 즉, MapReduce에서는 단순히 Map과 Reduce라는 두 함수의 구현을 통해 데이터 처리를 병렬화할 수 있다. Map과 Reduce가 수행하는 동작은 아래와 같다.

 

Map: (key1, value1) -> (key2, value2)    //(key, value) 쌍을 읽어 다른 (key, value) 쌍에 대응

Reduce: (key2, List_of_value2) -> (key3, value3)   //key2를 기준으로 취합된 value list를 읽어 집계된 값 value 3를 출력


즉, Map 함수는 임의 키-값 쌍을 읽어서 이를 필터링하거나, 다른 값으로 변환하는 작업을 수행하고, Reduce 함수는 Map 함수를 통해 출력된 값들을 새 키 key2를 기준으로 그룹화(grouping) 한 후 여기에 집계 연산(aggregation)을 수행한 결과를 출력한다. 이는 기존 SQL DBMS에서 selection 연산 후 group-by-aggregation을 수행하는 것과 유사하다고도 할 수 있다. 하지만, MapReduce는 이 간단한 두 함수를 이용해 여러 노드들을 대상으로 데이터를 병렬 처리할 수 있는 특징을 가진다.

 그림 1은 MapReduce의 처리 흐름을 나타낸다. 분석할 입력 데이터는 분산 파일 시스템인 GFS(Google File System)[6] 위에 먼저 적재되고, 이 때 데이터는 기본 64MB 크기의 여러 데이터 청크(chunk)들로 분할된다. GFS는 각기 분할된 청크들에 대해 장애로부터의 복구를 위해 2개의 추가적인 복사본을 생성하며 이들을 클러스터를 구성하는 각기 다른 노드 PC들에 위치시킨다.


 


그림 1. MapReduce의 처리 흐름


 
MapReduce 수행 시 이 GFS 상에 적재된 각 청크들은 Map 함수를 수행하는 Mapper 태스크들에 할당된다. Mapper들은 클러스터 상의 여러 노드들에 분산되어 있으며 각기 청크 하나를 받아 Map 함수를 수행하고 그 결과는 Mapper가 수행된 노드의 로컬 디스크에 기록한다. 만약 처리할 청크가 아직 있으면 실행 중에 이미 종료되어 유휴한 Mapper에게 추가로 청크를 할당한다. 이런 방식은 일찍 작업을 종료한 Mapper가 더 많은 청크를 입력받아 처리하도록 함으로써 적절히 부하를 분산시키는 런타임 스케쥴링 효과를 갖는다. 더 이상 처리해야 할 청크가 없고 모든 Mapper가 정상 종료되었다면, MapReduce의 스케쥴러는 Reducer 태스크를 수행한다.
 

 Reducer HTTPS를 이용해 여러 노드들로부터 Key2를 기준으로 각 reducer가 처리해야 할 키-값 쌍을 이전 Mapper들의 로컬 디스크로부터 읽어온다. 이는 집계 연산을 위해 Map 결과를 추가적으로 분할하기 위한 것으로 일반적으로 hash(key2) mod n과 같은 해시 분할을 이용하여 데이터를 n 개의 reducer에 분할시킨다. 이후 key2 값을 기준으로 정렬 연산을 수행하고, 이렇게 해서 정렬된 키-값 쌍들을 동일 키 값을 기준으로 그룹화를 수행한다. 이렇게 해서 각 key2 값을 기준으로 그룹지어진 값들을 대상으로 집계 연산을 수행하고 그 결과를 다시 GFS 상에 다른 키-값 쌍으로 출력한다.
 

Mapper들은 선택적으로 combiner를 가질 수도 있다. 이는 Mapper가 키-값 쌍만을 출력하고 이를 Reducer가 복사, 분할하는데 드는 I/O와 네트워크 대역폭을 절감하고자 각 Mapper가 출력하는 키-값쌍에 대해 미리 그룹화하고 집계 연산을 수행하도록 하는데 이용된다(pre-aggregation).

  데이터 처리 중에 장애 발생 시 Mapper의 경우 같은 청크를 대상으로 다시 수행하거나, 또는 유휴한 다른 Mapper가 해당 청크를 수행하게 함으로써 내고장성을 지원한다. Reducer의 장애의 경우에는 Mapper의 결과는 이미 로컬 디스크에 Mapper의 결과가 실체화된 상태이므로 Mapper의 수행은 건너뛰고 Reducer 작업을 다시 수행한다. 파일의 내구성은 GFS의 데이터 복제에 의존한다.
 

 MapReduce에서는 또한 2 개 이상의 MapReduce 작업을 서로 연결함으로써 보다 복잡한 알고리즘을 구현하는 것도 가능하다. 즉 한 MapReduce 작업이 종료된 후 두 번째 MapReduce 작업이 GFS상의 첫 작업의 결과를 입력으로 하여 동작하는 방식이다. 이 경우에도 각 Map, Reduce 단계의 결과들은 모두 로컬 디스크 또는 분산 파일 시스템 위에 기록됨으로써 내구성이 보장된다.
 

 3. MapReduce에 관한 논쟁: 장점과 단점

MapReduce의 인기에 대해 데이터베이스 연구자들, 특히 병렬 DBMS를 연구해 왔던 학자들은 많은 비판을 가하였다. DBMS 진영의 대표적인 학자들인 M. Stonebraker D. DeWitt MapReduce“A Major Step Backward”라고 비판한 바 있다[7]. 이들은 MapReduce에서의 데이터 병렬 처리 기법은 이미 기존 병렬 DBMS에서 이미 해왔던 것이며, DBMS에서 지원하는 많은 기능들, 예를 들어 스키마, 표준 질의어, 인덱스 기법, 질의 최적화, 압축, 여러 데이터 분할 기법 등 이 빠져 있다고 비판하였다. 이후 2009 SIGMOD에는 이들과 MIT Sam Madden 팀이 같이 Hadoop과 행-기반 DBMS와 열-기반 병렬 DBMS의 성능을 Grep TPC-H 연산 등을 대상으로 비교한 논문을 발표하였다[8]. 여기에서는 데이터 적재 시간을 제외한 나머지 모든 작업에서 MapReduce DBMS, 특히 열-기반 병렬 DBMS보다 못하다라고 언급하였다. MapReduce를 옹호하는 진영은 주로 산업계에서 종사하는 실무자들로 이 비교가 DBMS로 수행하기 좋은 작업들을 대상으로 하였다고 반박하였다. 그들은 MapReduce의 용도는 DBMS와 다르며, 데이터의 일괄 병렬 처리를 위한 시스템으로써 그 의의가 크다고 설명하였다. 반대로 DBMS 진영에서는 연구자들을 중심으로 MapReduce는 이미 연구되었거나 DBMS에서 이미 지원하고 있는 병렬 처리 기법이나 데이터 처리 기법들을 고려하지 않은 매우 순진한(naïve) 시스템이라 비판하였다. 이 기술적 논쟁이 가열되자 ACM에서는 이 두 진영의 의견을 학회지 CACM 2010 1월호에 나란히 올려 이 논쟁을 소개하였다[9, 10]. 

두 진영에서 서로 언급하고 있는 MapReduce의 장단점을 요약하면 다음과 같다.
 

 3.1. MapReduce의 장점

1) 단순하고 사용이 편리

MapReduce는 먼저 Map(), Reduce()라는 두 개의 함수를 구현함으로써 병렬 처리를 가능하게 한다는 것이 큰 장점이다. 데이터의 분산 배치와 실행은 스케쥴러가 담당함으로써 사용자는 분산 시스템의 물리적 구조를 알지 않아도 데이터 병렬화(data parallelism) 방식을 통한 분산 처리를 매우 쉽게 할 수 있는 이점이 있다.
 

 2)  유연성

MapReduce는 특정화된 데이터 모델이나 스키마 정의, 질의 언어에 의존적이지 않다. 사용자는 범용의 프로그래밍 언어를 이용하여 데이터를 어떻게 처리할지 기술한다. 따라서 관계형 데이터 모델로는 표현되기 어려운 다르거나, 비정형적인 데이터 모델들도 지원할 수 있는 유연성을 갖는다.

 3)  저장 구조와의 독립성

MapReduce는 병렬 데이터 처리를 위한 시스템으로 하부 저장구조와 독립적이다. 기본적으로는 MapReduce GFS와 같은 분산 파일 시스템 상의 파일을 입출력으로 하지만, 그외 일반 파일 시스템이나 DBMS 등 다른 저장 구조를 하부에 두는 것도 가능하다.

 4) 내고장성

MapReduce는 분산 파일 시스템의 데이터 복제(replication)에 기반한 데이터의 내구성(durability) 지원과 함께 Mapper Reducer의 태스크 장애 시 각 태스크의 재수행을 통해 장애로부터의 내고장성을 확보한다. 이 때 Map Reduce 작업이 처음부터 다시 실행되는 것을 막기 위해 Map의 결과는 Mapper가 수행된 노드의 로컬 디스크에 기록된다.
 

 5) 높은 확장성(scalability)

MapReduce의 오픈 소스 구현인 Hadoop 4,000 노드 이상으로 확장될 수 있을 정도로 높은 확장성을 가진다[11]. 처리해야 할 데이터 크기가 커지면 그만큼 높은 작업처리량(throughput)을 가지도록 시스템을 개선해야 한다. 기존의 방식은 HW 성능의 개선을 통해처리량을 향상시키는 scale-up 방식이었던 반면에, MapReduce는 저가의 범용 PC들을 추가로 할당함으로써 확장성을 지원하는 scale-out 방식의 구현을 용이하게 한다.


 3.2. MapReduce의 단점

1)  고정된 단일 데이터 흐름

Map Reduce만을 정의하도록 한 MapReduce는 단순한 인터페이스를 제공함에 반해, 복잡한 알고리즘이나 selection-then-group-by-aggregation 작업이 아닌 알고리즘에서는 효율적이지 않다. 대표적인 것이 Join과 같은 이항 연산자(binary operator)의 지원이나 Loop의 지원이다. MapReduce에서는 이항 연산자를 지원하지 않았다. 때문에 Join은 하나의 MapReduce 작업으로 표현되지 못하고 여러 개의 MapReduce 작업을 직렬로 연결해 표현해야만 했다. Loop의 경우도 매 반복 때마다 계속 입력을 반복해서 읽어야 하는 등의 I/O 낭비가 심하였다. , MapReduce에서는 DAG(Directed Acyclic Graph) 형태로 자신의 워크플로우를 따로 정의하는 작업은 불가능하며, 복잡한 알고리즘의 구현을 위해서는 여러 번의 MapReduce 작업을 수행해야 하는 불편함과 그에 따른 성능 저하가 많다. [12]는 어떻게 반복적인 작업을 MapReduce가 비효율적으로 수행할 수 있는지에 대한 대표적인 예가 될 수 있겠다.
 

 2)  스키마, 인덱스, 고차원 언어 등의 미지원

 MapReduce는 병렬 처리에 대한 두 인터페이스를 제공하는 것 이외에 기존의 DBMS가 제공하는 스키마나 질의 언어, 인덱스 등을 제공하지 못한다. 스키마는 데이터의 무결성(integrity)를 지원하는데 있어서 중요한데, 이의 미비는 결국 프로그램 로직 상에서 무결성을 검증하도록 하게 한다. 이런 경우 프로그램도 복잡해지려니와 하부 데이터 형식의 변경은 프로그램 로직의 변경을 야기하고, 매번 데이터를 읽을 때마다 파싱을 수행해야 하는 부담도 갖는다. SQL과 같은 질의 언어의 미지원도 또한 질의 형식의 재활용이나 손쉬운 질의의 작성을 어렵게 한다. 인덱스는 질의 처리 성능의 향상을 위해 중요하지만 MapReduce는 인덱스를 지원하지 않으며, 데이터의 일괄 처리만을 제공한다. 때문에 DeWitt Stonebraker등은 MapReduce를 단순한 LTE(Load-Transform-Extract) 도구로만 처음에 언급하였다[7].
 

 3)  단순한 스케쥴링

 MapReduce는 기본적으로 런타임 스케쥴링에 기반한다. Hadoop의 예에서, 런타임 스케쥴링에서는 태스크를 수행하는 경우는 1) 실패한 태스크를 재수행하거나 또는 2) 아직 수행되지 않은 태스크를 수행하는 경우 또는 3)태스크가 매우 느린 경우이다.  특히 3)의 경우는 임계값을 설정해 두고 일정 시간 동안에 임계값을 도달하지 못하는 경우 straggler로 판정하고 이를 다시 수행시키는데, 노드 PC 성능이 상이한 경우 이 과정이 효과적이지 못하다.

더불어 한 클러스터에서 여러 MapReduce 작업을 동시에 수행하는 경우에 대해서 효과적인 다중-작업 스케쥴링을 제공하지 못한다.
 

 4)  상대적으로 낮은 성능

 MapReduceDBMS와 비교해 상대적으로 낮은 성능을 보인다. 이러한 시스템에서의 성능 측정은 대개 단위시간당 작업처리량(throughput)이나 시스템의 효율성(efficiency) 등으로 측정할 수 있다. [8]에서 보인 바와 같이 MapReduce는 다른 병렬 DBMS에 비해 데이터 적재 시간 이외에 우수한 성능을 보이지 못했다. DBMS의 경우 테이블에의 적재 이외에 인덱스 생성 시간 등이 소요되어 더 많은 시간이 소요되었다. [14]의 연구는 MapReduce를 이용한 병렬 정렬 연산에 있어 한 노드의 작업처리량이 5MB/sec에 못 미침을 보인다.

 MapReduce의 이러한 낮은 성능은 내고장성 지원을 위해 디스크 I/O를 희생하는 태생적인 이유에 근거한다. 우선 파일을 보관하는 분산파일 시스템은 2개의 replica를 추가로 가짐에 따라 디스크 공간과 I/O를 소비한다. 복제된 이후 읽기 연산은 각기 다른 복사본에 접근함으로써 병렬화를 꾀할 수는 있지만, 대신에 출력의 경우는 한 데이터를 가지고 여러 노드에 분산, 기록해야 한다.
또한 각 태스크는 수행 결과를 다음 태스크에 전달하기 이전에 태스크를 수행한 노드의 로컬 디스크 또는 분산 파일 시스템 상에 기록하는 과정을 먼저 수행한다. 이러한 추가적인 I/O는 DBMS에서는 존재하지 않던 것이었다. 예를 들어 다음과 같은 질의가 있다고 하자.

select distinct b.Name, avg(e.Salary)
from employee e, branch b where

b.Id= e.branchId and b.State ="AZ" 
groupby b.id

이 질의는 애리조나 주에 있는 지점들의 종업원의 봉급 평균을 지점별로 분류해서 출력하도록 한다.
이 질의에 대한 DBMS에서의 질의 플랜은 아래와 같다.

그림 2. 질의 플랜 트리

DBMS에서는 이러한 질의 플랜 트리의 수행에 있어 각 연산자가 다음 연산자에 데이터를 전달하기 전에, 데이터를 디스크에 기록한 다음 전달하지 않는다. 디스크 I/O를 가장 큰 비용으로 산정하여 디스크 I/O를 최대한 줄이고자 노력했기 때문이다. 반대로 MapReduce는 매번 연산자가 다음 연산자에 데이터를 전달 전에 디스크에 기록을 먼저 한다. Map은 로컬 디스크에 기록하고, Reduce는 분산 파일 시스템 위에 기록한다. MapReduce가 이러한 방식을 취하는 이유는 간단하게 내고장성을 지원하기 위해서이다. 반대로 디스크 I/O 때문에 성능은 더디어질수밖에 없다. 
 

여기에 더해 MapReduce 태스크들은 블로킹 연산자이다. 예를 들어 모든 Mapper가  종료되기 전까지 Reducer는 시작될 수가 없다. 이는 한 태스크가 느려지면 그 위의 질의 플랜 상의 다른 연산자들이 수행되지 못하고 대기 상태로 기다리게 한다. 그리고 그만큼 전체 실행 시간은 길어진다.
DBMS에서의 질의 플랜 트리는 각 연산자들의 중간 결과를 디스크에 기록하지 않고, 처리하는 족족 위 연산자에 전달한다. 따라서 각 연산자들이 동일시점에 서로 다른 데이터를 가지고 처리할 수 있는 
 파이프라인 병렬화(pipeline parallelism)가 가능하다. 하지만, MapReduce에서는 이와 같은 같은 병렬화를 수행할 수 없고 하나의 늦은 태스크(straggeler) 때문에 전체 작업이 지연될 수 있다
.
물론 DBMS에서도 Sort 같은 블로킹 연산자들은 존재한다. 하지만, 보다 많은 파이프라인 병렬화를 지원한다.

또한 MapReduce는 인덱스를 지원하지 않고, 데이터를 일괄로 읽음에 따라 I/O를 절약하기 곤란하다. 위의 그림에서 scan 시 인덱스를 이용한 입력 데이터의 생략을 MapReduce는 기대할 수 없었다.

이러한 이유로 MapReduce는 태생적으로 병렬 DBMS에 비해 간단하면서도 내고장성을 지원할 수 있는 반면 상대적으로 낮은 성능을 보일 수 밖에 없다. DBMS 분야에서는 각 연산자의 중간 결과 실체화라는 MapReduce의 가장 큰 특징을 유지하면서 기존의 DBMS에서의 I/O를 줄이기 위한 예전 연구들을 MapReduce에 적용하는 방식으로 성능 향상을 꾀한다. (이는 2부에서 설명한다.)

 5)  상대적으로 어린 시스템

MapReduce40여년의 역사를 가진 DBMS와 비교하여 아직 나온지 얼마 안된 기술임에 따라 여러 개발도구나 BI(business intelligence), 3rd party tool들이 존재하지 않는다. 또한 그 자체도 개선의 여지가 아직 많다. 예로, 오늘까지 MapReduce 논문[3]의 인용횟수는 2,575회이다. 그만큼 인기도 있지만 개선의 여지도 많다고 봐야 한다. 

 
 MapReduce 개선에 관한 연구들과 연구 이슈, 도전 분야는 2부에 계속

 
 

관련 연구

1. David A. Patterson. Technical perspective: the data center is the computer. Communications of ACM, 51(1):105, 2008.

2.   Peter Mell and et al. NIST Definition of Cloud Computing V15, 2009. http://csrc.nist.gov/groups/SNS/cloud-computing

3.   Jeffrey Dean and Sanjay Ghemawat, MapReduce: Simplified Data, Processing on Large Clusters, In Proceedings of OSDI 2004 and CACM Vol. 51, No. 1 2008

4.Jeff Dean, Design, Lessons, Advices from Building Large Distributed System, Keynote , LADIS 2009.

5. Hadoop. users List; http://wiki.apache.org/hadoop/PoweredBy

6. S. Ghemawat and et al., The Google File System, In Proceedings of ACM SIGOPS, 2003

7.   David J. DeWitt and Michael Stonebraker, MapReduce: a major step backwards, Database column blog, 2008

8.  Andrew Pavlo and et al. A Comparison of Approaches to Large-Scale Data Analysis, In Proceedings of SIGMOD 2009

9.   Michael Stonebraker and et al. MapReduce and Parallel DBMSs: Friends or Foes?, Communications of ACM, Vol 53, No. 1 pp. 64-71, Jan 2010

10.  Jeffrey Dean and Sanjay Ghemawat, MapReduce: A Flexible Data Processing Tool, Communications of the ACM,  Vol. 53, No. 1 pp. 72-72 Jan 2010

11.  Ajay Anand, Scaling Hadoop to 4000 nodes at Yahoo!, Yahoo! Developer Network, http://developer.yahoo.com/blogs/hadoop/posts/2008/09/scaling_hadoop_to_4000_nodes_a/

12.   J. Cohen, Graph twiddling in a mapreduce world, Computing in Science & Engineering pp. 29—41, 2009, IEEE Computer Society

13.   E. Anderson and et al. Efficiency matters!, ACM SIGOPS Operating Systems Review 44(1):40—45, 2010 ACM

Written by bart7449 

Posted by Bart
CS 전공/리뷰2011. 3. 2. 15:29
 "모든 컴퓨터 아키텍트들은 암달의 법칙을 알고 있다. 그럼에도 불구하고, 우리는 때때로 불가능한 성능 최적화를 위해 막대한 노력을 기울인다. 그리고, 전체 속도향상이 실망스러운 수준임을 확인했을 때에서야 비로소 암달의 법칙을 떠올린다."-In  Computer Architecture: A Quantitative Edition, 4th ed.  John L. Hennessy and David A. Patterson 

"모두들 암달의 법칙을 알고 있지만, 금방 잊어버린다!" - Thomas Puzak

  병렬 처리에 있어 중요한 비교척도로는 속도향상과 효율성이 존재한다. 1개의 프로세서 또는 1개의 노드 추가로 이루어지는 어떠한 알고리즘의 속도향상(speedup)은 다음과 같이 계산된다.
  (식 1)

 여기에서,  n는 프로세서의 수 또는 노드의 수, T1은 직렬 알고리즘의 실행 시간,   Tn 는 n 개의 프로세서 또는 노드를 이용한 병렬 알고리즘의 실행 시간을 의미한다.  속도 향상은 다시 크게 절대 속도향상(absolute speedup)과 상대 속도향상(relative speedup)으로 나뉘는데, 절대 속도 향상은 T1 이 가장 최적의 직렬 알고리즘(best sequential algorithm)의 실행 시간인 반면에, 상대 속도 향상에서는   T1 이 병렬 알고리즘을 한 프로세서에서 실행된 시간이다. 보통 속도향상을 얘기할 때는 상대 속도향상을 의미한다.

효율성(Efficiency)은 한 프로세서 또는 노드가 병렬 처리를 위해 얼마나 잘 활용되는지를 비교하는데 이용된다. 
 (식 2) 

 이상적으로는 병렬 처리에서 속도 향상은 추가되는 n 개의 프로세서 또는 노드의 수에 따라 선형(linear)으로 증가한다. 즉, Speedup(n) = n이 된다.  이 경우 효율성은 1이 된다. 하지만 실제로는 I/O, 네트워크 대역폭(bandwidth), 지연시간(latency) 등 여러 이유로 1이 되지 못한다. 가장 대표적인 이유는 알고리즘의 모든 부분을 병렬화(parallelize) 시킬 수가 없기 때문인데, 이 알고리즘에 남아있는 직렬 처리 부분은 모든 알고리즘의 병렬화의 한계를 결정한다. 이는 암달의 법칙(Amdahl's law)으로 설명된다.  
  

Amdahl's law[각주:1]
 암달의 법칙은 1967년 한 컨퍼런스에서 IBM의 Gene Amdahl이 논한 것으로, 이 공식은 어떤 시스템의 f  비율만큼의 부분이 S만큼 속도향상이 있을 때, 최대로 얻을 수 있는 이상적인 속도향상은 다음과 같이 제약됨을 설명한다. 또한, 여기에서는,  프로그램 수행을 통해 풀고자 하는 문제의 크기가 특정 부분의 속도 향상의 전후에도 언제나 동일한 것으로 가정한다.
 식(3)

1) 만약 속도향상을 이룬 부분이 작다면 (f값이 작다면), 전체 시스템의 속도향상은 미미하다.
2) 만약 f 부분의 속도향상을 무한대(S ∞)로 할 수 있다면, 전체 시스템의 속도향상은 1/(1-f)로 수렴될 수 있다.

예를 들어 전체 시스템의 20%를 2배만큼 속도향상을 시킬 수 있다면, 이로 인해 얻을 수 있는 전체 시스템의 속도향상은:
 (식 4)

로 제한된다. 이 암달의 법칙은 어떠한 프로그램을 병렬화할 때 얻을 수 있는 최대한의 속도향상을 예측하는데 이용되기도 하는데, 이 때는 아래와 같은 형식으로 표현될 수 있다. 
 (식5)

여기에서 f는 프로그램에서 병렬화된 부분을 n은 프로세서 또는 노드의 수를 의미한다.

먼저, 한 프로그램을 하나의 프로세서 또는 노드로 수행시켰을 때의 실행 시간을 1로 한다. 
다음으로 프로그램의 일정 부분 f를 n개의 프로세서나 노드로 병렬화하여 처리한다면, 이 f의 실행 시간은  f/n만큼의 시간이 들게 될 것이다. 반대로, 남은 부분 1-f는 한개의 프로세서 또는 노드로 수행하기 때문에 그대로 원래 만큼의 시간이 소요된다. 즉, 프로그램의 일정 부분 f를 n개의 프로세서나 노드를 이용하여 병렬화하는 경우 전체 수행 시간은 1-f+f/n만큼 소요되고, 이를 원래 시간 1과 비교하면 위의 식 5만큼의 성능 개선이 있다고 설명할 수 있다.

예를 들어, 만약 f=1, n=16, 즉 프로그램의 모든 부분이 병렬화되어 있고,  16개의 프로세서를 이용해 병렬 처리한다면, 속도향상은 16배가 될 것이다. 그리고, 이 경우 효율성은 1(=16/16)이 된다.  하지만, 프로그램의 모든 부분을 병렬화 할 수는 없다. 이런 이유로 실제 프로세서나 노드 수를 늘린다고 해도, 어느 수준 이상에서는 속도향상을 기대할 수 없다.  아래 그림은 암달의 법칙에서 프로세서의 증가에 따른 속도 향상의 한계를 보인다. 

Figure 1a.



그래프를 보면 프로그램의 95%(f=0.95)가 병렬화 되어 있다고 해도, 16개의 프로세서를 가지고 10배 이상의 속도향상을 내지 못한다.  이후로는 아무리 많은 수의 프로세서를 가진다 해도 20배 이상의 속도향상을 낼 수가 없다.  즉, 병렬화 되지 않은 부분이 많을수록 속도향상은 더 적다. 50%의 병렬화를 통해 16 프로세서를 가지고 얻을 수 있는 속도향상은 2배 밖에 되지 못한다. 실제로 프로그램 상에 남아있는 직렬 실행 부분의 비율은 아래 그래프와 같이 병렬화를 통해 얻을 수 있는 속도향상을 제약한다.

Figure 1b.


이러한 이유로 병렬 처리에서 있어서는 프로그램의 직렬화 부분(1-f)를 얼마만큼 줄이느냐, 다른 말로 병렬화 부분(f)을 얼마나 늘이느냐 것이 관건이 되어 왔다. 또한, 실제로는 모든 부분을 병렬화할 수 없기 때문에, 프로세서 수를 계속 늘려도 병렬화의 이점을 추가로 가질 수가 없다. 이에 따라서 병렬 처리는 보통 소수의 프로세서를 가지고서 병렬 처리를 해 왔다.  프로그램의 병렬 부분과 속도향상과의 관계는 위 식에 의해 아래와 유도가 가능하다.
 (식 6)
Gustafson's law[각주:2]
 구스타프슨의 법칙은 1988년 Sandia national Lab에 있던 John Gustafson이  고안한 것으로  규모가 충분히 큰 문제들은 효과적으로 병렬화가 가능함을 기술하고 있다. 이는 암달의 법칙이 병렬화를 통해 일정 수준 이상의 속도향상을 기대할 수 없다고 얘기하는 것에 배치되는데, 그렇다고 암달의 법칙이 틀렸다는것은 아니다. 암달의 법칙은 계속 유효하다. 이 법칙은 아래와 같이 표기된다.  
 (식 7)
 여기에서 n은 프로세서 또는 노드의 수, α는 프로그램에서 병렬화되지 않은 부분을 의미한다(, α= 1-f).
이 법칙에 따르면, 만약 n=16이고 α=0.05이라면(95%가 병렬화 되어 있다면), 얻을 수 있는 속도향상은 15.25배(16-0.05*15) 이다. 이는  동일한 조건에서 속도향상은 10배를 넘지 못한다는 암달의 법칙과 상반된다. 이 이유는 무엇인가?

 암달의 법칙이 병렬 처리에 있어 병렬화 전후의 문제 크기는 변하지 않는 것을 가정하는데 반해, 구스타프슨의 법칙은 고정된 처리 시간 개념을 도입하여 보다 큰 문제에 대한 속도향상을 설명한다. 
 즉, 암달의 법칙에서는 고정된 문제 크기를 갖는다고 가정하였는데, 이는 프로세서 수의 증가에 상관없이 문제 크기는 증가하지 않는 것을 기초로 출발하였다.  아래의 그림을 보자.

 그림과 같이 직렬 시스템에서 프로그램을 실행하는데 걸린 시간은 프로그램의 직렬 부분 s와 병렬화 가능한  부분 p의 실행 시간으로 구성된다. 즉, s+p=1 이 병렬화 이전에 소요된 시간이다. 그리고 병렬화를 통해 얻어진 실행시간은 s+p/N이다. 여기에서 N은 프로세서의 수이다. 따라서 전체 속도향상은 식 1에 따라
1/(s+p/N)이 된다. s를 1-f라 하고 p를 f로 치환하면 위의 암달의 법칙(식 5)와 동일한 수식을 얻게 된다.

 반대로, 구스타프슨의 법칙은 주어진 시간 내에 보다 많은 크기의 문제를 해결하는 경우 병렬화가 효과적인 방법이 됨을 설명한다. 아래 그림을 보자 .  


 여기에서는 프로그램을 병렬화하였을 때의 실행 시간을 s+p=1로 하고, 이를 기준으로 프로그램의 직렬 시간과 비교한다. 즉 여기에서 속도향상은 식 1에 따라 s+Np가 된다. 여기에서 s를 α로, N을 n으로 치환하면, 식 7의 구스타프슨 법칙과 같게 된다. 즉 구스타프슨의 법칙은 주어진 시간에 병렬화로 임의 크기의 문제를 해결할 수 있을 때, 직렬 프로그램 실행 시간과의 비교를 통해 속도향상을 측정하는 반면에, 암달의 법칙은 직렬 실행 시간을 기준으로 병렬화를 수행하였을 때 얼마만큼의 속도향상이 있는지를 보인다는 점이 다르다. 병렬화 가능한 부분의 문제 크기가 클수록 구스타프슨 법칙에 따르면, 속도향상이 높게 나올 수 있다. 왜냐하면 문제 크기에 따라 더 많은 프로세서 할당을 통해 병렬 실행 시간 값(p)을 고정시킬 수 있기 때문이다. 예를 들어, 병렬가능한 문제 크기가 100이면, 100개의 프로세서로 할당하면 p=1이 된다. 1000이면, 1000개의 프로세서를 할당해서 p=1로 떨어지게 한다. 반대로 암달의 법칙은 문제 크기와 상관없이 고정된 제한 속도향상 값을 갖는다. 

 자동차를 가지고 두 법칙을 비유하자면, 

1) 자동차로 120Km 떨어진 도시로 이동한다고 하자. 그리고, 60Km/h의 속도로 한시간을 이미 이동하였다. 이제 나머지 절반의 거리를 아무리 빠르게 운전한다 하더라도, 출발지에서 목적지까지의 자동차의  평균 시속은   120Km/h를 넘을 수 없다. 이미 이동하는데 한시간을 써버렸고 아직 60Km의 이동 거리가 남아 있기 때문에 자동차가 남은 거리를 무한대의 시속으로 이동한다 하더라도, 이미 지나간 시간은 돌아오지 못하기 때문이다. (암달의 법칙)

2)  자동차로 120Km/h보다 낮은 속도로 이동하고 있었다고 하자. 남은 시간과 남은 이동거리가 충분하다면, 이전까지 얼마나 많이, 또 얼마나 천천히 운전했냐에 상관없이 자동차의 평균 시속은 120Km/h를 넘을 수 있다. 만약 60Km/h의 속도로 자동차를 한 시간 동안 운전했다면,  이 후 한 시간을 180Km/h 로 운전하거나 또는  150Km/h로 두 시간을 운전한다면, 총 이동 거리에 대한 평균 시속은 120Km/h에 도달하게 된다. (구스타프슨의 법칙)

Karp-Flatt metric[각주:3]
 카프-플랫 척도 1990년에 Alan H. Karp와 Horace P. Flatt에 의해 병렬 프로세서 시스템에서 코드의 병렬화를 측정하기 위해 고안되었다. 이 식은 측정된 속도향상 값을 가지고, 프로그램의 직렬화 부분의 비율을 찾아내는데 효과적이다. 암달이나 구스타프슨의 법칙은 실제 병렬 처리에 있어 스케쥴링, 프로세서간 통신 비용이나 프로세스간 동기화에 소비되는 비용, 프로세서간 불균형한 작업량 등을 고려하지 않는 이상적인 법칙이다. 반면에 이 척도는 실제 실험 결과를 대상으로 직렬화 부분의 비율을 계산할 수 있게 해준다.

 (식 7)
예를 들어, 1개의 프로세서를 가지고 프로그램을 실행하였을 떄 측정된 실행 시간이 5분(T1-5min)이 걸렸고, 10개의 프로세서(n=10)을 가지고 프로그램을 병렬화하였을 때 실행 시간이 1분이 걸렸다면(Tn=1min), 

 (식 8)

으로 해당 코드의 직렬 실행 부분은 1/9(약 11.1%) 임을 식을 통해 유도할 수 있다.  

Superlinear Speedup
  암달의 법칙에 따르면, 병렬화를 통해 얻을 수 있는 속도향상은 선형 이상이 될 수가 없다. 하지만, 특정한 경우에 프로그램의 병렬화는 초선형(superlinear)의 속도향상을 보이기도 한다. 즉, n개의 프로세서로 병렬화를 하였을 때 n배를 초과한 속도 향상이 나오기도 한다. 이렇다고 암달의 법칙이 틀렸다고 할 수는 없다. 다만 암달의 법칙이 초선형의 속도 향상을 보이기도 하는 이유를 설명하지 않는다 정도로 해석하는 것이 맞다. 초선형의 속도향상이 가끔씩 발생하는 이유 중 가장 큰 이유는 메모리 계층 상의 캐시 히트 때문이다.  즉 데이터 처리에 있어 이전에 이용되었던 데이터가 캐시에 남아 있어 메모리나 디스크 IO 없이 빠르게 처리된 경우에는 가끔씩 이런 경우가 목격된다.
  또 다른 이유로는 데이터의 공간 복잡도에서 발생하기도 한다. 예를 들어 x개의 입력을 가지고 2x의 처리 데이터를 작성하는 시스템이 있다고 하자. 이 데이터를 n개의 프로세서에 분할 할당한다고 하면, 각 프로세서는  2x/n  크기의 데이터를 처리할 것이다. 하지만 입력 자체를 n개로 나누어 처리 데이터를 작성한다면, 각 프로세서에 할당되는 데이터의 크기는   2x/n으로  2x/n 보다 훨씬 작게 된다. 병렬 처리 알고리즘의 복잡도가 선형이라면, 그만큼 병렬 실행 시간도 초선형으로 줄어들 수 있다.
 
Acknowledgement
그림 1a.는 Wikipedia의 암달의 법칙에서, 1b.~2b.는 참고문헌 [2]의 논문에서 발췌하였음. 식들은 모두 Online LaTeX Equation Editor를 이용해 작성되었음.

Written by bart7449

  1. Amdahl, G.M. Validity of the single processor approach to achieving large scale computing capabilities, In AFIPS Conference Proceedings, Vol. 30 (Atlantic City, NJ Apr. 18-20). AFIPS Press, Reston, Va., 1967, pp. 483--385 [본문으로]
  2. Gustafson, J.L, Reevaluating Amdahl's law, Communications of ACM , May 1988 Vol. 31, No. 5 pp.532--533 [본문으로]
  3. Karp Alan H. and Flatt Horace P. Measuring Parallel Processor Performance, Communications of ACM, Vol 33, No. 5, May 1990 [본문으로]
Posted by Bart
CS 전공/생각?2010. 11. 17. 15:26

많은 사람들이나 언론에서 Steve Jobs를 '프리젠테이션의 귀재', '발표를 하려면 잡스처럼 해야 한다' 고 한다. 그래서 Steve Jobs의 제품 설명회(iPad와 iPhone4)의 발표 자료를 직접 보았다. 2시간은 족히 걸리더라.
Jobs가 개인적으로 좋은 목소리를 가졌다고 생각되지는 않았다. 오히려 약간 카랑카랑하니 거칠기까지 했다. 그렇다고 잘생긴 것도 아니다. 머리는 벗겨졌고, 중동계(잡스의 친아버지는 시리아 사람)인 그의 얼굴 또한 WASP와는 구별된다.

하지만 그의 발표에서 보면 확실히 배울 점이 몇 가지 있다.

첫 째는 숫자로 자신이 하는 말을 뒷받침하는 것이다.
가령 이런 식이다. 보통 연사들은 '오늘 발표에 많은 분들이 참석해 주셨다.' 보통 사람들은 이렇게 말을 하는데 잡스는 오늘 30개국에서 1500명이 넘는 사람이 참석을 해주었다. 이런 식이다. 제품의 특징을 말할 때도 마찬가지이다. 배터리 수명이 좋다. 속도 빠르다. 이런 식이 아니다. 배터리 수명은 최대 10시간이고, 속도는 1GHz이다. 제품 출시는 몇월 몇일까지 어느어느 나라에 될것인지 일일이 나라까지  나열한다. 사람은 수치에 약하다.

둘 째는 간단하고 쉬운 말로 천천하고 분명하게 말한다.
잡스가 하는 영어는 내가 경험한 어느 미국 사람들보다도 느리게 말하는 거다. 가끔은 외국인인 나조차 답답하게 여겨질 정도로 천천히 말한다. 대신에 하고 싶은말은 간결하고 분명하게 말한다.

셋 째는 철저하게 준비를 하고 오는 것이다.
발표에 있어서는 현재 슬라이드에서 할 이야기를 끊기지 않고 다음 슬라이드에서 이어서 계속 설명해 나가는 것, 즉 적당한 때에 슬라이드 전환을 해줘야 한다. 그래서 언제 슬라이드를 전환할 것인지를 알고 다음 슬라이드의 내용들이 뭔지 기억해 두어야 한다. 잡스는 다음 슬라이드가 뭔지 보지 않고  슬라이드를  계속 자기 발표를 한다. 철저히 자기의 발언과 슬라이드 간의 싱크를 맞춰놓고 들어온다. 보다보니 잡스가 손에 든 리모트를 잘못 조작해서 다음 슬라이드로 넘어가는 경우가 있었는데, 자신이 정해둔 타이밍에 슬라이드 전환이 안된 것조차 실수로 생각하더라.

넷 째는 슬라이드를 간단하면서 명료하게 쓴다는 것이다.
사실 기술 소개 자료들은 쓸 내용이 많아서 간단하고 명료하게 작성하는게 더 어렵다. 
간단하게 몇자로 슬라이드를 만들면, 전달할 내용이 빠지게되고, 반대로 슬라이드에 많은 내용을 집어넣으면 청중이 보고 이해하기가 어렵다. 
또한 사람은 눈과 귀로 동시에 다른 정보를 습득할 수 있다. 때문에 슬라이드에 쓰여진 글들을 그대로 읽는 발표자를 만나면 청중은 무지하게 괴롭게 된다.

잡스는 그런면에서 슬라이드로 전달할 내용과 말로서 전달할 내용들을 정확히 나눠서 구분하고, 슬라이드의 내용을 간단명료하게 하는데 일가견이 있는 것 같다. 자신의 회사를 기술과 인문학의 갈림길에서 고민하는 회사다라는 멘트를 하면서 슬라이드에는 인문학과 기술의 이정표 사진을 보이고 있다.
복잡한 생각을 하나의 그림으로 투영시켜 설명하는 정말 멋진 사례라고 보여진다. 



언제나 그렇듯 프리젠테이션의 의도는 상대방을 설득하는 것. 상대방을 설득하기 위해서는 이해하기 쉽고 직관적인 예들을 가지고 설명하는 것이 좋겠다. 여기 교수님도 비슷한 말씀을 하시더라.
프리젠테이션은 자기가 아는 것을 발표하는 것이 아니고 자기가 아는 것을 남이 알아듣도록 하는 거라고... 옳은 말이다. 

Jobs의 최근의 presentation들은 http://www.apple.com/apple-events에서 볼 수 있다.




Posted by Bart
CS 전공/학회와 정보2010. 11. 3. 14:14
Posted by Bart
CS 전공/리뷰2010. 10. 11. 10:54
지난 주 금요일에 있은 seminar에 Stefan Tai  박사가 오셔서 Cloud Service Engineering이라는 제목으로 약 90분간 발표. Host인 송준화 박사님의 말에 따르면, 가장 성공한 한인 2세대 중 한 명일 것이라고. 태씨라고..독일에서 태어나 미국의 대학을 거쳐 IBM Watson 에서 연구원으로 있다가 지금은 독일의 Karlsruhe Institute of Technology(KIT)에 교수로 초빙받아 가 계신다고.

Seminar는 technical depth가 깊지는 않은, 좀 개념적이고 비즈니스 쪽 얘기도 좀 있었지만 갈무리할만 내용들(특히 정의 관련하여) 이 있어서 정리를 해보자면,
  • Cloud services are infinite IT(compute, storage) resources.
    • available when needed
    • Ubiquitously accessible
    • offered in an open market of competitive service providers
    • cost-efficient ( if not free)

Cloud computing

  • Cloud computing is a business model, and a distributed computing model
    • building compute or storage virtualization, cloud computing provides scalable, network-centric, abstracted IT infrastructure, platform, and applications as on-demand services that are billed by consumption.
  • Three main objectives
    • Enterprise-grade system management
      • Under-utilized: waste computing power & energy
      • Over-utilized: cause interruption or degradation of service levels
    • Internet-scale service computing
      • Services, Internet-scale
      • Sophisticated infrastructure, platform& applications available as modular services
      • The Web as a combined computing, business and collaboration platform
    • Understanding business opportunities
      • Faster time-to-market & cost-effective innovation processes
      • Dynamic, open business, networks
  • Cloud Service Engineering-> business engineering + software engineering
  • "A service is a means of delivering value to customers by facilitating outcomes customers want to achieve without the ownership of specific costs and risks" - ITIL Handbook Service Definition

그리고, 현재 KIT에서 IBM과 같이 수행하고 있는 두 과제를 소개하였는데..

1) Recovery Cloud
 기본 개념은 재해에 대비한 데이터 복제를 cloud 기반으로 하자는 것인데, Tai 박사는 이를 Recovery-as-a-service, Business continuity services 등으로 설명. 결국엔 replica를 cloud platform위에 올리자는 얘기인데 이때의 ownership이나 보안 문제는 어떻게 해결할 것인가 의구심이 좀 든다. recovery가 필요한 기업의 운영 데이터를 클라우드 제공자에게 맡긴다라.

2) Cloud meta-storage
이것은 여러 다양한 클라우드 기반 저장소들(BigTable, HDFS, Dynamo 등)을 대상으로 공통된 abstraction을 제공하는 시스템의 개발을 목적으로 하는데, 쓰여져 있는 바로는

"For purposes of provider independence & scalability (data volume & concurrent users), 
store data with diverse cloud storage service providers on multiple replicas" 
-> High-available, single storage provider architectures to a service value network of multiple storage service providers"

이를 위한 설계 원리는
  • Implement a simple key-value storage model, following the REST architectural style
  • Trade-off "C" for "A" (cf. CAP theorem)
  • Consider failures/outages to be the norm, not the exception)
    • Quorum-based system with hinted handoff
  • Use asynchronous message within the system
  • Use custom levels of security (authentication, additional encryption, file transfer via https)
  • Elevate concept from storage solution like Amazon Dynamo, GFS, Yahoo! PNUTS to a cloud storage SVN(Service Value Network)
와 같이 기술. 사실 기술적 특성은 Amazon의 Dynamo와 유사한듯 싶고, Mediator-Wrapper 형태의 상위 시스템을 만든다라고 봐야할까.. 






Posted by Bart
CS 전공/생각?2010. 10. 4. 22:53

옛날의 나도 그랬고, 지금도 많은 사람들이 그렇다. 학회는 그냥 논문된거 정해진 시간에 딱 발표하고, 나머지 시간은 그 주변의 관광지를 놀러다니기 위함이다~! 더군다나 그 학회가 외국의 유명한 관광지에서 열리는 곳이라면 더더욱 그렇게 된다. 사실 이 분야 사람들 만나고 동향 파악하려면 학회만한 것이 없다. 물론 비행기 타야하고, 시간/돈 들기는 하지만..  그런면에서 BLOG@ACM에 올라온 IBM Almaden center의 연구원인 Tessa Lau 박사가 쓴 글은 간단하게 어떤 자세로 학회에 참석해야 하는지를 짧고 굵게 설명해 주어 좋다.

1. Read the conference program ahead of time
2. Make a list of who you want to meet
3. Who should you meet?
4. Ask questions at the conference
5. Memorize your elevator pitch*
(*주: elevator pitch 또는 elevator speech는 자신과 자신의 연구에 대한 아주 짧은 소개)
6. Have social lunches
7. Don't clump (아는 사람끼리 무리지어 다니지 말고 학회말고는 볼 수 없는 사람을 만나라)
8. Enjoy!

원문: http://cacm.acm.org/blogs/blog-cacm/97527-how-to-attend-an-academic-conference/fulltext

Posted by Bart
CS 전공/리뷰2010. 10. 4. 22:37


David A. Patterson이 "데이터센터가 컴퓨터이다"
[각주:1]라고 말하였듯이 최근의 클라우드 컴퓨팅에서는 shared-nothing[각주:2] 구조로 저가의 PC들을 고속의 네트워크로 묶어 데이터를 병렬 처리를 수행함으로써 scalability와 speedup(이에 관해서는 블로그의 다른 글 참조)을 보장한다.

이렇게 많은 PC들을 엮어 병렬 처리함으로써 speedup을 이루는 것을 기존의 방식, 즉 좀더 빠른 연산을 위해 컴퓨팅 파워가 적은 서버에서 대형의, 컴퓨팅 파워가 높은 서버로 대체하는 scaleup과 대비하여 scaleout이라고 설명하기도 한다. 데이터 센터는 무수히 많은 노드들로 이뤄지고 이 노드들은 상대적으로 저가의 PC 서버들이다. 이렇다 보니 데이터 센터에서의 고장은 매우 빈번할 수 있다. 데이터 센터에서의 노드 장애들이 얼마나 빈번한가 하면, Google의 한 데이터센터에서 일할 구인 광고( Job posting)에는 이런 항목이 있다.  

Position requirements:
  • Able to lift/move 20-30 lbs equipment on a daily basis
    (매일 9~13.7Kg의 장비들을 들고, 옮길 수 있어야 함)

 그러면 데이터 센터에서는 어떤 유형의 장애들이 얼마나 많이 발생하는가? 데이터베이스 분야에서 장애는 크게 사용자의 오류나 응용 프로그램의 오류, DBMS 오류, OS 오류와 같은 SW 적인 오류와 하드웨어의 오류, 네트워크 분할(network partition)이나 네트워크 오류, 재해 등과 같은 여러 문제로 기인할 수 있다[각주:3]. 그 중 여기에서는 순수한 HW의 오류에 대해서만 살펴본다. 그중에서도 특히 메모리와 HDD의 오류에 대해서 살펴본다. (CPU 오류는 거의 없다고 본다. 물론 Pentium에서의 FDIV(Floating Division) 오류와 같은 오류가 있었기는하지만.. )흔히들 HW 오류는 SW 오류보다 매우 드물다는 것이 많은 사람들의 의견이지만 많은 노드들을 갖는 데이터 센터에서는 이 오류의 빈도가 만만치가 않다. 마침 HW 오류들에 대한 통계 정보가 있어 이들을 소개한다.  Bianca Schroeder가 Google의  데이터센터에 있는 노드들을 대상으로 2년 반 동안 조사한 바에 따르면 다음과 같은 메모리 오류를 겪는다는 결과[각주:4]가 나왔다.

Picture 27

이 조사에 따르면, 매년 32.2%의 노드들이 CE(Correctable Error)-ECC 등을 통해 잡히고 고쳐질 수 있는 메모리 오류, 하지만 오류 정정에 따른 비용은 물론 있다-를 겪었으며, 매년 22,696번의 오류를 겪는다고 보고되었다. 또한, 고쳐질 수 없어 결국엔 DIMM 모듈 자체의 교체로 대처할 수 밖에 없는 오류 UE(Uncorrectable Error)는 1.29%의 노드가 겪는다고 보고되었다.   DIMM 모듈 단위로 이 통계를 다시 써보면, 1년마다 8.2%의 DIMM 모듈이 CE를 겪고, 0.22%의 DIMM모듈이 UE를 겪는다.  예를 들어, 노드 1만대를 가지고 구성되는 데이터센터에서는 3,220여대의 노드가 CE를 겪고,  129여대가 UE를 겪는다는 얘기이고 129여대는 메모리 모듈을 교체해야 한다는 의미이다. 오류 발생이 균등 분포라 가정해보면 약 3일마다 한 노드에서 UE 메모리 오류가 발생하여 결국엔 DIMM 모듈을 갈아줘야 한다.  물론 그 장애가 메모리 오류에서 발생했다는 사실을 인지할 수 있는 경우에만. 디스크의 경우는 또 어떠한가? 

우리들은  FC(Fibre Channel)나 SCSI 드라이브가 SATA 드라이브보다 더 신뢰성이 높다고 생각한다. 또한 RAID level 5(block-interleaved distributed parity) 등으로 시스템을 구축하면 보다 안전하다고 생각각한다. 그리고  제조업체가 보증하는 MTTF(또는 MTBF)는 충분히 길다고 생각한다.  정말일까? 이와 관련한 재미있는 논문들이 있다.


  • MTTF(Mean Time To Failure)는 MTBF(Mean Time Between Failure)와 많이 혼동된다. 하지만 그 의미는 조금 다르다. MTBF(Mean Time Between Failure)는 한번 고장난 후 다시 고장 날 때까지의 평균 시간으로 고장이 수리될 수 있는 시스템에서 측정된다.  한 시스템에 대한 MTBF를 측정하는 경우 동일 시스템을 여러 개를 두고 이들의 두 고장간에 정상동작된 시간들의 합을 전체 고장횟수로 나눈 시간을 MTBF로 측정한다.  제조업체가 자신의 시스템에 백만시간의 MTBF를 보증한다 하자. 그러면, 두 고장간 드라이브가 정상 동작될 평균 시간은 백만 시간이다.  이것을 어떻게 제조업체들이 측정할까?  디스크들을 백만 시간(약 114년)을 돌리고 평균을 내는가? 물론 아니다. 많은 수의 드라이브들을 돌려서 정상동작 시간들의 합을 드라이브들의 총 고장 횟수+1로 나눈다. 즉 1,000개의 드라이브를 1,000시간 돌려서 드라이브 한개라도 고장이 안나면 (1000*1000)/0+1로 MTBF가 백만 시간이 된다. 때문에 우리는 MTBF가 백만이 넘는 디스크가 나가는 경우를 볼 수가 있다.
  • MTTF는 MTBF와 달리 고장이 수리될 수 없는 시스템에서 첫 고장이 발생하는 평균 시간을 의미한다.
  • AFR(Annualized Failure Rate)은 임의의 많은 수의 디스크들을 돌려 이들  중 1년 안에 얼마나 많은 디스크들이 고장이 나는지를 확률로 표현한다.
  • MTTF는 위의 MTBF와 같은 방식으로 계산될 수있지만,  1년에 고장없이 동작된 시간을 AFR로 나눔으로써 계산될 수도 있다. 가령1년에 5,800시간을 고장없이 동작했고,  AFR은 0.58%이라면 5800/0.0058= 1,000,000시간이 된다.

Google의 엔지니어들에 의해 쓰여진 첫 번째 논문[각주:5]은 100,000개의 디스크를 분석하여 디스크를 디스크의 나이와 사용 빈도,  온도에 따른 오류 발생률을 측정하였다(AFR: Annualized Failure Rates). 또한 SMART 와 같은 디스크의 자기 모니터링 기능의 유용성도 조사하였다.



그림 2에서 보이는 바와 같이 초기 디스크 설치 시에는 고장이 좀 나다가 발생하지 않는 경우에는 1년여간은 안정적으로 동작함을 볼 수 있다. 하지만 2년째부터 AFR는 급격히 올라가고 3년째부터는 AFR이 8%를 넘는다. 이는 간과할만한 수치가 아니다. 10,000개의 노드 PC들로 구성된 데이터 센터에서 노드가  디스크 1개씩만 가진다고 하면, 매년 800개 이상의 노드 PC들의 디스크가 교체되어져야 하기 때문이다. 균등 분포의 오류 발생을 가정할 경우 매일 2-3개의 PC들의 디스크가 교체되어져야 한다.


더불어 디스크는 쓰면 쓸수록 많이 고장이 난다. 그림 3은 활용도를 저, 중, 고로 나누고 이들 간의 AFR 차이가 어떤지를 보인다. 특이한 점은 3개월 짜리 어린 디스크를 많이 이용하는 경우 AFR이 가장 높게 나왔다는 점이다. 또 다른 특징은 어린 디스크들은 고온과 AFR간의 상관관계가 없다는 것이다. 오히려 저온에서 더 높은 AFR을 보인다. 하지만 이것은 디스크가 늙어갈 수록 온도 증가에 따라 AFR이 증가하는 형태로 역전된다.


또한 SMART(Self-Monitoring, Analysis, and Reporting Technology)와 같은 디스크 모니터링 도구는 대규모의 디스크 어래이에서는 거의 사용 의미가 없다고 한다.

Schroeder의 또다른 논문[각주:6]에서는 Los Alamos와 Pittsburgh의 Supercomputer Center의 HPC 클러스터들과 여러 인터넷 서비스 제공자들의 디스크들을 분석하여 다음과 같은 결과를 얻었다.



여기에서 발견한 내용은 다음과 같다.

1. SCSI, FC 디스크같은 고가의 디스크와 저가의 SATA 디스크 간의 연간 디스크 교체 비율(ARR)은 큰 차이가 없다. 즉 고가 디스크라고 ARR이 낮은 것은 아니다.

2. infant mortality(가동 초기의 높은 오류율)을 발견하지 못하였다. 디스크는 그냥 나이에 따라 서서히 닳아(wear-out) 간다. 즉,  나이가 듬에 따라 교체되는 비율이 점차 증가한다.

3. Vendor가 제시하는 MTTF와 실제 ARR과는 많은 차이가 나며, 벤더의 MTTF보다 훨씬 많은 디스크가 고장났다.

4. 디스크 교체 간 평균 시간은 생각보다 짧다. 이것은 RAID 시스템(특히 level 5)에서 고장난 디스크를 교체하는 동안에 다른 디스크가 고장나 데이터를 잃어버릴 확률이 그만큼 높음을 의미한다.  


결론
1. 메모리나 디스크는 무결점의 장치가 아니다.

2. 디스크는 수명이 있고, 생각보다 빨리 단다.  

3. 이런 장치들이 집적된 데이터 센터에서는 많은 수의 장치들이 빠르게 고장날 수 있다.

4. 이러한 환경에서는 빈번한 장애에 대한  내고장성을 지원하는 것이 보다 중요하다.
 

  1. David A. Patterson, The Datacenter is the computer, CACM Vol.51, No. pp.151--151. 2008 [본문으로]
  2. M. Stonebraker, The case for shared-nothing, Database Engineering Bulletin, Vol. 9 No. 1 , pages 4--9, 1986 [본문으로]
  3. M Stonebraker, In Search of Database Consistency, http://cacm.acm.org/magazines/2010/10/99500-in-search-of-database-consistency/fulltext [본문으로]
  4. Schroeder, B. and Pinheiro, E. and Weber, W.D., DRAM Errors in the Wild: A Large-Scale Field Study, In Proc. of ACM SIGMETRICS, 2009 [본문으로]
  5. Pinheiro, E. and Weber, W.D. and Barroso, L.A., Failure trends in a large disk drive population, Proceedings of the 5th USENIX Conference on File and Storage Technologies (FAST’07), 2007 [본문으로]
  6. Bianca Schroeder and Garth A. Gibson, Disk Failures in the Real World: What Does an MTTF of 1,000,000 Hours Mean to You?, 5th USENIX Conference on File and Storage Technologies(FAST'07), 2007 [본문으로]
Posted by Bart
CS 전공/리뷰2010. 4. 7. 15:35
점차 가격 경쟁력을 키워가면서 HDD를 대체할 수단으로 인식되고 있는, NAND Flash Memory는 단순한 임베디드 기기에서의 이용을 넘어 이제는 데이터베이스 서버 등에서 데이터의 보관, 중간 데이터의 임시 저장 등 여러 용도로 활용되고 있다. 특히 플래시 메모리의 낮은 소비 전력은 internet-scale server cluster를 구축하는데 있어, 단위 질의 처리에 필요한 전력량을 낮추는데도 크게 기여를 한다. 하지만 NAND flash memory는 IO 연산의 비대칭성, in-place update의 불가능 등의 몇가지 한계에 대한 많은 논의가 있어 온 것도 사실이다.

이 2개의 논문은 NAND flash memory의 서버로의 도입의 효과와 그로 인한 여러 문제들(버퍼 교체 정책 등)을 논한다.

Integrating NAND flash devices onto servers

tamu.edu [PDF] 
Full-Text @ UofA Library

D Roberts, T Kgil, T Mudge - Communications of the ACM, 2009 - portal.acm.org

상기 논문에 추가하여 다음의 논문의 내용을 같이 참조하는 것이 좋을 것으로 판단합니다.
(위 전체분량은 아래논문의 분량을 같이 포함한 분량임): 
The Five-Minute Rule 20 Years Later (and how flash memory changes the rules), CACM July 2009, pp.48-59

Jim Gray가 실종된 후 Goetz Grafe가 Flash memory의 출현에 따른 변화를 Five-Minute Rule에 반영했네요.

Five-Minute Rule은 원래 87년에

란 제목으로 Jim Gray에 의해 처음 쓰여지고, 10년 뒤

 
다시 쓰여지고, 10년 뒤 J Gray가 실종된 후에는 Graefe 혼자 썼네요. 

The five-minute rule twenty years later, and how flash memory changes the rules

psu.edu [PDF]
G Graefe - Proceedings of the 3rd international workshop on Data …, 2007 - portal.acm.org

순서대로 읽어가보면 memory hierarchy의 변화가 어떻게 이 rule-of-thumb에 영향을 미쳤는지 볼 수 있을 듯.

ps. Jim Gray만큼 이 분야에서 사랑받고, 인정받는 대가는 없는 듯.

Tribute to honor Jim Gray in May 2008 http://goo.gl/2B0I 에 보면, Jim Gray의 업적들이 어떤지 알 수가 있음.
더불어 DB Guru들도 추모를 위해 한 자리에 모이는 것도 그렇고
.
..
great engineer를 어떻게 생각하고 어떻게 대우하는지를 보면 그 나라가 선진국인지 아닌지 알 수 있는 듯.

어디는 IT직종은 야근비 책정도 안하는 회사가 있다면서요? 야근이 잦다고? 나참. 

Posted by Bart
CS 전공/생각?2010. 2. 12. 00:55
엊그제 문 교수님과의  미팅 중에 "UA 학생 계정들은 작년부터 Google Apps로 아웃소싱 중"이란 말씀을 하시더라.  이를 위해 생각보다는 굉장히 많은 돈이(몇백만 달러) 지불되는 것으로 안다고 하시더라.
구글은 참 비즈니스를 잘하는 것 같다. 적어도 클라우드 컴퓨팅으로 이윤을 얻는 대표적인 기업이다. 이미 여러 대학과 기업들이, 심지어 캘리포니아 주정부도 구글 앱스를 이용하고 있다더라. 분명 기업이나 학교 입장에서는 이메일 계정 유지를 위한 서버나 네트워크 같은 HW 와 기술팀들의 인건비 등의 절감 때문에 아웃소싱을 하는 것이겠다. 문제는 민감한 정보들이 한 기업에 의해서 다루어질 수 있고, 절감된 비용 중에는 HW 비용 뿐만 아니라 기술팀들이라는 사람이 들어갈 수 있다는 거다. 결국엔 아웃소싱하면서  불필요한 인력은 잘리게 되지 않을까. 더이상 운용할 서버도 SW도 없어지는데 이들을 계속 고용할 필요가 없을 것이다. 그리고 구글은 인터넷 상에 공개된 데이터 뿐만 아니라 기업내 내부 데이터까지 관리할 수 있게 된다.

문득 SSM(Super Super Market; 기업형 슈퍼마켓) 진출로 동네 슈퍼들을 위협하는 대형 유통업체들이 생각난다. 유통망의 이점을 통해 동네 슈퍼들을 고사시키는 대형 유통업체들과 검색엔진의 이점을 통해 기존 여러 영세(?) 업체들이 새로이 개척하거나 진출한 분야로 비즈니스를 확장하는 구글. 
어제 퇴근길 라디오에는 구글이 이제 고속 인터넷 액세스 서비스에도 진출한다고 하더라. 엊그제에는 Buzz라 명명된 SNS 서비스를 새로이 시작해다. 
사실상 구글은 이제 안하는게 없다고 봐도 무방할 지경이다. 검색 기술을 기반으로 해서 이제는 Google Apps를 필두로 한 클라우드 컴퓨팅, OS, 모바일 플랫폼, 스마트 폰, SNS, 인터넷 액세스 서비스까지. 
이용하기 편리하고 한 곳에서 모든 서비스를 이용할 수 있다는 것은 큰 장점이 된다. 구글 계정을 가지고 있으면, 구글이 제공하는 많은 서비스들을 이용할 수 있다. 때문에 많은 유저들이 구글을 이용하고 있다. 마치 허름한 동네 슈퍼보다는 깨끗하고, 상품 진열이 잘된 SSM으로 사람이 더 몰리는 것처럼. 사람들은 분명 저러한 유통업체의 횡포를 걱정하고 욕을 해대도, 결국엔 좀더 가격싸고 깔끔한 분위기의 SSM으로 발길을 돌리게 된다. 그 덕분에 우리나라 유통망은 그만큼 단순해져서 물건의 가격 결정은 몇 개 기업에 따라 결정될 수 밖에 없다.
인터넷 또한 구글에의 의존성이 커짐에 따라 영세 IT 업체들은 겹치는 사업 영역에서 구글에 패배할 수 밖에 없다. 새 비즈니스 영역을 개척하면 구글이 곧바로 구글 계정에 새 서비스를 추가한다. 

그간 Google의 장점은 개방과 공유였다. 개발자와의 연대를 굉장히 중요시하였다. 자신의 서비스들을 모두 OpenAPI로 개방해 놓았고, code.google.com 같이 여러 방법으로 오픈 소스의 개발과 공유를 지원하였고, 자신들의 TechTalk들도 Youtube를 통해 공개해 왔다. 그에 따라 오픈 소스 진영에서의 구글에 대한 평판은 과거 API도 제대로 공개 안하던 MS에 비하면 굉장히 우호적이다. 하지만, 지금 불현듯 보니 인터넷과 오픈소스 생태계는 분명 커졌지만, 그만큼 더더욱 구글에 의존적이 되어가는 듯 하다. 2000년대 초에 MS가 OS에서의 독점적 지위를 남용한다고 그렇게 욕을 해댔지만, 그때 당시 MS의 사업 영역도 구글보다는 크지 않았던 듯 하다. 지금의 구글은 독점적 지위를 남용하지 않고 있을지는 몰라도 이미 독점 기업이 되어버린 것은 아닌지.

'CS 전공 > 생각?' 카테고리의 다른 글

Steve Jobs의 발표를 보고.  (0) 2010.11.17
학회에는 어떻게 참석하는가?  (0) 2010.10.04
꽉 막힌 한국의 웹 접근성  (0) 2010.01.03
개발 프로젝트의 실패 요인의 분석.  (1) 2009.12.15
논문 심사  (0) 2009.10.05
Posted by Bart