Metatron 엔진으로서 Druid

앞서 설명한 바와 같이 Metatron은 Druid를 기본 엔진으로서 도입하였고, Metatron만의 용도에 맞게 자체적으로 기능을 개발·보강하였습니다. 본 절에서는 이에 관한 구체적인 배경과 과정, 그리고 결과에 대해 소개합니다.

Metatron 개발 배경과 Druid 기술의 도입

빅데이터 분석 솔루션으로서 Metatron의 니즈

SK텔레콤은 국내 최대 가입자를 보유하고 있는 이동통신 서비스 제공업체로서, 수많은 이용자들로부터 발생되는 엄청난 양의 네트워크 데이터 로그를 활용하여 안정적인 네트워크 환경을 구축하는데 많은 노력을 기울이고 있습니다.

기존의 IT 인프라로는 이런 대용량 데이터 처리에 한계가 있기 때문에 SK텔레콤은 대규모 빅데이터 시스템(Apache Hadoop)과 이를 활용하기 위한 빅데이터 분석 솔루션이 필요했습니다. SK텔레콤은 저비용으로 대용량 데이터의 저장하기 위해 대규모 Hadoop 인프라를 자체 구축하였지만 다음과 같은 한계가 있었습니다.

  • 수많은 사용자의 네트워크 데이터를 실시간으로 분석할 수 없었습니다. 빅데이터의 저장/처리는 가능했지만 데이터를 시각화하는 데는 한계가 있어 결국 과거와 같이 일부 필요한 데이터만 샘플링해서 확인해야 했습니다.
  • ETL, DW, BI 등 데이터 분석 단계별로 각기 다른 솔루션, 각기 다른 담당자가 지원하는 기존의 방식은 데이터 분석을 하는 데 시간과 비용이 많이 들며 데이터 접근성을 현저하게 떨어뜨렸습니다. 단순하면서도 신속하게 데이터를 분석할 수 있으려면 분석의 전 단계를 한꺼번에 처리할 수 있는 end-to-end 솔루션이 필요했습니다.

Druid를 엔진으로 채택한 이유

Druid는 다음과 같은 특징들 때문에 위와 같은 니즈를 충족해야 하는 Metatron 솔루션의 엔진으로서 적합했습니다.

  • Druid는 대용량의 데이터를 실시간으로 수집하여 즉시 쿼리 가능한 형태로 인덱싱하며, 분산 처리 기반을 통해 대용량의 데이터 집계를 아주 빠른 시간(최대 수초) 이내에 처리해줍니다.
  • Druid의 시계열 기반 OLAP Cube 데이터 포맷은 분석가가 원하는 대로 탐색, 필터링, 시각화하기 용이합니다. 실무자들이 쿼리 구성을 고민하지 않고 직관적으로 필요한 데이터를 선별하여 알고자 하는 상관 관계를 바로 출력할 수 있게 하려면 이러한 탐색 자유도와 유연성이 필수적입니다.
  • Druid는 확장성이 탁월하여 각종 모듈을 추가하기 용이합니다.

Metatron은 Druid의 이러한 특성을 활용하여 데이터 수집, 저장, 처리, 분석, 시각화 등의 모든 layer를 포괄하는 end-to-end 솔루션을 구축하였습니다.

Druid 응용 방식

Metatron에서 Druid 엔진을 응용하는 방식은 다음과 같습니다.

  • 사용자(현업/빅데이터 분석가) 측면에서 Druid를 기본 처리/분석 엔진으로 사용하기 쉽도록 GUI 화면을 구성하여 데이터 전처리, 분석, 시각화 등 데이터 관련 업무를 수행하고 이를 공유할 수 있게 하였습니다.
  • IT 운영자는 Druid 내 데이터 소스를 관리/모니터링 할 수 있고, 필요시 데이터 전처리 작업을 통해 고품질의 데이터 소스를 제공할 수 있도록 지원합니다.

Metatron에서 보강한 Druid 기능들

Druid는 강력한 데이터 수집·처리 기능을 지원하지만, Metatron이 end-to-end 솔루션으로 온전히 기능하기 위해서는 기존의 오픈소스 Druid를 개선할 필요가 있었습니다. 본 절에서는 기존 오픈소스 Druid의 한계와 Metatron에서 보강한 기능들을 살펴보겠습니다.

오픈소스 Druid의 한계

기존의 오픈소스 Druid의 한계는 다음과 같습니다.

  • Druid는 데이터 테이블 join에 제약이 많습니다. 이런 이유로 Metatron은 데이터 전처리를 위해 다른 SQL 엔진으로 사용합니다.
  • Druid는 SQL 쿼리를 부분적으로만 지원합니다.
  • 데이터 레이크용으로는 기존의 SQL 엔진을 사용하는 편이 더 낫습니다.
  • 이미 인덱싱된 세그먼트를 수정하거나 행을 추가할 수 없습니다. 물론 incremental ingestion과 같은 특수한 상황에는 가능하지만 일반적이지 않습니다.
  • null 값이 지원되지 않습니다.
  • 측정값에 대한 필터링이 지원되지 않습니다.
  • Linear scalability가 보장되지 않습니다. 서버의 수를 늘려도 성능이 크게 개선되지 않습니다.
  • Druid에서 지원하는 자료형은 제한적이며 추가하기가 어렵습니다.
  • 관리 및 모니터링 도구가 성능이 우수하지 않습니다.

Metatron에서 보강한 Druid 기능들

Metatron은 Druid에서 미비한 기능들을 다음과 같이 보강하였습니다.

쿼리 성능 개선

  • groupBy 쿼리 성능 개선
  • 기타 쿼리 성능 소폭 개선

기능 추가

  • 가상 컬럼(map, expression 등)
  • 측정값 자료형 확장(double, string, array 등)
  • 계산식 기능 확장
  • Druid 쿼리 결과를 HDFS 또는 파일로 내보낼 수 있음
  • 데이터 테이블에 대한 메타 정보 및 통계용 쿼리 추가
  • 집계 기능 추가(분산, 상관관계 등)
  • (제한적) 관계형 DB의 window 기능들 구현(lead, lar, running aggregations 등)
  • (제한적) join 기능 강화
  • (제한적) 서브 쿼리 추가
  • 임시 데이터 소스
  • 복합 쿼리 추가(데이터 소스 summarization, 데이터 소스 간 상관관계, k-평균 등)
  • 사용자 정의 컬럼 grouping 지원
  • GIS(지도-GEO서버 연계 adaptor 제공) 기능 지원
  • 컬럼별 histogram 제공
  • Bit-slice indexing 지원

인덱스 구조 개선

  • 측정값 필터링용 히스토그램
  • 텍스트 필터링용 lucene 포맷 지원

다른 시스템들과의 연동 지원

  • Hive 저장소 핸들러
  • Hive 테이블 ingestion(Hive 메타 스토어와 연결)
  • ORC 포맷 ingestion
  • JDBC를 통한 RDBMS 데이터 ingestion
  • (제한적) Backport된 SQL 지원

기타 개선사항

  • 버그 수정(50건 이상), 기능 추가 및 기타 경미한 사항들 개선