분류

2020년 3월 29일 일요일

빅알자 6.시계열 DB를 알아봅시다.

1. 개요 

시계열DB는 영문으로 "Time Series DataBase" 시간을 기반으로 삼은 빅데이터 처리 시스템을 이야기 합니다. 과거 빅데이터를 처리할 만큼의 하드웨어 인프라가 잘 갖춰지지 않았던 시절 센서 데이터를 실시간으로 처리하기 위한 기반으로 만들어졌다고 봄이 옳습니다. 실제로 시계열 DB가 강조하는 대부분의 기능은 실시간으로 데이터를 저장하고, 시각화 한다는 것을 무척 강조하고 있습니다.


2. 시계열 DB 시장점유율

일단 데이터베이스 마켓 순위를 보면 시계열 DB는 전체 순위에 들지 못합니다.

https://db-engines.com/의 자료 인용
https://db-engines.com/ 사이트에서 조사한 전체 시스템에서 RDB가 압도적인 우위를 차지하고 있으며 시계열 DB는 RDB(Relational DBMS)의 1/5 정도밖에 되지 않습니다. 그렇다고 해서 시계열DB가 나쁘거나 한건 아닙니다.

https://db-engines.com/의 자료 인용
지난 2년간의 추세를 보면 압도적인 증가 추세를 보이고 있습니다.

왜 이런 현상이 일어나는지는 지난번에 소개해드린 글을 보면 알 수 있습니다.
5.빅데이터 처리 성능. 네트워크 전략

간단히 얘기하면, 물리적으로 엄청난 양의 데이터가 지속적으로 생겨나기 때문에 구세대의 저장장치에 저장했다가 데이터 분석을 위해 꺼내는 데만 해도 수주가 걸릴 만큼 거대하기 때문이죠. 현재 대부분의 데이터베이스 처리 시스템 인프라는 기껏 해야 10Gb/s 속도의 스위치 그리고 hdd 베이스의 저장 장치를 사용하고 있습니다.

서버용 scsi 드라이브라 하더라도 개별 저장소의 I/O 최대 속도는 250MB/s에 불과하고 분산 처리된 파일을 네트워크로 공유하더라도 초당 1.5GB/s에 불과한데 쌓여있는 데이터는 PetaByte이기 때문입니다. 네트워크 속도 최대로 데이터를 추출 하더라도 1PetaByte를 추출하는데 걸리는 시간은 약 9일입니다. 물론 단순계산입니다. 대부분의 데이터 처리 시스템은 데이터 입출력이 항상 일어나고 있기 때문에 I/O부하를 생각한다면 예상 시간은 약 5~9배가 됩니다.

이런 지연 때문에 데이터를 인출하는 것 자체가 어려워지자 이러한 데이터를 분석하기 위해서 시계열 DB는 가장 데이터에 접근하기 좋은 방법을 채택했습니다. 바로 시간을 기준으로 데이터를 분산 처리하고 해당 파티션만 메모리에 올려 분석을 쉽게 만든 것이죠.

3. 시계열 DB의 데이터 저장 구조  

뭐 대부분 유사한 형태를 취하기에 알아본 중 가장 간결하게 구조를 보여주는 DB 설명서는 "Apache druid" 였습니다.
드루이드 에서는 시간의 분할 단위를 chunk '청크'라고 표현 합니다. chunk는 같은 시간 범위 내에 존재하는 데이터이고, 이 시간 범위 내에서 데이터는 RDBMS의 파티션과 같은 구조로 다시 분할됩니다. (청크를 폴더, Segment를 파일로 생각하면 이해가 쉽습니다.)
https://druid.apache.org/인용 드루이드의 SEGMENT 분할 
뭐 이런 구조로 데이터를 분할하는 것은 드루이드만의 기술은 아닐 겁니다. 분명 다른 시계열 DB도 같은 형태를 취하겠죠. 이러한 형태로 데이터를 분할해 저장하면 생기는 이점은 쿼리를 수행할 때 쿼리에 시간을 제약조건으로 사용하여 메모리에 로드할 파일의 양 자체를 줄일 수 있기 때문입니다.

RDB의 파티셔닝과 유사하지만, 다른 점은 RDB에선 파티셔닝을 255개 혹은 1024개, 서브파티션을 포함해서 만여 개를 만들 수 있지만, 관리자가 사전에 생성을 해줘야 하는 점이 다릅니다. RDB에서도 최근에는 빅데이터 처리를 위해 자동 파티셔닝을 지원하는 DB가 있습니다. 그 이야기는 다음에 하겠습니다.

과거에는 빅데이터 처리에 SPARK같은 IN MEMORY 프로세스를 중심으로 처리하는 프로세스를 많이 생각했었습니다. 하지만 엄청난 데이터 량을 메모리에 올리기 위한 처리에서 발생하는 I/O 문제 그리고 MEMORY 용량의 한계 때문에 최근 In memory는 유효하지 못한 전략이 되어가고 있죠. petabyte를 메모리를 적재할 수 있는 시스템이 없기 때문 입니다.

데이터 인출 개념 
시계열 분할 데이터는 개념적으로 보면 위 그림과 같은 처리가 가능합니다.

데이터를 인출할 때 데이터 노드에 간단한 필터 처리를 거쳐 쿼리에 만족하는 데이터만 네임드 노드로 전송한다. 이럴 경우 10Gb/s의 네트워크로도 충분히 차 한 잔 마실 시간에 petabyte급 데이터를 필요 기간 만큼 조회할 수 있을 것 입니다.

드루이드의 파티션 분할 단위는 500MB인데 이를 disk에서 로드 할 경우 3초가 걸립니다. 왜 이렇게 분산파일을 크게 가져가는지 생각해보면 이렇습니다. 파일이 너무 작은 단위로 분산 될 경우 하나의 disk에 같은 시간 파티션이 여러 건 들어있을 수 있으므로, 이럴 경우 동시에 여러 파티션을 불러오면 DISK ARM 점유에 의한 지연이 발생하기도 합니다.
DISK 구조 
DISK ARM 지연이란 위 그림과 같이 생겨먹은 DISK 구조 때문에 발생합니다. DISK는 원판 형태로 되어있고, 회전하는 원판의 특정 영역을 ARM이라는 녀석이 읽어오는데 한 DISK에서 여러 SEGMENT를 동시에 읽어버릴 경우 ARM이 동시에 3파일을 읽으려 ARM을 바쁘게 움직이기만 하고 실제로는 순차적으로 읽는 것 보다 지연되는 현상이 발생하게 되는 것이죠. 따라서 DISK I/O가 가지는 읽기 속도가 160MB/s라고 해도 50MB 파일 3개의 파일을 동시에 읽어오면 1초에 끝나지 않고 지연이 발생해서 1.5초 혹은 3초가 되기도 합니다.

드루이드에서 파티셔닝 크기가 500MB인 이유는 이런 저런 계산 끝에 최적 값을 찾은 것 이라고 한번 믿어보겠습니다. 혹은 SSD를 기준으로 읽기 쓰기 속도를 맞춘 것 일 수 있습니다.

오늘은 여기까지 써야겠습니다. 다음에 또 뵙죠. 읽어주셔서 감사합니다.

빅데이터 개념잡기 '빅알자'는 여러 페이지로 이루어질 것 입니다.

2020년 3월 8일 일요일

빅알자 5.빅데이터 처리 성능. 네트워크 전략

개요 

빅데이터 처리에 스토리지와 네트워크 전략이 필요한 이유는 어디까지나 빅데이터를 쌓아두던 기존 관점이 아닌 활용하기 위해 다양한 분석이 필요해지는 시점에서 하드웨어 성능이 따라주지 못하는 현상을 가장 많이 보고 있기 때문입니다.

빅데이터의 초기 수집에는 일반 PC급의 성능으로 충분히 모든 일을 진행할 수 있습니다. 예를 들어 초당 1회씩 시그널을 보내는 장비가 10만개 있다 하더라도 하둡 클러스터 5개정도면 저장하는데 지장도 없고, 카프카 멀티큐도 1개면됩니다.

하지만 Petabyte 급의 성능은 다릅니다. 일반적인 시스템 구성에서 하둡 클러스터를 아무리 늘린다 한들 성능이 나오지 않습니다.

http://sortbenchmark.org/
위 사이트를 확인해보면 빅데이터의 정렬 성능을 밴치마크 해놓은 자료를 볼 수 있습니다.

그중 눈에 띄는 것은

Tencent Sort
Apache Spark
Hadoop
이 세 가지인데요 각각의 하드웨어 성능에 대해 이야기 해보겠습니다.

1. 정렬 성능 이란 ? 

정렬 성능은 특정 기간의 데이터 혹은 전체 기간의 데이터를 기준으로 데이터의 순위를 매기는 프로세스 입니다. 즉 전체 데이터를 메모리에 올려 순서를 매긴 후 결과를 제공하는 일입니다.

따라서 적절한 정렬 메모리가 확보되지 못한다면 기존 시스템에서 성능 문제가 발생하곤 했습니다. 그런데 빅데이터? 에서의 적절한 성능은 어느 정도 일까요?

Petabyte는 현존하는 어느 컴퓨팅 시스템에서도 한 번에 메모리에 올릴 수 없을 만큼 거대한 양 입니다. 이것이 분할되어 있다 하더라도 문제는 여전히 나아지지 않습니다.

일반적인 PC의 메모리는 많아봐야 32GB 일 것이고, 클러스터를 10대 한다고 해도 320GB, 클러스터를 100대 한다면 32TB, Petabyte에는 도저히 미치지 못합니다. 따라서 연산할 수 없는 데이터는 디스크에 메모리를 내렸다가 다시 올리는 SWAP 이라는 행위를 반복하면서 정렬을 할 수 밖에 없습니다. 디스크 입출력이 반복되면서 IO 부하가 발생하고, 이 때문에 다른 프로세스를 처리하지 못하는 상황이 발생합니다.

그래서 스토리지 전략과 네트워크 전략이 필요합니다.

2. 필요한 장비의 속도

Petabyte를 1초 만에 처리하는 시스템은 현재 어디에도 없습니다. 있다면 자랑하려고 sortbenchmark.org에 등록했을 것 입니다. 검증된 결과를 기준으로 시스템의 도입 여부를 결정하기 때문에 팔기 위해서라도 등록을 하게 됩니다.

탐구해볼 시스템의 성능은 아래와 같습니다.

Tencent Sort(2016) 성능 비고
성능 44.8TB/min
cpu 2 OpenPOWER 10-core POWER8 2.926 GH
memory  512 GB
disk 1.2TB NVMe SSD 1 TB: 3,500/1,000 MB/s
8 TB: 3,500/2,600 MB/s
network 100Gb Mellanox ConnectX4-EN 12 GB/s
병렬 nodes 512
Apache Spark(2014) 성능 비고
성능 4.7TB/min
cpu 2.5Ghz Intel Xeon E5-2670 v2
memory  244GB 
disk 8x800 GB SSD 1,750/1,750 MB/s
network 25 Gbps (3GB/s) 3GB/s
병렬 nodes 207 
Hadoop(2013) 성능 비고
성능 1.42TB/min
cpu 2 2.3Ghz hexcore Xeon E5-2630
memory  64GB 
disk 12x3TB disks 120  MB/s
network 10 Gb/s 1.2GB/s
병렬 nodes 2100

성능에 대한 해석을 해보자면 비고를 보시면 간단합니다. Disk와 network 속도에 의해 좌우되는 것이 명확하게 보입니다.

맨 밑에 하둡이 야후 시스템입니다. 딱 봐도 노드만 늘리면 되겠지 하고 만든 것 같습니다. 2013년 이니 그럴 만 합니다.

네트워크 성능을 보면 1.2GB/s와 3GB/s의 성능 차는 정확하게 3배가 납니다. 즉 병렬 노드의 네트워크 성능이 데이터 크기를 따라가지 못하고 있다고 생각하시면 됩니다.

그리고 1등인 tencent 의 경우 네트워크는 물론 디스크까지 성능을 잘 끌어주고 있습니다. 2016년도 당시 최고 시스템이라고 봐도 과언이 아닙니다. Mellanox 스위치의 경우 현재 200Gb/s를 지원해주는 것으로 알고 있습니다. 약 3200 만원입니다.

spark는 아마존 EC2를 사용한 환경입니다. 아마존의 스펙 중 네트워크 부분은 클라우드이기 때문에 처리속도를 저 정도로 해둔 것 같습니다.

1위인 tencent 시스템과 spark의 성능 차를 보면 좀 더 명확히 보입니다. 디스크의 읽기 쓰기 속도가 받쳐준 이후는 네트워크 속도가 성능을 좌우하게 됩니다.

즉. 기술이 어쩌고, 인 메모리 프로세스가 어쩌고 이야기하기 전에 하드웨어의 성능이 제대로 갖춰지지 않으면 Petabyte처리는 무슨 기술을 써도 느려터지게 쓴다는 말입니다. 2013년 하둡 클러스터 환경을 가지고 Petabyte를 처리하는 것은 드루이드 할애비가 와도 안 될 일입니다.

3. 왜 이런 현상이 나타나느냐? 

뭐 지난번에도 언급했지만 연산이라는 것은 메모리에 올리고 전송하고 저장하는 일의 반복이기 때문입니다.
클러스터 노드가 있는 환경의 처리 순서는 대략 이렇습니다.

1. 마스터가 슬레이브에 데이터 요청
2. 슬레이브가 데이터 파일을 로드, 전송
3. 마스터가 메모리에 데이터를 로드, 초과 데이터는 디스크에 메모리 형태로 저장
4. 현재 메모리를 정렬하고 결과를 디스크 저장
5. 디스크에서 정렬되지 않은 메모리 데이터 로드

4번 5번을 디스크 스왑이라고 하며 이 부분 때문에 디스크의 속도가 빠른 것이 중요합니다. 솔직히 메모리 속도까지 올라와줬으면 좋겠지만.. PCI-E5가 나와야 한다고 합니다.

그리고 네트워크 성능은 디스크가 500MB/s이상을 내며 단일 노드 라면 10Gb/s로 충분하지만 다중 노드라면 100Gb/s 이상의 속도는 나와야 합니다.

스위치는 개별 노드에 100Gb/s 속도를 내는 것 같이 이야기를 결론적으로 마스터가 받아드릴 수 있는 데이터 량은 스위치 최대 속도 단일라인과 다른 게 없습니다. 따라서 마스터 장비의 네트워크는 다중화 되어야 하며 이런 전체적인 조화를 만들어내야 Petabyte 데이터의 분석은 비로소 가능해집니다.

이상 네트워크 전략은 이 정도로 마치겠습니다. 
읽어주셔서 감사합니다. 

빅데이터 개념잡기 '빅알자'는 여러 페이지로 이루어질 것 입니다.