DB 트래픽
DB 트래픽
데이터베이스 서버와 상호작용하는 모든 종류의 데이터 요청 및 응답 활동을 의미함
주로 데이터를 조회(읽기), 수정(쓰기), 업데이트 또는 삭제하는 SQL 쿼리들이 포함됨
데이터베이스 트래픽은 애플리케이션의 사용자 수, 요청의 복잡성, 데이터의 양 등 다양한 요소에 영향을 받음
DB 트래픽이 몰리는 경우 문제점
응답 시간 지연
데이터베이스 쿼리 처리에 더 많은 시간이 소요되고, 응답 시간이 늘어날 수 있음
리소스 고갈
메모리, CPU 사용률, 디스크 I/O 등의 리소스가 과도하게 사용될 수 있음
리소스 한계에 도달하면 시스템의 성능이 저하되고, 최악의 경우 서비스가 중단될 수 있음
트랜잭션 지연 및 실패
DB 트랜잭션은 보통 ACID 원칙을 따르는데, 트래픽이 몰릴 대 해당 원칙을 유지하면서 처리 속도를 유지하기 어려울 수 있음
이 때문에 트랜잭션이 지연되거나 실패할 가능성이 증가함
DB 트래픽을 분산해야 하는 이유
데이터베이스의 더 많은 가용성을 확보하기 위해서
DB에서 가용성을 확보한다는 것은 더 많은 I/O 작업을 수행할 수 있음을 으미함
DB의 I/O 작업량에 따라 처리할 수 있는 요청의 한계가 존재함
메모리가 차거나, 커넥션 풀이 부족하거나, 물리적인 디스크 용량이 가득할 수 있음
대규모 트래픽을 감당하기 위한 DB 관리 방법
1. DB 서버 확장(Scale Out, Scale Up)
Scale Out
비슷한 사양의 서버 여러 대를 추가하여 시스템을 확장하는 것(데이터베이스 다중화)
서버가 여러 대로 나뉘기 때문에 각 서버에 부하를 균등하게 해주는 로드밸런싱 기술이 필수적으로 동반되어야 함
수평 스케일링
데이터베이스 다중화 방법으로는 Clustering과 Replication 방법이 존재함
Scale Up
물리적인 성능을 향상하는 방법으로, 한 대의 서버를 유지하며 기존 서버의 사양(하드웨어 성능)을 업그레이드하는 것
서버에 CPU나 RAM 등을 추가하거나 고성능의 부품, 서버로 교환함
고비용, 고효율
수직 스케일링
2. DB 분할(DB 샤딩, 파티셔닝)
트래픽이 특정 DB로 몰리는 경우는 대비하여 DB 서버의 부하를 분산하는 방법
샤딩
동일한 스키마를 가지고 있는 여러 대의 데이터베이스 서버들의 데이터를 작은 단위로 나누어 분산 저장하는 기법
파티셔닝
테이블을 특정 조건을 적용해 여러 개의 테이블로 분할하는 기법
3. Cache
개념
캐시는 값 비싼 연산이나 자주 참조되는 데이터를 메모리 안에 둬서 후에 이어지는 요청 빠르게 처리될 수 있도록 함
보통 매번 동일한 웹 페이지가 새로고침될 때마다 표시할 데이터를 가져오기 위해 한 번 이상의 DB 호출이 발생함
애플리케이션의 성능은 DB를 얼마나 자주 호출하느냐에 달라지는데, 캐시를 이용하면 DB의 호출 횟수를 줄일 수 있어 성능 개선과 DB 부하를 줄일 수 있음
캐시 계층(cache tier)
캐시 계층은 DB의 부하 감소 및 성능 향상을 위해 사용되며, 데이터를 임시로 저장하는 고속의 계층
동작 과정
요청 받는 웹 서버는 캐시에 응답이 저장되어 있는지 확인하고 저장되어 있다면 해당 데이터를 클라이언트에게 반환함
만약 저장되어 있지 않은 경우 DB 질의를 통해 데이터를 찾아 캐시에 저장한 후 클라이언트에게 반환함
사용 시 고려해야 하는 점
데이터 갱신이 자주 일어나지 않는 데이터가 캐시 사용에 적합함
휘발성 메모리이기 때문에 영속성으로 저장해야 하는 데이터는 db에 저장해야 함
적절한 만료 기간 필요
만료 기간이 짧으면 db에서 데이터 호출을 자주 발생하고, 만료 기간이 길면 원본과 캐시에 저장된 데이터가 다를 수 있음
일관성을 유지하기 위해서는 하나의 트랜잭션 내에서 데이터를 저장하는 연산과 캐시를 갱신하는 연산이 일어나야 함
캐시 서버를 분산시켜 장애에 대응해야 함
캐시가 가득 찬 경우 어떤 데이터를 내보낼지 정해야 함
대표적인 알고리즘 LRU, LFU, FIFO
캐시 메모리의 공간이 작으면 저장된 데이터가 자주 바꿔 성능이 떨어짐
4. 메시지 큐(Message Queue)
시스템을 더 큰 큐모로 확장하기 위해서는 시스템의 컴포넌트를 분리하여 독립적으로 확장할 수 있도록 해야하는데, 메시지 큐는 분산 시스템에서 이러한 문제를 해결하기 위해 사용하고 있는 기술
개념
프로세스, 프로그램 간 데이터를 교환할 때 사용하는 통신 방법 중 하나로, 메시지 지향 미들웨어(MOM)을 구현한 시스템을 의미함
메시지 기반의 중재자 소프트웨어나 서비스로 시스템 간의 또는 애플리케이션 간의 통신을 비동기적으로 처리하는데 사용됨
Message Queueing
대용량 데이터를 처리하기 위한 배치 작업이나, 채팅 서비스, 비동기 데이터를 처리할 때 사용함
프로세스 단위로 처리하는 웹 요청이나 일반적인 프로그램을 만들어서 사용하는데 사용자가 많아지거나 데이터가 많아질 경우, 대기 시간이 지연되어서 서비스가 정상적으로 작동하지 않는 상황이 발생할 수 있음
이때 기존에 분산되어 있던 데이터 처리를 한 곳에 집중하면서 메시지 브로커를 두어 필요한 프로그램에 작업을 분산시키는 것이 목적
특징
메시지의 무손실
, 메시지 큐에 보관된 메시지는 소비자가 꺼낼 때까지 안전히 보관되는 특성을 보장하는비동기 통신
을 지원하는 컴포넌트메시지 버퍼 역할을 하며, 비동기적으로 전송함
메시지 큐는 송신자, 수신자 사이의 연결을 해제 및 중재함으로써 한 시스템의 작업이 다른 시스템의 작업을 지연시키거나 방해하지 않도록 함
분산 시스템에서 메시지 큐의 장점
메시지 큐를 이용하면 서비스 또는 서버 간 결합이 느슨해져서 규모 확장성이 보장되어야 하는 애플리케이션을 구성하기 좋음
또한, 생산자는 소비자 프로세스가 다운되어도 문제없이 메시지를 발행할 수 있고, 소비자는 생산자 서비스가 다운되어도 메시지를 문제없이 수신할 수 있음
따라서 메시지 큐는 메시지의 무손실을 보장함
Ref
Last updated