DataBase

[MongoDB] 카카오와 MongoDB 내용 정리

nineDeveloper 2021. 1. 3.
728x90

MongoDB


tv.kakao.com/v/414072595

MongoDB 특징

  • 신뢰성(Reliability): 서버 장애에도 서비스는 계속 동작
    • Primary 와 Secondry로 구성된 ReplicaSet 구조로 고가용성을 지원
  • 확장성(Scalability): 데이터와 트래픽 증가에 따라 수평확장(scale-out) 가능
    • 데이터를 샤딩하여 수평확장(scale-out) 할 수 있음
  • 유연성(Flexibility): 여러가지 형태의 데이터를 손쉽게 저장
    • 서비스 요구사항에 맞춰 다양한 종류의 데이터가 추가되어도 스키마 변경 과정 없이 필요한 데이터를 바로 저장하고 읽을 수 있음
  • Index 지원(Index Support): 다양한 조건으로 빠른 데이터 검색
    • 다양한 인덱스 지원 다양한 용도로 사용이 가능

신뢰성 (Reliability)

Replica Set 구조를 기반으로 데이터 복제와 고가용성을 실현하여

장애로부터 안전함

확장성 (Scalability)

확장성이 뛰어남

몽고DB에 데이터가 증가하여 더이상 하나의 Replica Set에 담을 수 없게 되면

몽고DB는 데이터를 샤딩하여 분산시켜 줄 수 있음

이러한 샤딩과정은 서비스 중단없이 온라인으로 진행됨

만약 특정 샤드에 데이터가 몰리면 다른 샤드로 데이터를 이동 시켜

전반적으로 모든 샤드가 균등하게 데이터를 저장할 수 있도록 해준다

이러한 동작을 밸런싱이라고 함

몽고DB는 온라인상에서 데이터를 밸런싱 해줄 수 있기 때문에

단일 Replica Set 에서 샤드로의 온라인 전환이 가능하며

샤드의 확장 축소도 모두 온라인으로 진행 가능

샤드 클러스터는 3개의 컴포넌트로 구성됨

샤드 클러스터에 저장되는 실제 데이터는 각 샤드 1,2,3에 나누어 저장되게 됨

어떤 데이터가 어느 샤드에 들어있는지에 대한 메타정보는 config에 저장됨

Application 서버는 mongos 서버를 통해 샤드 클러스터의 데이터에 엑세스하게 됨

mongos 서버는 config 서버와 통신하여 요청받은 데이터가 어느 샤드에 들어있는지 파악한뒤

해당 샤드에서 데이터를 찾아서 Application 서버로 제공하게 됨

샤드 클러스터 바깥쪽에 Application 서버는 샤드 클러스터 내의 동작 과정을 알 필요 없이

mongos 를 통해서만 데이터에 엑세스하게 됨

이는 샤드의 확장 축소등 샤드 클러스터의 변경 사항과 무관하게

Application 의 접근이 심플하게 만들어 줌

몽고DB는 Schema 가 없으므로 데이터 변경에 유연하게 대처할 수 있음

몽고DB는 JSON 기반에 Document 모델을 사용

Document 는 다양한 형태의 데이터를 한번에 담을 수 있으므로 여러가지 정보를 한눈에 볼 수 있게 표현해준다

또한 Application에서 다루는 오브젝트와 1:1로 매칭되기때문에 개발자는 데이터를 쉽게 이해하고 빠르게 개발할 수 있다

Index Support

  • 대부분 NoSQL들과 다른 큰 차이점

  • 필요한 필드에 필요한 만큼 생성 가능

  • 대용량 데이터에서 다양한 조건으로 조회 가능

  • 다양한 형태의 Index 를 제공

    • Hashed Index (샤드 클러스터에서 데이터를 균등하게 분배하고자 할때 사용)
    • Multikey Index
    • Partial Index
    • TTL Index (제한시간을 설정하여 오래된 데이터를 자동으로 지워주는 인덱스)
    • Geospatial Index (공간인덱스) 공간내에 거리나 범위를 계산 카카오 택시, 카카오 대리, 카카오 모빌리티

MongoDB 정책

  • Storage: SSD based (+ NVMe)
  • Memory: 64GB based (서비스에 따라 조정)
  • PSS Architecture
  • mengos(by DBA)

MongoDB 모니터링

  • Prometheus + Grafana
  • 자체개발 exporter (DB 지표 수집)
  • 알람 컨트롤타워 (세세한 알람 조정을 위해)
  • 카카오톡 연계 알람

MongoDB 백업

  • RBaM
    • 물리백업 (LVM)
    • Remote Backup
    • 사내 클라우드 스토리지에 저장
    • 동시 백업 수, 백업 속도 조절

MongoDB 사용사례 - 공간인덱스

  • 공간인덱스 활용
  • 카카오 모빌리티
  • 사용자 위치 기반 검색
  • 복합인덱스 (일반조건 + 공간조건)

MongoDB 사용사례 - 대용량 로그 저장 및 조회

  • 샤드 클러스터 구성 (scale-out)
    • 카카오모빌리티
    • 카카오페이지
    • 카카오커머스
    • 카카오톡
  • Index Support: 다양한 조건으로 데이터 조회 가능
  • TTL Index (제한시간을 설정하여 오래된 데이터를 자동으로 지워주는 인덱스)

통계로 HBase 많이 사용

통계가 아니라 이름이나 물품명등의 여러가지 조건으로 검색해야 한다면?

Primary Key 만 지원하므로 키가 걸리지 않은 데이터를 찾아야 한다면 전체 데이터를 찾아야 함

원하는 데이터를 빨리 찾아 내려면 데이터와 관련된 인덱스가 있어야 함

문제 해결을 위해 MongoDB를 도입

MongoDB는 필요한 필드에 필요한 만큼 인덱스를 생성할 수 있음

대용량 데이터에서도 원하는 데이터를 빠르게 찾을 수 있음

Application에서 로그를 저장할 때 MongoDB에 저장하거나

또는 HBase에 저장된 로그를 주기적으로 MongoDB에 적재해둔뒤

관리자가 특정 조건(admin query)으로 데이터를 찾아야 할때 MongoDB에서 데이터를 조회함으로써

원하는 데이터를 빠르게 얻음

MongoDB 사용사례 - MySQL → MongoDB 마이그레이션

  • Before migration
    • 상품데이터 + 로그데이터 혼재
    • 수TB 디스크: 스케일업 한계
    • 테이블 당 수백GB: 스키마 변경 부담 (10시간씩 소요)
  • After migration
    • 로그데이터 이관 (500G → 182G: 63% 압축률)
    • 스키마 변경 부담 제거
    • 샤드클러스터 구성: 향후 데이터 확장 대응

MongoDB 사용사례 - 서비스 MainDB

  • 대규모 데이터 & 트래픽
    • 추천시스템
    • 톡서랍
  • 수십개의 샤드
  • 수만 쿼리/s
  • 수십ms 응답속도
  • 손쉬운 확장 / 다양한 인덱스 지원 / 유연한 스키마

MongoDB 전망

  • RDBMS와 유사한 사용경험 제공

  • 데이터간 연관도가 낮은 최근 서비스에 적합

  • 스키마 관리 (빠르고 편하게 개발) / 데이터 급증 (온라인 확장 가능)

  • 서버 장애 고민 해결 (자체적으로 고가용성 지원하므로 서버 장애가 발생해도 서비스 계속 사용가능)

  • 사내 여러 개발팀에서 사용 문의 증가

  • 지속적으로 많은 서비스들에서 중요한 역할을 해줄 것이라 예상

고가용성(HA, High Availability)이란 서버와 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안

지속적으로 정상 운영이 가능한 성질을 말한다

고가용성 -> "가용성이 높다" 라는 뜻으로 "절대 고장나지 않음"을 의미한다.

728x90

댓글

💲 추천 글