본문으로 바로가기

[RDS] Aurora의 Read, Write 방식

category AWS/데이터베이스 2022. 6. 9. 18:23

Aurora와 RDS의 차이점

Aurora와 RDS의 가장 큰 차이점은 바로 스토리지에서 온다. Aurora는 Primary와 Replica끼리 스토리지를 공유하여 사용(Storage Cluster)하지만 RDS는 각각의 EBS 볼륨을 사용한다.

Aurora의 클러스터 볼륨

 

Storage Cluster의 장점을 극대화하기 위해 Aurora는 내부적으로 Read, Write 시 RDS와는 다른 아키텍처를 가진다.

기본적으로 Aurora는 가용성을 확보하기 위하여 총 3개의 AZ를 가지고 각각의 AZ별로 2개의 스토리지 영역을 두고 있다. 데이터의 일관성을 보장하기 위하여 Aurora는 Quorum방식으로 Read, Write를 처리한다.

스토리지 영역이 6개이기 때문에 Read는 6개 중 3개의 스토리지에서 성공해야 완료이고 Wrtie는 6개 중 4개가 성공해야 완료처리를 한다.

  • Read 3/6
  • Wrtie 4/6

응답이 가장 빠른 스토리지에 Write를 먼저 시도한다. (즉, 요청을 보낸 인스턴스와 동일한 AZ에 있는 스토리지에 데이터가 쌓임)

그런데 만약 Write를 시도할 때 스토리지에 문제가 발생한다면 어떻게 될까?

Aurora는 Write 요청이 발생하면 Incoming Queue라는 내부적인 큐를 이용하여 Write에 대한 처리를 비동기 방식으로 처리한다.

Aurora 내부 아키텍쳐

Write 요청이 발생하면 Incoming Queue에 쌓이고 이후 Update Queue에 쌓이면 즉각적으로 ACK 하기 때문에 다른 스토리지에 문제가 발생하더라도 (즉, Quorum을 만족하지 않더라도) 바로 응답을 받을 수 있다. 이후에 특정 스토리지의 맞지 않는 일관성은 나머지 2개의 스토리지에도 Copy를 하여 모든 스토리지에 데이터 일관성을 맞춰준다.

  • Write가 성공적으로 완료가 되면 스토리지는 VCL이라는 상태값을 가지는데 VCL이 발생한 후에 Copy를 진행한다.
  • VCL은 Volume Completed LSN으로 볼륨에 쓰기가 완료됐다는 VCL이다.

비동기방식과 Quorum 방식이 이렇게 존재한다.