벌크 형과 스트리밍 형의 데이터 수집 - 4.1
객체 스토리지
- 빅데이터는 확장성이 높은 분산스토리지에 저장하지만, 기본은 대량으로 파일 저장을 위한 객체스토리지이다. ex)HDFS, Amazon S3
- 다수의 컴퓨터를 사용하여 파일을 여러 디스크에 복사 → 데이터의 중복화 부하분산 실현
- 네트워크를 통해 읽기 때문에 작은 파일을 자주 읽고 쓰는건, 통신 오버헤드가 크다.
데이터의 수집
- 시계열 데이터는 적당히 모아서 하나의 큰 파일로 만든다.
- 너무 큰 파일을 나눠서 처리한다.
- 단순 수집이 아닌 처리하기 쉽도록 위의 규칙을 지킨다.
- 수집 - 가공 - 구조화 - 분산스토리지의 장기적인 저장이 데이터 수집이다.
벌크 형 데이터 전송
- 생성
- 파일 서버, 웹 서비스에서 다양한 방식(SQL, API)으로 정리해 데이터를 추출하는 경우
- 기존 DB에서 추출도 벌크 형 전송이다.
- 데이터가 분산 스토리지에 있는 경우를 제외하고, 데이터 전송을 위한 ETL서버를 설치한다.
- ETL서버에서 구조화된 데이터 처리에 적합한 DW를 위한 ETL 도구 & 벌크 전송 도구 & 작성한 스크립트를 이용하여 데이터를 전송한다.
- 저장, 전송 팁
- 한번에 많은 량의 데이터를 보내지말고, 너무 크다면 나눠서 보내라 → 워크플로 관리 도구
- 스트리밍 처럼 계속 동작하지 않기에 워크플로 관리 도구와 궁합이 좋다. → 신뢰성이 좋아짐
- 실패한 작업, 데이터 결손 등의 문제해결에 좋다.
스트리밍 데이터 전송
- 생성
- 다수의 클라이언트에서 계속해서 작은 데이터가 전송 된다 → 메시지 배송
- 통신 오버헤드가 커서 서버성능이 좋아야한다.
- 저장, 전송 팁
- 작은 데이터 쓰기에 적합한 NoSQL → Hive(쿼리엔진) → 데이터 읽기 조합
- 메세지 큐와 브로커를 사용해서 중계 시스템을 거쳐서 분산 스토리지에서 저장하기
- 웹 브라우저에서의 메시지 배송
- 데이터 전송 효율을 위해 서버상에서 축적해놓고 보내기 → Fluentd, Logstash(서버 상주형 로그 수집)
- 웹 브라우저에서 직접 메시지 보내기(다른 서버 전송되거나, API경유) → 웹 이벤트 트랙킹
- 모바일 앱으로부터의 메시지 배송
- HTTP 프로토콜을 사용하므로 웹 브라우저와 동일, 서버를 직접 마련하지 않고 MBaaS라는 백엔드 서비스 이용하여 DB에 저장하고 후에 저장된 것을 벌크 형 도구로 꺼낸다.
- SDK의 내부에 축적하다가 온라인 상태 때 보내는 경우도 있다.
- 디바이스로부터의 전송
- MQTT라는 TCP/IP를 사용하는 프로토콜
메세지를 가장 처음 받는 서버를 프론트라고하고, 프론트에서 받은 것을 메세지 브로커로 전송하고나서 어려운 문제를 처리한다.
메세지 배송의 트레이드 오프 - 4.2
메시지 브로커
- 메세지 배송으로 보내진 데이터를 분산 스토리지에서 빈번하게 쓰면서 디스크가 한계가 될 경우에 도움을 준다.
- 분산스토리지 성능을 올리지 않고, 배송되는 데이터를 일시적으로 축적하는 시스템이다. ex 카프카 키네시스
- 푸쉬,풀 형
- 푸쉬로 메세지 브로커에 보내고, 풀로 일정한 크기를 파일로 만들어 분산스토리지로 푸쉬한다.
- 메시지 라우팅
- 메시지 브로커에서 받고 여러 소비자가 Pull 하는 구조이다. 자주가져가면 스트림처리가 된다.
메시지 배송의 신뢰성 문제
- 신뢰성이 낮은 네트워크에서는 중복, 결손이 발생 한다.
- 대부분 하나를 보장하며 시스템 설계
- at most once : 메시지는 무조건 한번 전송 → 결손
- exactly once : 메시지는 손실되거나 중복 없이 한번 전송
- at least once : 메시지는 확실히 전송 되나 여러번 전송 될 수 있다. → 중복
중복 제거의 비용
- TCP에서는 메시지에 시퀀스가 있지만, 분산 시스템에서는 사용되지 않는다.
- 제거 방법들
- 오프셋
- 고유ID에 의해 제거
- 종단간의 신뢰성→모든 과정을 at least once로 통일하고, 경로의 말단에서 중복제거 한다.
데이터 수집의 파이프라인
위의 과정이 완료되고 데이터를 구조화해 열 지향 스토리지로 변환하면, 데이터 분석에 적합한 스토리지가 완성된다.
- 쓰기 성능이 상관없다면 메세지 브로커 필요없이 NoSQL에 그대로 쓴다
- 중복이 상관없다면, 중복 제거도 생략한다.
- 데이터 집계에 쿼리엔진 사용할 경우 구조화된 데이터를 열 지향 스토리지 형식으로 객체 스토리지에 저장
- or MPP DB 사용하는 경우 여기에 저장
시계열 데이터의 최적화 - 4.3
프로세스 시간과 이벤트 발생 시간은 다른 문제의 해결
- 시계열 인덱스
- 카산드라 같은 분산 데이터베이스를 이용. 짧은 범위에 유용하다
- 장기적으로 대량 데이터 집계시, 분산DB가 아니라 열 지향 스토리지를 지속적으로 만들어야한다.
- 조건절 푸쉬다운
- 일정 기간을 모아 정렬해서 열지향 스토리지로 변환한다. → 풀스캔을 피할 수 있다.
- 너무 빈번한 주기로 만들지는 말자.
- 이벤트 시간으로 분할
- 데이터 수집은 프로세스 시간을 사용하고, 데이터마트를 이벤트 시간에 의해 정렬하며 정기적으로 치환한다.
비 구조화 데이터의 분산 스토리지 - 4.4
분산스토리지
- 확장성과 유연성이 요구
- 기본은 객체스토리지로 임의의 파일을 저장 할 수 있다.
- 쓰기 빈도가 높다면, RDB에 저장해 스냅샷 or 다른 분산데이터베이스에 저장한다.
- 중요한 데이터 처리
- 기본적으로 트랜젝션 처리가 가능한 DB사용
- 대부분 일반적인 RDB라도 충분하다
- RDB가 모자라면 분산데이터베이스를 검토한다.
- 객체스토리지 단점
- 파일 교체하기 힘들다.(로그파일은 괜찮다)
- 저장된 데이터 집계까지 열지향 스토리지의 구축 등 시간이 걸린다.
- 이러한 단점을 극복하고 특정 용도에 최적화된 데이터베이스를 NoSQL데이터베이스라고 한다.
NoSQL 특징
- 일반적으로 애플리케이션에서 처음에 데이터를 기록하는 장소로 이용
- 자체 대량 데이터 집계 기능이 대부분 없어, 분석을 위해 외부로 데이터 추출
- RDB등과 비교해 읽기 성능이 높아 쿼리 엔진에서 접속해도 성능상 문제 발생 확률 낮다. → 애드 혹 분석에도 사용
- 트랜잭션 처리의 ACID 성질을 다 지키면서 분산 시스템 구축하기가 힘들다
- 일관성, 가용성, 분단내성의 세 가지중 하나가 희생된다
NoSQL 종류
- 분산 KVS - Amazon DynamoDB
- 와이드 칼럼 스토어 - 카산드라
- 도큐먼트 스토어 - MongoDB
- 검색엔진 - Elasticsearch, Splunk
'Data Engineering > Data Platform' 카테고리의 다른 글
빅데이터를 지탱하는 기술 - Chapter6 빅데이터 분석 기반의 구축 (0) | 2021.12.20 |
---|---|
빅데이터를 지탱하는 기술 - Chapter5 빅데이터의 파이프라인 (0) | 2021.12.16 |
빅데이터를 지탱하는 기술 - Chapter3 빅 데이터의 분산 처리 (0) | 2021.12.16 |
빅데이터를 지탱하는 기술 - Chapter2 빅데이터의 탐색 (0) | 2021.12.16 |
빅데이터를 지탱하는 기술 - Chapter1 빅데이터의 기초 지식 (0) | 2021.12.15 |