You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
간단한 부하 테스트 결과, 유저 수가 일정 규모 이상 증가하거나 일정 규모에서 유지 시, 급격하게 수신 시간(방에 있는 한 사용자가 보낸 메시지를 같은 방의 모든 사용자가 수신하는 데에 걸리는 시간)이 지연되는 문제가 있었습니다. (테스트마다 오차가 있지만, 많게는 20초 이상의 지연 시간까지 확인)
원인 분석 결과
OpenTelemetry와 Jaeger를 이용하여 애플리케이션 내 실행 시간을 추적해본 결과, DynamoDb.PutItem에서 큰 지연이 발생하고 있음을 확인하였습니다.
DynamoDB의 WCU 소진으로 인한 문제일 것이라 판단되었고, 콘솔에서 확인 결과 WCU 소진으로 인한 쓰로틀링이 발생하고 있었습니다.
고려 중인 해결 방안
DynamoDB의 용량 모드를 온디맨드로 변경합니다. 급격하게 사용자가 몰리는 현 테스트 시나리오에서는 프로비저닝 모드에 따른 스케일링 속도가 느려(WCU가 1부터 시작할 때) 적합하지 않습니다.
결과: 성공 (대부분 10ms 안팎의 응답 시간을 보여줌)
DynamoDB의 데이터 저장 작업을 별도로 분리합니다. 저장이 완료되기 전에 방에 있는 다른 사용자(Subscriber)들에게 메시지를 전달하는 것을 우선적으로 처리하도록 수정합니다.
DynamoDB가 데이터베이스 솔루션으로서 적절한 지, 보다 적절한 데이터베이스는 없는 지 다시 고민해봅니다. (초기 데이터베이스 선정에 있어, DynamoDB의 특성을 잘 모른 채로 '학습'과 '경험'에도 목적을 두고 선택.)
Message 테이블의 키 재설계(특히 PK)가 필요할 것이라 판단됩니다. 현재 성능 문제 외에도 조회가 어렵게 설계되어 있어 개선이 필요했고, 그 과정에서 데이터들이 잘 분산되어 파티션 별 WCU를 효율적으로 사용할 수 있도록 하는 고민도 필요할 것이라 생각됩니다.
The text was updated successfully, but these errors were encountered:
Description
Problem
원인 분석 결과
OpenTelemetry
와Jaeger
를 이용하여 애플리케이션 내 실행 시간을 추적해본 결과,DynamoDb.PutItem
에서 큰 지연이 발생하고 있음을 확인하였습니다.DynamoDB
의 WCU 소진으로 인한 문제일 것이라 판단되었고, 콘솔에서 확인 결과 WCU 소진으로 인한 쓰로틀링이 발생하고 있었습니다.고려 중인 해결 방안
The text was updated successfully, but these errors were encountered: