쓰기는 어디서 받고, 복제는 얼마나 늦으며, 장애 때 무엇을 잃는가
| 값 | 같은 세션의 쓰기 | 다른 세션, 리전의 커밋 | 대기 비용 |
|---|---|---|---|
SESSION (기본) | 즉시 보임 (복제 대기) | 기다리지 않음 | 중간 |
EVENTUAL | 복제된 뒤에야 보임 | 기다리지 않음 | 가장 낮음 |
GLOBAL | 즉시 보임 | 쿼리 시작 시점까지의 모든 커밋을 기다림 | 가장 높음 |
OFF | 해당 세션에서 write forwarding 끔 | ||
apg_write_forward.consistency_mode, 세션 단위로 바꿀 수 있고 재부팅 불필요. 격리 수준은 READ COMMITTED, REPEATABLE READ만 지원 (SERIALIZABLE 불가).# secondary 클러스터에서 켜기 (중단, 재부팅 없음, 기본은 꺼짐) aws rds modify-db-cluster --region us-west-2 \ --db-cluster-identifier orders-usw2 \ --enable-global-write-forwarding # 세션에서 일관성 모드 확인 SHOW apg_write_forward.consistency_mode;
GlobalWriteForwardingStatus로 확인합니다.# --region 은 현재 primary 리전 # USW2_ARN: us-west-2 secondary 클러스터 ARN aws rds switchover-global-cluster \ --region us-east-1 \ --global-cluster-identifier shop-global \ --target-db-cluster-identifier "$USW2_ARN"
rds:unplanned-global-failover-... 스냅샷 시도# --region 은 승격할 secondary 리전 aws rds failover-global-cluster \ --region us-west-2 \ --global-cluster-identifier shop-global \ --target-db-cluster-identifier "$USW2_ARN" \ --allow-data-loss
AuroraGlobalDBRPOLag (ms, secondary 기준)GlobalClusterReplicationLag (secondary)AllowDataLoss, 미복제분은 스냅샷으로 보존 시도| 키 패턴 | 자료형 | TTL (설계 예시) | 패턴 |
|---|---|---|---|
product:{id} | Hash | 1h | cache-aside + 이벤트 무효화 |
cart:{userId} | Hash | 7d (item별 field TTL 가능) | write-through |
session:{id} | Hash | 2h | write-through |
ratelimit:{userId} | String counter | 60s | INCR + EXPIRE |
stock:{productId} | String | 30s | 표시용 사본, 원본은 Aurora |
ReplicationLag 관측PREFIXED(기본) 또는 identical. identical이면 전환 시 앱 설정 변경 불필요LEGACY(기본, 단방향), ENHANCED(양방향 Replicator 필요)ReplicationLatency(ms), MessageLag, target 리전 AWS/KafkaReplicationLatency 평균, 최대로 최악의 lag 확인ReplicatedWriteConflictException, 재시도# MRSC: us-east-1, us-west-2 replica
# + us-east-2 witness
aws dynamodb put-item --region us-west-2 \
--table-name payment-idempotency \
--item '{"pk":{"S":"pay#ord-1001"}}' \
--condition-expression \
"attribute_not_exists(pk)"
| 저장소 | 복제 모델 | 평시 lag | 계획 전환 | 비계획 장애 시 손실 | 볼 메트릭 |
|---|---|---|---|---|---|
| Aurora PostgreSQL Global DB | 단일 writer, 비동기 | 보통 1초 미만 | switchover RPO 0 | lag만큼 (rds.global_db_rpo로 상한) | AuroraGlobalDBRPOLag |
| Aurora DSQL multi-Region | 동기, active-active | 커밋에 포함 | 불필요 | 0 | OCC 재시도율 |
| DocumentDB Global | 단일 writer, 비동기 | 보통 1초 미만 | switchover RPO 0 | lag만큼 | GlobalClusterReplicationLag |
| DynamoDB MREC | multi-writer, 비동기 | 보통 1초 이내, SLA 없음 | 불필요 | 미전파 쓰기는 해당 리전 복구 전까지 없음 | ReplicationLatency |
| DynamoDB MRSC | 동기, 3개 리전 | 쓰기에 포함 | 불필요 | 0 | 충돌 예외 수 |
| 저장소 | 복제 모델 | 평시 lag | 계획 전환 | 비계획 장애 시 손실 | 볼 메트릭 |
|---|---|---|---|---|---|
| Valkey Global Datastore | 단일 writer, 비동기 | 보통 1초 미만 | 수동 promote | lag만큼 (캐시는 재구성) | ReplicationLag |
| OpenSearch CCR | leader → follower, 비동기 pull | 측정 필요 | follower 승격(replication 중지) | 미복제 문서, 원천 DB에서 재색인 | replication 상태 API |
| MSK Replicator | 비동기 | 측정 필요 | producer 전환 | in-flight 유실, 재처리 중복 | ReplicationLatency, MessageLag |
| S3 CRR + RTC | 비동기 | 대부분 수초 | 해당 없음 | 99.99% 객체 15분 내 (SLA 99.9%) | RTC 복제 메트릭 |