대규모 트래픽 환경의 주요 기술적 문제
대규모 트래픽 환경의 주요 기술적 문제
대규모 트래픽 환경의 주요 기술적 문제
데이터베이스(DB) 부하와 성능 저하
대규모 트래픽 환경에서 가장 큰 난관 중 하나는 데이터베이스 연결과 입출력(I/O)에 갑자기 몰리는 부하입니다.
- 폭발적인 부하 증가: 트래픽이 늘어나면 DB 커넥션과 I/O에 들어가는 비용이 급격히 커집니다. 이 때문에 서버는 금세 한계에 부딪힐 수 있습니다.
- 처리 속도 저하: 데이터의 정합성을 지키기 위해 트랜잭션마다 원자적으로 처리해야 합니다. 요청이 쏟아질수록 처리 지연이 점점 길어지는 문제가 생깁니다.
- DB 커넥션 관리: 락을 걸어야 할 때 커넥션을 오래 점유하는 경우가 잦아집니다. 커넥션 풀 안의 자원 회수가 늦어지면 전체 성능까지 떨어질 수 있습니다.
- RDBMS의 한계: 고객과 트래픽이 계속해서 늘어나면, 시스템은 더 많은 처리량을 감당해야 합니다. 하지만 전통적인 관계형 데이터베이스만으로는 다양한 비즈니스 요구를 해결하기 어려울 때가 많습니다.
분산 환경에서의 동시성과 데이터 일관성
시스템을 여러 서버로 분산해 운영하게 되면, 단일 데이터베이스 트랜잭션으로는 해결할 수 없는 동시성과 일관성 문제가 드러납니다.
- 분산락의 필요성: 여러 서버 인스턴스가 동시에 같은 데이터에 접근할 때, 락을 분산 환경에서도 제대로 관리해야 합니다. 그러기 위해선 분산락 같은 별도 장치가 요구됩니다.
- 락과 트랜잭션 처리 순서: 락과 트랜잭션은 항상 올바른 순서로 처리되어야만 데이터 무결성이 보장됩니다.
- 예를 들어, 트랜잭션을 시작한 뒤에 락을 획득하면, 앞서 처리된 트랜잭션 결과를 미처 반영하지 못하고 다음 단계를 밟게 되어 문제가 생깁니다.
- 반대로 락을 먼저 해제하고 트랜잭션을 나중에 커밋하면, 대기 중인 요청이 이미 해제된 락을 보고 이전 상태의 데이터를 읽어 처리하는 바람에 오류가 발생할 수 있습니다.
- Spin Lock의 한계: 락 획득에 실패할 때마다 반복해서 재시도를 하는 Spin Lock 방식은 네트워크 자원을 소모하고, 실패가 누적되면 쓰레드 점유 등으로 이어질 수 있습니다.
- 캐시 데이터의 불일치: 분산된 여러 서버가 각자 메모리 캐시를 가지고 있을 때, 서로의 데이터가 달라지는 일이 일어나기도 합니다. 그 결과, 사용자는 동일한 요청을 여러 번 보냈을 때 그때그때 다른 결과를 받을 수 있어, 서비스 신뢰도가 낮아질 수 있습니다.
시스템 안정성과 운영상의 문제
- 메모리 부족 현상: 애플리케이션 인스턴스 단에서 데이터를 캐시에 올려두면, 메모리가 부족해져서 서비스가 비정상적으로 종료되는 경우도 생깁니다.
- 관리 주체 증가로 인한 복잡성: 분산 락을 위해 Redis 같은 별도 인프라를 도입하면, DB 이외에 관리해야 할 대상이 하나 더 늘어납니다. 그만큼 관리 포인트가 많아지고 새로운 문제가 불거지기도 합니다.
- 관리 주체 장애의 위험: 락을 관리하는 Redis 같은 시스템이 중단된다면 전체 서비스에 영향을 미칠 수 있어, 한순간에 전 서비스가 다운되는 심각한 상황이 올 수도 있습니다.
이처럼 대규모 트래픽 환경에서는 단일 DB의 한계를 넘는 설계와 안정적인 분산 환경, 그리고 운영상의 세밀한 고려가 반드시 필요합니다.
This post is licensed under CC BY 4.0 by the author.