목록 보기
신규 서비스 배포 전에 실험과 개선을 반복한 이야기
백엔드

신규 서비스 배포 전에 실험과 개선을 반복한 이야기

마켓컬리
마켓컬리
2020년 9월 6일

두줄요약

가상 재고 관리 시스템의 성능 테스트에서 DB 데드락과 I/O 병목을 발견해 개선했습니다. 잠금 순서 정렬, commit 축소, MongoDB 로그 분리로 목표 TPS를 넘겼습니다.

문제 상황

  • 재고 조회·증감·초기화 부하 테스트에서 목표 1,200 TPS 미달과 DB 데드락 발생
  • DB commit과 수량 변경 로그 적재에 따른 I/O·커넥션 점유 병목

원인 분석

  • 여러 상품을 서로 다른 순서로 차감하는 트랜잭션 간 순환 대기
  • 분산된 commit과 메인 RDB 로그 저장으로 증가한 DB I/O

해결 방법

  • 트랜잭션별 차감 대상 상품 정렬로 잠금 순서 통일 및 데드락 제거
  • 요청 단위 처리를 묶어 commit 횟수 축소 후, 성능 비교를 거쳐 리팩토링 코드 채택
  • 수량 변경 로그를 MongoDB로 분리해 RDB 커넥션 점유 감소

성능/운영 포인트

  • 운영 RPS 샘플을 기준으로 물류 증가와 성장률을 반영한 1,200 TPS 목표 설정
  • 장시간 성능 테스트에서 1,445~1,462 TPS 기록, 이후 1,500 TPS 이상 유지

다음 읽기

#성능 주제를 이어서 읽기

신규 서비스 배포 전에 실험과 개선을 반복한 이야기

VSMS 배포 전 성능 테스트에서 재고 갱신 순서로 인한 DB 데드락과 I/O 병목을 발견했습니다.\n상품 정렬과 로그 MongoDB 분리로 목표 1,200 TPS를 넘어 1,500 TPS 이상을 유지했습니다.

마켓컬리
마켓컬리
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...