- 특정 경매가 인기가 좋아 트래픽이 많이 발생했다면 어떤식으로 대응 할 계획이신가요? 수정
단일 서버 기준 connection timeout 10초 최대 tread 24로 평균 최대 레이턴시 5초대로 느리지만 에러 없이 처리 했습니다.
- 또한 Auto-scale 구성을 해놓아서 트래픽이 많이 몰린다고 어느정도 부하를 감당할 수 있습니다.
- DB, Redis 의 경우에도 RDS, Elastic Cache의 클러스터 설정으로 동적으로 노드를 늘려주거나 줄여주어 트래픽에 대응할 수 있습니다.
- 다만 무작정 서버를 늘리는것에는 코스트 한계가 있기 때문에, 현재 구성 이 감당 불가능한 트래픽이 지속적으로 발생하게 되면 alb 앞 단에 대기열 큐를 구성하여 트래픽 제어를 고려할 것 같습니다.
- 트래픽 대응 방법은 아주 완벽합니다 좋습니다.
- "특정 경매"라는 키워드로 질문을 드린 이유는 예상 가능하거나 이미 트래픽이 초과된 이후 상황을 가정한 거라 대응 방법을 순서대로 또는 각 상황별 대응방법을 답변해주시는것이 좋습니다.
ps. 너무 AWS의 기능에 의존하는것 처럼 보이는 답변입니다.
-
경매, 선착순 결제 등 좌석이 결제가 된 상황에서 공연이 취소 될 경우 환불을 진행해야 하는데 이 때 DB에 어떻게 반영할건지 전략을 알려주세요.
-
예매 상태에 환불 상태 추가하여 예매 상태 식별
-
환불 작업 배치 프로그램 개발
a. 환불 공연 선택
b. 공연에 포함된 모든 결제된 기록을 각각 별도의 트랜잭션으로 결제 취소 처리를 진행한다.
c. 환불 처리에 대한 로그를 별도의 테이블에 기록하여 트랜잭션 오류 발생시 재처리를 시도사용자한테 환불 처리 알림
- 환불 이라는 키워드에 조금 매몰되신거 같습니다. 환불의 영향 범위는 단순 결제가 아닌 좌석의 롤백까지 입니다. 결제 취소와 빈 좌석 상태가 어느시점에 적용되며 어디까지 롤백을 시킬건지 등등 고민해보시면 좋을거 같습니다.
- 사용자한테 환불 처리 알림
- 환불 이라는 키워드에 조금 매몰되신거 같습니다. 환불의 영향 범위는 단순 결제가 아닌 좌석의 롤백까지 입니다. 결제 취소와 빈 좌석 상태가 어느시점에 적용되며 어디까지 롤백을 시킬건지 등등 고민해보시면 좋을거 같습니다.
- Mysql 에도 입찰 테이블이 있고 Redis에도 입찰 테이블이 있는데 어느 시점에 어떻게 동기화가 진행되는지 동기화를 하는 이유는 무엇인지 알려주세요.
- 우선 입찰 API 를 통해 입찰을 하게 되었을 떄, Redis 의 입찰가를 조회하여 상횡입찰인지에 대해 검증을 수행합니다. 상회 입찰일 경우 DB 입찰 테이블에 입찰 정보를 저장합니다. 결국 경매 입찰은, 아무리 많은 입찰 요청이와도 '상회입찰'만 실제 입찰이 되기 때문에, Redis를 통해 입찰 검증을하게되면 그만큼 DB에 부하를 주지 않습니다. 그리고 Redis 입찰가 갱신하는 시점에 같이 DB 동기화를 해주는 이유는 다른 유저가 첫 경매정보를 조회할때, 해당 경매의 입찰테이블 에서 가장 높은 금액의 입찰가를 조회하기 떄문입니다.
- 잘 답변해주셨습니다. 단순 입찰 비교용으로 레디스를 사용하셨군요! 만약 경매가 과열되어서 상회입찰이 빈번하게 일어난다고 하면 경매 종료시에만 DB에 동기화하는것도 좋아보입니다!
- 대용량 트래픽을 목표로 하고 있는데 알림 푸쉬 전략도 궁금합니다.
- 입찰가 갱신과 추후 구현 예정인 경매 상태 알림 등 SSE 통신을 하게 되는데, SSE 연결객체는 각 서버의 메모리에서 관리를 하게됩니다. 대용량 트래픽 처리를 위해서는 분산 서버 환경이 필수인데, 서버가 분산되는경우 SSE 알림이 각 서버별로 따로 동작하게 됩니다. 이를 해결하기 위해 Redis Pub/Sub 구조를 활용하여 Client에 SSE 를 통해 메시지를 보내야 하는 경우, Redis 에 Publish하여 필요한 메시지를 서버들이 구독하여 각 SSE에 연결된 클라이언트들에게 보내도록 구현하였습니다.
시스템이 MSA로 고도화된다면 SSE 전용 서버를 따로 두고 관리하는것도 고려해볼것 같습니다.
- 아주 좋습니다. 분산 서버 환경에서 SSE 활용을 잘 이해하고 계십니다! 답변해주신 방법 외에 알람 전용 서버를 하나 따로 만드는 방법도 있습니다!
- 로그인 전략과 선택 이유를 대규모 트래픽 이라는 키워드에 맞춰서 말씀해주세요