4. CQRS 를 통한 분산 트랜잭션 처리
총구매액: 500 총마일리지: 5
총구매액: 600 총마일리지: 5
총구매액: 600 총마일리지: 6
총구매액: 700 총마일리지: 6
총구매액: 700 총마일리지: 7
Consistent
In-consistent
조회화면서비스구성 (CQRS)
Mileage
(MongoDB)
Order
(MySQL)
Kafka (메시지보장)
OrderPlaced
(pub)
OrderPlaced
(sub)
Client (Web/Mobile)
POST
Update
5. 여기서 선택의 길을 만남
• ‘잠깐의’ 데이터 불일치가 얼마나 크리티컬 한가?
• 크리티컬 하다고 응답한다면, 내 서비스의 성능과 확장
성에 비하여 크리티컬 한가?
• 성능과 확장성 보다 크리티컬 하다면, 성능과 확장성을
포기할 수 있는가?
• 성공한 내 서비스의 경쟁자들은 무엇을 포기했는가?
• 강력한 의사결정 필요
6. CQRS 를 통한 분산 트랜잭션 처리 – 불
일치가 Mission Critical 한 경우
총구매액: 500 총마일리지: 5
총구매액: 600 총마일리지: 5 (PENDING)
총구매액: 600 총마일리지: 6
총구매액: 700 총마일리지: 6 (PENDING)
총구매액: 700 총마일리지: 7
Consistent
In-consistent
조회화면서비스구성 (CQRS)
Mileage
(MongoDB)
Order
(MySQL)
Kafka
OrderPlaced
(pub, PENDING)
OrderPlaced
(sub)
Client (Web/Mobile)
POST
All-done
(pub)
All-done
(sub, CLEAR PENDING)
7. CQRS 를 통한 분산 트랜잭션 처리 –
Rollback (Saga Pattern)
총구매액: 500 총마일리지: 5
총구매액: 600 총마일리지: 5 (PENDING)
총구매액: 600 총마일리지: 6
총구매액: 700 총마일리지: 6 (PENDING)
총구매액: 700 총마일리지: 7 실패
Consistent
In-consistent
조회화면서비스구성 (CQRS)
Mileage
(MongoDB)
Order
(MySQL)
Kafka
OrderPlaced
(pub, PENDING)
OrderPlaced
(sub)
Client (Web/Mobile)
POST
All-done
(pub)
FAILED
(sub, DELETE or CANCEL)
FAILED
(pub)
If~else
총구매액: 600 총마일리지: 6
8. BPMN 을 이용한 CQRS와 Sagas
https://www.infoq.com/articles/events-workflow-automation