Active - StandBy
)Two Phase Commit
→ NoSQL은 제공하지 않는 문제가 있음
→ 서비스가 많아질 경우 응답 시간이 지연된다.
→ Coodinator가 단일 장애 지점
Saga 패턴
트랜잭션 관리 주체를 DBMS가 아닌 Application로 변경
App 하위에 있는 DB는 로컬 트랜잭션만 관리
연속적인 트랜잭션에 대한 실패 처리를 어플리케이션에서 구현해야 한다
격리성을 보장해 주지 않지만, 최종 일관성을 보장해준다
Choreography-Based Saga
로컬 트랜잭션을 관리하고, 완료 시 완료 이벤트를 처리하고, 다음 어플리케이션에서 완료 이벤트를 수신하기 전까지 대기한다
그 후 다음 작업 실행
구축하기 쉬우나, 트랜잭션 상태를 알기 어려움
Orchestration-Based Saga
트랜잭션 처리를 위한 별개의 Saga 인스턴스가 존재
완료 및 실패 여부를 매니저 인스턴스에 수신하고, 모두 완료되면 인스턴스를 종료하며 작업 종료
다중 스레드로 쓰기 작업을 수행하는 Master 와 단일 스레드로 쓰기 작업을 수행하는 Slave 간의 속도차에 의해 병목이 발생하게된다.
리플리케이션 과정 중 이러한 병목 현상을 복제 지연
이라고 한다.
반동기 복제방식 (Semi-Sync Replication)
MHA ( Master High Availability )
Semi-Sync Replication + MHA
테이블의 데이터를 특정 기준으로 나누어 저장하는 방식
잘 분산시켜 저장해야 하고, 읽을 때 정확한 위치에서 잘 읽어야 한다.
이때 사용하는 것이 Shard Key
샤드 수 만큼 Hash함수를 사용해 저장 ( 매우 간단 )
DB가 추가되면 Hash함수가 변경되어야 하므로 확장성이 낮다.
Locator Service 를 사용해 테이블의 데이터를 기준으로 샤드를 나눔.
Hash Sharding과 달리 키만 추가하면 된다.
Locator Service가 단일 장애 지점으로 장애 발생 시 나머지 샤드에도 문제가 생김
파티셔닝과의 차이점
상황에 따른 선택
레플리케이션 : 가용성과 내결함성을 강조, 읽기 작업을 분산하고 장애 복구를 용이하게 한다.
샤딩 : 대량의 데이터 처리와 확장성을 강조하며, 쓰기 작업의 처리량을 향상시킨다.