와탭은 점점 다양하고 복잡한 아키텍처로 변화하고 있는 비즈니스 시스템의 성능 모니터링 솔루션입니다. 다양한 아키텍처로부터 발생하는 수많은 모니터링 지표를 실시간으로 수집, 저장할 뿐 아니라 사용자에게 실시간으로 인사이트를 제공할 수 있어야 합니다. 많은 모니터링 솔루션이 실시간 수집되는 지표의 저장소로 상용 RDBMS를 사용하고 있는데, 속도와 확장성 면에서 한계가 나타나고 있습니다. 와탭은 모니터링 데이터의 성격에 맞는 시계열 데이터베이스를 자체적으로 개발하여 사용하고 있으며, 글로벌 서비스에서 발생하는 데이터까지 수용할 확장성과 성능을 갖추고 있습니다. 와탭만의 시계열 데이터베이스 MxDB를 소개합니다.
와탭의 데이터는 시계열 데이터입니다. 시계열 데이터는 일정 시간 간격으로 수집되거나 기록된 일련의 데이터입니다. 이러한 유형의 데이터는 금융, IoT(사물 인터넷), 다양한 영역에서 데이터 분석, 모니터링 및 시각화를 위해 널리 사용되고 있습니다. 따라서 MxDB는 시계열 데이터베이스(TSDB, Time Series Database)의 다음과 같은 특징을 갖추고 있습니다.
빠른 데이터 검색을 위해 사용하는 일반적인 트리 기반의 인덱스로는 각종 장비에서 쏟아지는 시계열 데이터를 분석하는 성능을 제공하기 어렵습니다. MxDB는 기본적으로 시간을 기준으로 데이터를 저장합니다. 또한, 여러 종류의 저장 구조로 되어 있어 정기적으로 발생하는 수치 데이터, 임의로 발생하는 텍스트 데이터들도 모두 저장할 수 있습니다. 시간 데이터에는 자동으로 인덱스가 생성되고, 데이터 저장 시 분산 저장이 가능하여 데이터 요청 시 시간 인덱스 사용과 병렬 처리로 빠른 성능을 제공합니다.
데이터베이스를 쓰는 가장 큰 이유는 데이터에 대한 다양한 형태의 요청을 처리할 SQL 언어를 제공해 주기 때문일 것입니다. MxDB는 MXQL이라는 자체 질의 언어를 통해 사용자가 유연하게 데이터를 가공해서 볼 수 있도록 합니다. MXQL은 SQL과 유사한 문법으로 되어 있어 기존의 데이터베이스 사용자가 큰 어려움 없이 사용하여 자신만의 대시보드를 만들고 알림 기준을 만들어 낼 수 있습니다.
롤업 기능은 시시각각 입력되는 데이터를 분, 시 단위의 별도로 보관되는 통계 데이터를 자동으로 생성하는 기능입니다. MxDB의 태그 카운트 팩은 1분, 5분, 1시간 통계 데이터를 자동으로 생성하고 장기간 차트 조회 시 자동으로 롤업된 통계 데이터를 선택하여 조회하기 때문에 장시간의 데이터도 즉시 확인할 수 있습니다. 또한 조회하는 시간 범위를 좁히면 자동으로 상세 원본 데이터에 접근하여 드릴 다운(Drill Down) 방식의 데이터 분석을 할 수 있습니다.
대부분의 시계열 데이터베이스와 마찬가지로 MxDB도 트랜잭션과 데이터 갱신 연산은 지원하지 않습니다. 이는 전략적으로 코드의 복잡성을 줄여 처리 성능을 높이고 데이터의 변조 가능성을 방지하기 위한 이유도 있습니다.
MxDB는 프로젝트, 일자, 시간별로 데이터를 분류하여 저장하기 때문에 다음과 같은 장점이 있습니다.
MxDB는 다수의 서버로 분산 구성했더라도 수집된 데이터를 하나의 서버로 전송합니다. 이 서버를 프록시(Proxy) 서버라고 합니다. 사용자 또는 장비에서 단일 프록시 서버로 데이터를 전송하면 프록시 서버의 설정에 따라 뒷단의 데이터 서버에 데이터가 분산 전송됩니다. 전송뿐 아니라 데이터 서버를 관리하기 위한 명령을 프록시 서버에서 수행할 수 있어 이러한 구조는 실시간 서비스에 영향 없이 데이터를 이중화 저장하거나 백업 또는 복구 명령을 수행할 수 있습니다.
하나의 데이터 서버(야드)를 여러 데이터 서버로 다시 분산(샤딩)할 수 있습니다. 데이터 분산은 round robin 방식으로 저장합니다. 데이터 서버를 분산하면 분산된 서버 간 병렬 처리가 가능하여 검색 속도가 더 향상됩니다.
MxDB에도 관계형 데이터베이스의 스키마, 테이블, 컬럼과 같은 데이터 저장 구조가 있습니다. 수집하는 지표의 유형에 맞는 저장 구조가 다양하게 설계되어 빠른 성능을 제공합니다.
MxDB에 저장된 데이터를 조회 및 가공하여 볼 수 있는 언어로 와탭에서 개발했습니다. SQL과 유사한 문법을 사용하고 위에서 아래로 시리얼하게 처리되는 구조로 학습이 쉽습니다. MXQL 명령은 LOAD 이전과 이후로 구분해 작성합니다. LOAD 이전 명령은 LOAD 조건으로 지정하고, LOAD 이후에는 데이터를 가공하는 명령을 수행합니다.
MxDB는 와탭의 모니터링 데이터를 저장하기 위해 2016년부터 개발되었고 지금도 계속 기능을 추가하고 있습니다. 초기에는 수치 데이터 위주의 저장 및 처리 기능을 제공했지만, 현재는 수많은 애플리케이션에서 발생하는 데이터 전송 로그 처리 뿐만 아니라 수만 대의 서버에서 발생하는 데이터와 로그를 수집할 수 있습니다. 앞으로도 빠른 처리 구조와 아키텍처의 유연성, 고객의 요구 사항을 수용하여 스마트 기기가 넘치는 시대의 상용 시계열 데이터베이스와 경쟁을 기대해 봅니다.