1. 복합시스템 설계

* Application Side Join

: 기존 시스템은 모든 종류의 데이터를 모두 RDBMS에 저장하고 처리하였다.

: 그로인해 우선순위가 낮은 빅데이터 때문에 데이터의 처리가 지연되는 문제가 발생함

: NoSQL을 도입하여 우선순위가 낮고 대량의 트랜젝션을 발생시키는 데이터들을 NoSQL에서 처리

: RDBMS는 중요한 데이터 처리에만 집중할 수 있기 때문에 쾌적한 환경에서 최상의 결과를 만들어냄.

: 데이터의 성격에 따라 RDBMS와 NoSQL로 분산하여 처리하여 전체 시스템의 퍼포먼스가 향상되는 장점을 가짐

: 여러 DB에 나뉘어 있는 데이터를 프로그램상으로 불러와서 JOIN한다.

: 이를 Application Side Join 이라고 한다.

* Data Export / Import

: RDBMS/NoSQL에 저장된 데이터를 Hadoop 에서 처리를 하려면 HDFS 상에 파일 형태로 변환해주어야함.

: 이때 다양한 DBMS/NoSQL의 데이터를 HDFS로 Import/Export 해주는 'Sqoop'과 같은 Hadoop Echosystem을 사용해야함.

: 정형화된 데이터 처리

: Sqoop, hiho

: 비정형화된 데이터 처리

: Flume, Scribe

* Batch Processing

: 빅데이터 분석 시, 자동화된 병렬처리/분산처리를 지원하는 MapReduce를 많이 사용하며 대표적인 솔루션이 'Hadoop'임

: Hadoop은 배치형 데이터 처리 시스템이며 Map단계와 Reduce단계를 순차적으로 실행하여 결과를 만듦

2. 빅데이터 수집/가공/서비스 과정

* 데이터 수집

: 다양한 서비스에서 제공되는 RESTful API를 사용하여 데이터 수집(JSON, XML)

: 스크래핑(크롤링)을 사용하여 데이터 수집(HTML)

: 데이터 수집 자동화를 위해 전용 로봇을 만들어서 주기적으로 실행

: 수집되는 데이터의 양이 많고, 수집 속도가 빠르기 때문에 수집되는 데이터는 NoSQL에 저장할 것을 권장

* 데이터 분석

: 1차적으로 수집된 데이터는 Hadoop을 이용하여 데이터 가공하는 작업을 진행하기 위해 HDFS상에 Import시킴

: 분석 작업을 위해 프로그래밍 된 Hadoop 프로그램을 주기적으로 실행시켜서 최신 분석 결과를 생성함.

: 생성된 분석 결과는 사용자에게 서비스할 때 사용되는 데이터베이스에서 사용될 수 있는 형태의 데이터로 Export 시킴

: 데이터를 수집하고, 수집된 데이터를 분석하는 데에는 일정한 시간이 소요되기 때문에, 실시간 처리는 물리적으로 불가능함

: 다만, 데이터 분석 주기를 최대한 짧게 함으로써 실시간에 가까운 최신 데이터를 사용할 수 있도록 만들어주는 것이 현실적임.

: 파싱은 NoSQL 로 하고 사용자에게 제공할 DB는 RDBMS로 한다.

* 결과 데이터 서비스

: 결과 데이터를 RDBMS에 저장해준다.

: RDBMS가 직접 연산을 하지 않고 저장하고 필요시 제공만하기 때문에 오버헤드가 적다.

: Hadoop이 주기적으로 실행되면서 최신데이터를 계속 갱신해주기 때문에 저장된 데이터를 제공하는 것만 신경쓰면 됨.

3. 다중 플랫폼 지원 채팅 서비스 구축 사례

* Redis (Remote Dictionary Server)

: 메모리 기반의 key-Value 타입 저장소

: NoSQL중 하나

: 데이터 구조 서버라고 불림

: 데이터 로딩할 때 시간 절약을 위한 메모리 캐시와 같은 용도로 많이 사용됨.

: 단순히 메모리에 Read/Write 하기만 하는 것이 아니라 정기적으로 메모리를 디스크에 저장하기 때문에 자동 복원도 가능.

: 일종의 Push 기능인 Publish/Subscribe 명령 제공

: 데이터베이스이기 때문에 대부분의 플랫폼에서 지원이 용이함.

* Socket.io

: node.js에 기반한 라이브러리

: 실시간 어플리케이션 구현을 위한 크로스 브라우저용 웹 소켓

: 대부분의 브라우저를 모두 지원

: WebSocket, 등 리얼타임 기술들을 모두 지원

: SocketIO는 클라이언트를 위한 JavaScript용 과 서버를 위한 nodeJS용을 따로 배포

: npm을 이용한 간단한 설치

* 데이터 베이스

: 사용자 계정 정보를 비롯한 중요 정보는 MySQL에 저장

: RDBMS는 오랜기간 사용되어왔기 떄문에 운영 노하우가 풍부하고, 데이터 일관성 유지와 보안등에 유리함.

: 채팅 서비스를 운영하면서 발생하는 모든 종류의 로그성 데이터는 MongoDB에 저장

: MongoDB는 로그 데이터와 같이 대량으로 빠르게 저장해야하는 데이터에 적합하고, 데이터베이스의 확장이 용이하기 때문에 용량에 상관없이 저장이 가능함.



+ Recent posts