728x90
proble
어떤한 요청이 실패를 하면 나는 자연스럽게 재시도 요청을 했다.
이 재시도는 요청을 받는 서비스에 트래픽만 높힐 뿐이다.
하지만 DB 입장의 입장은
db의 요청을 바로 롤백을 하는 것 보단 재시도를 통해 완전한 처리를 보장하는 것이 더 유용하다.
재시도가 동반되는 요청들은 항상 데이터를 멱등성 있게 처리 하는 방법은 빼놓지 말자.
https://www.youtube.com/watch?v=raPJqrtGMxY
solution
1-1 트랜잭션 보장이 안되는 환경에서 대사 작업이 필요하다.
대사작업 ( AServiceDB와 BSeriverDB 의 데이터 정합성을 맞추는 작업)
msa 환경은 트랜잭션이 보장되지 않는다
그래서 직접 개발자가 API 를 개발하여 두 db 의 정합성을 확인하고 맞추는 작업이 필요하다
스케쥴링으로 수동 작업을 극복 할 수는 있지만 수 많은 에러와 버그에 자유롭진 못하다.
1-2 긴 트랜잭션을 나누어 각자의 트랜잭션으로 요청을 원자성 있게 처리하기
Dead Letter (읽지 않은 편지)
전달되지 못한 이벤트를 deadLetter queue 에 넣어두고 서비스가 다시 정상 적동하면 읽지 못한 이벤트를 읽고 해당 작업을 수행 하는 것이다.
결제 서비스를 예로 들자
결제가 완료되고 sms 를 보내야 하는데 sms 가 실패했다고 결제 자체를 취소 하는것보다
결제를 완료가 되면 sms 서비스와 분석서비스는 각자의 로컬트랜잭션을 이용하여 요청을 처리한다.
여기서 각 서비스는 각자의 로컬트랜잭션을 이용하여 해당 요청을 원자성 있게 처리 하게 만들자.
728x90
'일-상 > 오류노트' 카테고리의 다른 글
[IntelliJ] 인텔리제이 메모리 점유율 낮추기 (0) | 2024.11.04 |
---|---|
[오류노트] github Actions / ssh: unable to authenticate (0) | 2024.10.19 |
[Mac] 맥북 오른쪽 커맨드키(command⌘) -> 한영키로 바꾸기 (2) | 2024.08.24 |
[오류노트] byte[] 무분별 하게 사용하지 말자 (0) | 2024.08.23 |
[IntelliJ] 윈도우에서 맥os 키 매핑 (0) | 2024.08.22 |