Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

README.md

스케일 아웃 상황에서 DB 동시성 문제를 어떻게 해결할 것인가?

Q. 2대의 ec2와 rds 구성이 있다. 갑자기 장사가 잘되서 트래픽이 많아지면 어떻게 할 것이냐?

  • ec2를 명시적으로 표현하신 것을 볼 때 서버 구성과 배포 방식이 ec2에 직접 접속하거나, elastic beanstalk로 구성한 것으로 추정됩니다.
    • 이 구성에서 트래픽이 급격히 많아졌고 앞으로도 많아질 것이라고 기대된다면 단순 스케일 업이 아닌 오토 스케일링을 고려해야됩니다.
  • AWS 에서 지원하는 기술로는 ecs 구성이나 k8s 구성이 있습니다.
    • k8s 구성은 난이도가 비싸고 담당 인력 배치가 거의 필수적이기에 ecs 구성까지만 하는 것을 추천합니다.

Q. 복수개의 인스턴스가 있으면 rds에 쓰기를 할 때 문제가 될 것이다. 어떤 문제가 예상되는가?

  • 제일 먼저 떠오르는 것은 동시성 문제입니다.
    • 1번 유저가 재고 2개인 상품을 조회하고 주문을 준비하는 도중에 2번 유저가 주문을 성공해서 재고가 0개가 되었습니다. 아직 1번 유저는 2개의 재고가 있는 것으로 인지함으로 주문은 하지만 재고 부족으로 실패합니다.
      • 이런 중요한 변경은 DB 조회가 선행되며 업무의 중요도에 따라 낙관적인 락, 비관적인 락으로 구성합니다.
    • 만약 변경이 아니라 조회성이라면 조금 다른 방법 구성이 가능합니다.
      • 영속성 레이어 레벨에서는 마스터 - 레플리카 구성이 가능합니다.
      • 애플리케이션 레벨에서는 CQRS 패턴 적용이 가능합니다.
      • 제가 쓴 블로그에서는 여기서 하나 더 나아가 대용량 R 조회는 ETL과 datawarehouse를 말하고 고려하고 있습니다.
      • 네이버 기술 블로그에는 CDC 를 도입하고 있습니다. 하지만 이런 기술의 단점은 스냅샷이기에 지연 동기화의 문제가 있습니다.
        • 이 문제에 대한 경험을 리소스 관리 주체라는 주제로 블로깅 했습니다.
        • 보편적인 해결 방법은 MQ 적용입니다.