-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[LIME-71 ] 투표 참여 API 데드락 & 동시성 이슈 해결 #75
[LIME-71 ] 투표 참여 API 데드락 & 동시성 이슈 해결 #75
Conversation
며칠 동안 글 작성한 내용 찾아보면서 공부했는데 유익했습니다! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생 많으셨습니다. 이번 동시성 처리가 많은 공부가 되셨을 것 같아요~
while (Boolean.FALSE.equals(voteRedisManager.lock(String.valueOf(vote.getId())))) { | ||
Thread.sleep(10); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
10ms마다 검사하는 방법이 가장 효율적이었던건지 궁금해서 질문드립니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
제가 생각할 때는 10이 가장 적절한 것 같습니다!
락을 얻기 위해 계속 시도하면 레디스에 부하를 주기 때문에 Thread.sleep()
으로 약간의 시간차를 두고 락 획득을 시도하도록 하였습니다. 다만 이 시간을 어떻게 설정해야 될까 고민을 많이 했고, 100, 50, 10 이렇게 3가지를 고려했습니다. 아무래도 처리 로직이 간단하기 때문에 처리 속도도 빠릅니다. 따라서 tps량이 가장 많은 10으로 선택을 했고, 레디스가 그 정도 부하는 충분히 버틸 수 있다고 생각했습니다! 10으로도 문제 없이 처리할 수 있는데 100과 50으로 시간을 설정하는 것은 오히려 응답 시간을 지연시킬 수 있다고 생각했습니다.
📌 PR 종류
어떤 종류의 PR인지 아래 항목 중에 체크 해주세요.
📌 어떤 기능이 추가 되었나요?
Issue Number
LIME-71
❎ 문제 상황
1️⃣ 데드락 해결
데드락이 발생한 이유
해결 방법
결론
2️⃣ 동시성 이슈 해결
동시성이 발생한 이유
해결 방법
결론
📌 기존에 있던 기능에 영향을 주나요?