Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

빌리언 데이터 밀어넣기

주기적으로 수 시간안에 빌리언 데이터를 밀어 넣어야 하는 요구가 생겼다. 애초에 이런 대규모의 데이터를 주기적으로 밀어 넣어야 하는 상황이 있을까 하는 물음은 있을 수 있겠는데, 데이터가 커지는 요즘 이런 요구는 드물지 않게 생길 것 같다. 수집한 데이터를 분석 한 다음, 서비스 데이터베이스로 밀어 넣어야 하기 때문이다.

데이터는 {Key,Value} 타입이었고 그래서 NoSQL 솔류션들을 생각해봤지만 아래의 이유로 포기했다.
  • DynamoDB는 AWS에서 관리해 준다. 하지만 쓰기 유닛에 대해서 과금을 한다. 계산해 봤더니, 한달 수천만원이 예상됐다. 이런 (독특한) 목적에는 맞지 않는 데이터베이스다.
  • REDIS도 AWS에서 관리를 해준다. 컴퓨팅 파워에 대해서만 과금을 하기 때문에, dynamodb처럼 요금 폭탄을 맞을 일도 없다. 하지만 낮은 입력을 보완하기 위해서는 10대가 넘는 REDIS 클러스터를 구축해야 한다는 계산이 나왔다. 어차피 AWS에서 관리해주는 거니 그게 문제냐라고 할 수는 있겠다. REDIS를 선택하지 않은 가장 큰 이유는 메모리 디비라는 점 때문이었다.
  • Cassandra, MongoDB, Couchbase 등은 괜찮은 솔류션이다. 하지만 구축,운영,유지 (시간포함)비용이 만만찮을 것 같았다.
결과적으로 Aurora를 선택했다. 최고 사양인 r4.16xlarge의 경우 수치상으로 초당 20만건을 밀어 넣을 수 있었는데, 1시간 30분에 100만건을 밀어 넣는다는 계산이 나왔다. 물론 성능이 좋은 만큼 가격도 상당하다. 서울리전의 경우 한시간 사용료가 11.20달러인데, 한달을 가동할 경우 비용은 8064 달러다. 거의 1000만원에 육박하는 비용이다.

1000만원이면, 꽤 큰비용이라고 생각 할 수도 있겠지만 약간의 트릭으로 비용 문제를 해결 할 수 있었다. 일단 데이터를 밀어 넣고 나면, 서비스에 사용 할 건데 서비스의 예상 요청건수는 최대 초당 10,000 건으로 예상됐다. 이 정도의 요청은 r4.large로도 충분하다. 즉, 밀어 넣는게 끝나면 r4.large(0.35달러)로 스케일다운해서 서비스하면 된다.

이렇게 운용 할 경우 예상 금액은
  • 밀어 넣는데 드는 비용 : 약 672 달러
  • 서비스에 드는 비용 : 약 252 달러
으로 고작 "1,000달러 정도로 빌리언 데이터를 매일 매일 데이터베이스에 올려서 서비스"할 수 있다는 계산이 나왔다.

다른 NoSQL 솔류션으로는 이러한 운용이 불가능(하거나 힘들다)하다. 10대의 노드로 이루어진 클러스터를 이용해서 10억건의 데이터를 밀어넣었다면, 10개의 노드를 계속 유지해야 한다. 10개의 노드의 스펙을 낮춰서 서비스하는 방법도 있겠으나 "쓸데 없는 노가다"를 뛰어야 한다. Aurora는 이러한 모든 일을 특별한 학습이나 노력 없이 (거의)자동으로 수행 할 수 있다. (2017년 12월 31)일 현재 Aurora Serverless Preview서비스를 사용 할 수 있다. 정식서비스화 되면 이런 모든과정이 자동화 할 수 있을 것이다.

S3 데이터 로드

빅데이터를 분석해서 서비스데이터를 만들었다면, 그 데이터는 아마도 S3위에(HDFS를 이용하는 방법도 있겠으나 AWS에서는 S3를 사용하는게 여러모로 낫다) 있을 것이다.

 Aurora 운용

Aurora는 S3에 있는 파일을 바로 import 할 수 있는 기능이 있다. 이 기능을 이용하면 분석&처리된 데이터를 자연스럽게 Aurora로 적재 할 수 있다. bigdata.csv는 아래와 같이 적재 할 수 있다.
LOAD DATA FROM S3 's3://mybucket/bigdata.csv'
  INTO TABLE myservice-table
  FIELDS TERMINATED BY ','
  LINES TERMINATED BY '\n'
  (ID, CITY, ADDRESS, POI, NAME)

데이터 색인

데이터를 적재하고 나면 색인을 해야 하는데, 10억건이 넘어가는 데이터라면 색인에만 한시간에서 두 시간 가량의 시간이 소모될 것이다. 색인은 데이터 import 시점이 아닌, import 가 끝난 후에 하는게 더 빠르다. 색인에는 많은량의 메모리가 소비되므로 가능한 높은 사양의 인스턴스를 사용 할 필요가 있다. 돈 아낀다고 낮은 사양의 인스턴스로 색인 걸었다가는, 몇 시간 돌아가다가 색인 실패하는 사태를 맞이할 수도 있다. xlarge로 4시간걸릴 필요가 있나 그냥 8xlarge 로 1시간에 끝내는게 낫지.