Blog
스터디
CS Study with SON
12주차
DB 트래픽

출처 - https://github.com/jmxx219/CS-Study (opens in a new tab)

DB 트래픽

  • 데이터베이스 서버와 상호작용하는 모든 종류의 데이터 요청 및 응답 활동을 의미함
    • 주로 데이터를 조회(읽기), 수정(쓰기), 업데이트 또는 삭제하는 SQL 쿼리들이 포함됨
  • 데이터베이스 트래픽은 애플리케이션의 사용자 수, 요청의 복잡성, 데이터의 양 등 다양한 요소에 영향을 받음

DB 트래픽이 몰리는 경우 문제점

  • 응답 시간 지연
    • 데이터베이스 쿼리 처리에 더 많은 시간이 소요되고, 응답 시간이 늘어날 수 있음
  • 리소스 고갈
    • 메모리, CPU 사용률, 디스크 I/O 등의 리소스가 과도하게 사용될 수 있음
    • 리소스 한계에 도달하면 시스템의 성능이 저하되고, 최악의 경우 서비스가 중단될 수 있음
  • 트랜잭션 지연 및 실패
    • DB 트랜잭션은 보통 ACID 원칙을 따르는데, 트래픽이 몰릴 대 해당 원칙을 유지하면서 처리 속도를 유지하기 어려울 수 있음
    • 이 때문에 트랜잭션이 지연되거나 실패할 가능성이 증가함

DB 트래픽을 분산해야 하는 이유

  • 데이터베이스의 더 많은 가용성을 확보하기 위해서
    • DB에서 가용성을 확보한다는 것은 더 많은 I/O 작업을 수행할 수 있음을 으미함
  • DB의 I/O 작업량에 따라 처리할 수 있는 요청의 한계가 존재함
    • 메모리가 차거나, 커넥션 풀이 부족하거나, 물리적인 디스크 용량이 가득할 수 있음


대규모 트래픽을 감당하기 위한 DB 관리 방법

1. DB 서버 확장(Scale Out, Scale Up)

  • Scale Out
  • Scale Up
    • 물리적인 성능을 향상하는 방법으로, 한 대의 서버를 유지하며 기존 서버의 사양(하드웨어 성능)을 업그레이드하는 것
      • 서버에 CPU나 RAM 등을 추가하거나 고성능의 부품, 서버로 교환함
    • 고비용, 고효율
    • 수직 스케일링

2. DB 분할(DB 샤딩, 파티셔닝)

데이터베이스를 분할하는 방법으로는 크게 샤딩 (opens in a new tab)파티셔닝 (opens in a new tab)이 있음

  • 트래픽이 특정 DB로 몰리는 경우는 대비하여 DB 서버의 부하를 분산하는 방법
  • 샤딩
    • 동일한 스키마를 가지고 있는 여러 대의 데이터베이스 서버들의 데이터를 작은 단위로 나누어 분산 저장하는 기법
  • 파티셔닝
    • 테이블을 특정 조건을 적용해 여러 개의 테이블로 분할하는 기법

3. Cache

Cache Memory 참고 (opens in a new tab)


  • 개념
    • 캐시는 값 비싼 연산이나 자주 참조되는 데이터를 메모리 안에 둬서 후에 이어지는 요청 빠르게 처리될 수 있도록 함
    • 보통 매번 동일한 웹 페이지가 새로고침될 때마다 표시할 데이터를 가져오기 위해 한 번 이상의 DB 호출이 발생함
      • 애플리케이션의 성능은 DB를 얼마나 자주 호출하느냐에 달라지는데, 캐시를 이용하면 DB의 호출 횟수를 줄일 수 있어 성능 개선과 DB 부하를 줄일 수 있음
    • 캐시 계층(cache tier)
      • 캐시 계층은 DB의 부하 감소 및 성능 향상을 위해 사용되며, 데이터를 임시로 저장하는 고속의 계층
  • 동작 과정
    • 요청 받는 웹 서버는 캐시에 응답이 저장되어 있는지 확인하고 저장되어 있다면 해당 데이터를 클라이언트에게 반환함
    • 만약 저장되어 있지 않은 경우 DB 질의를 통해 데이터를 찾아 캐시에 저장한 후 클라이언트에게 반환함

사용 시 고려해야 하는 점

  1. 데이터 갱신이 자주 일어나지 않는 데이터가 캐시 사용에 적합함
  2. 휘발성 메모리이기 때문에 영속성으로 저장해야 하는 데이터는 db에 저장해야 함
  3. 적절한 만료 기간 필요
  • 만료 기간이 짧으면 db에서 데이터 호출을 자주 발생하고, 만료 기간이 길면 원본과 캐시에 저장된 데이터가 다를 수 있음
  1. 일관성을 유지하기 위해서는 하나의 트랜잭션 내에서 데이터를 저장하는 연산과 캐시를 갱신하는 연산이 일어나야 함
  2. 캐시 서버를 분산시켜 장애에 대응해야 함
  3. 캐시가 가득 찬 경우 어떤 데이터를 내보낼지 정해야 함
  4. 대표적인 알고리즘 LRU, LFU, FIFO
  5. 캐시 메모리의 공간이 작으면 저장된 데이터가 자주 바꿔 성능이 떨어짐

4. 메시지 큐(Message Queue)

시스템을 더 큰 큐모로 확장하기 위해서는 시스템의 컴포넌트를 분리하여 독립적으로 확장할 수 있도록 해야하는데, 메시지 큐는 분산 시스템에서 이러한 문제를 해결하기 위해 사용하고 있는 기술

  • 개념
    • 프로세스, 프로그램 간 데이터를 교환할 때 사용하는 통신 방법 중 하나로, 메시지 지향 미들웨어(MOM) (opens in a new tab)을 구현한 시스템을 의미함
    • 메시지 기반의 중재자 소프트웨어나 서비스로 시스템 간의 또는 애플리케이션 간의 통신을 비동기적으로 처리하는데 사용됨
    • Message Queueing
      • 대용량 데이터를 처리하기 위한 배치 작업이나, 채팅 서비스, 비동기 데이터를 처리할 때 사용함
      • 프로세스 단위로 처리하는 웹 요청이나 일반적인 프로그램을 만들어서 사용하는데 사용자가 많아지거나 데이터가 많아질 경우, 대기 시간이 지연되어서 서비스가 정상적으로 작동하지 않는 상황이 발생할 수 있음
      • 이때 기존에 분산되어 있던 데이터 처리를 한 곳에 집중하면서 메시지 브로커를 두어 필요한 프로그램에 작업을 분산시키는 것이 목적
  • 특징
    • 메시지의 무손실, 메시지 큐에 보관된 메시지는 소비자가 꺼낼 때까지 안전히 보관되는 특성을 보장하는 비동기 통신을 지원하는 컴포넌트
      • 메시지 버퍼 역할을 하며, 비동기적으로 전송함
    • 메시지 큐는 송신자, 수신자 사이의 연결을 해제 및 중재함으로써 한 시스템의 작업이 다른 시스템의 작업을 지연시키거나 방해하지 않도록 함
  • 분산 시스템에서 메시지 큐의 장점
    • 메시지 큐를 이용하면 서비스 또는 서버 간 결합이 느슨해져서 규모 확장성이 보장되어야 하는 애플리케이션을 구성하기 좋음
    • 또한, 생산자는 소비자 프로세스가 다운되어도 문제없이 메시지를 발행할 수 있고, 소비자는 생산자 서비스가 다운되어도 메시지를 문제없이 수신할 수 있음
    • 따라서 메시지 큐는 메시지의 무손실을 보장함


Ref