RDS
AWS RDS
AWS에서 제공하는 관계형 데이터베이스 서비스이다.
RDS 내에서 데이터베이스 플랫폼은 EC2에서 수동으로 수행하는 것처럼 구축된다. EC2 인스턴스는 적절한 AMI에서 프로비저닝되고, EBS 스토리지는 프로비저닝된 인스턴스에 연결된다. 그리고 적절한 서브넷 그룹과 보안 그룹이 인스턴스에 연결되는 구조이다. 프로비저닝되면 RDS는 백업/복원 및 패치가 모두 자동으로 처리되어 플랫폼 유지관리가 자동으로 이루어진다.
AWS RDS MySQL의 특징
- 트랜잭션 로그 및 데이터베이스 데이터 파일은 로컬 EBS 스토리지 볼륨 사용
- 데이터베이스의 모든 커밋된 트랜잭션 I/O는 WAL(Write-Ahead Log)라고 하는 전후 이미지가 있는 로그 레코드를 생성한 후 지속가능한 스토리지로 저장
- 체크포인트 작업은 수정된 페이지를 디스크로 플러시하여 수행
- EC2 인스턴스에 생성되기 때문에 I/O 대역폭 및 IOPS로 인해 성능이 제한됨
- 튜닝에는 I/O 대역폭을 늘리거나 I/O 수를 줄여야 함
WAL: 트랜잭션이 일어나기 전에 로그를 미리 기록하여 트랜잭션 undo, redo를 할 수 있도록 한다.
IOPS(Input/Output Operations Per Second, IOPS): HDD, SDD 또는 NVMe등 저장장치의 속도를 나타내는데 사용도는 측정 단위이다.
Aurora
AWS Aurora
AWS에서 기존 데이터베이스 소스를 커스터마이징하여 만든 관계형 데이터베이스로, AWS에 최적화시킨 것이 특징이다. 기존 RDS의 모든 관리 기능 뿐만 아니라 데이터베이스에 최적화된 스토리지 하위 시스템을 제공하여 RDS 플랫폼을 확장한다. RDS에서 사용하는 EBS 스토리지 대신 NVMe SSD 드라이브 위에 구축되어 훨씬 빠른 성능 이점을 제공한다.
AWS Aurora MySQL의 특징
- 6개의 데이터 복사본을 만들어 여러 위치에 배포하고 AWS S3에 지속적으로 백업
- 99.99% 이상의 가용성 제공
- 스토리지 장애로부터 투명하게 복구
- 일반적으로 30초 미만의 인스턴스 장애조치 허용
- 이전 시점으로 빠르게 복구할 수 있는 기능 제공
+ Aurora Storage의 특징
Aurora는 단일 스토리지가 아니라 shared storage를 사용한다.
Aurora 스토리지 내부 아키텍쳐를 이해하기 위해서는 쿼럼(Quorum)방식을 이해해야 한다. Aurora는 내부적인 가용성을 확보하기 위해 총 3개의 AZ에 각각 2개의 스토리지 영역을 두고 있다. 총 6개의 Storage 영역이 있는 셈인데, Aurora에서는 Write는 4/6, Read는 3/6 Quorum을 사용한다. 다시 말해, write 연산은 6개 중 4개의 스토리지에 성공해야 완료이고, read는 6개 중 3개의 스토리지에 성공해야 완료라는 뜻이다. 이렇게 설정된 쿼럼이 충족되면, Storage는 VCL이라는 값을 가진다.
VCL은 Volume Completed LSN으로, 볼륨에 쓰기가 완료되었다는 것을 나타내는 값이다. VCL이 일어난 다음에는 storage의 background 작업의 일환으로 나머지 2개의 스토리지에도 카피가 일어난다. 즉, 하나의 write에 대한 쿼럼은 6개의 스토리지 중 4개이지만, 저장은 6개 모두 일어난다.
RDS vs Aurora
RDS와 Aurora의 주요 차이점 (MySQL 기준)
MySQL with replica의 경우, 로컬 EBS에 데이터를 저장하고 저장된 EBS를 미러링한 다음 Replication을 통해 Replica instance로 보내 복제 DB의 로컬 EBS에 다시 저장한다.
(미러링한 후에 Replication을 하는 이유는 좀 더 안정성을 확보하기 위해서라고 한다!)
Aurora의 경우, 4/6 쿼럼을 사용해 스토리지에 저장하며 스토리지 레벨에서 복제가 발생한다. 여기서 Replica로 보내는 것은 frm과 redo log이다. 따라서 network bandwitdth 사용도 적으며, 빠르게 변경분을 저장하고 반영할 수 있다.
MySQL의 경우 Read Replica도 binlog를 받아서 처리해야하기 때문에 Read 뿐만 아니라 Write도 같이 처리해야하는 단점이 있다.
AWS Aurora MySQL의 경우 Read Replica가 binlog를 읽어서 싱크를 맞추는 것이 아니라 redo log를 받아서 동기화하기 때문에 read에만 집중할 수 있다.
정리하면 RDS MySQL과 AWS Aurora MySQL의 가장 큰 차이점은 다음과 같다.
- Storage: RDS MYSQL은 자체 EBS로 운영하지만 Aurora MySQL은 Shared Storage를 이용한다.
- 관리주체: RDS MYSQL은 관리자가 RDS MySQL의 버전을 올리면서 사용하지만 Aurora MySQL은 AWS가 개발해서 버전 업그레이드를 주기적으로 하기 때문에 optional 또는 mandatory가 AWS에 의해 정해질 수 있다.
- Read Replica 구성: RDS MySQL은 standby와 read replica를 만들 때 binlog를 사용하지만 Aurora의 경우 내부 storage 및 redo log 전송을 통해 빠른 동기화가 가능하며 bandwith를 줄일 수 있다.
Aurora Serverless
AWS Aurora Serverless
Aurora Serverless를 사용하면 필요한 컴퓨팅 노드 수를 추측하지 않고도 Aurora를 실행할 수 있다. 즉, 애플리케이션의 요구 사항에 맞게 노드를 자동으로 시작하고 중지한다.
급증하는 수요를 충족하기 위해 확장하고, 수요가 없을 때 축소한다. 데이터는 확장과 관계없이 공유 스토리지 볼륨에 남아있다.
이는 작업 부하가 급격하고 간헐적이거나 예측할 수 없는 경우에 특히 유용하다.
- Data API: 웹 애플리케이션에 직접 데이터를 삽입, 업데이트, 삭제, 쿼리할 수 있는 https 엔드포인트 제공
- Autoscaling: 자동으로 확장 또는 축소
- Sleep: 일정 기간동안 사용하지 않으면 절전 모드로 전환된도록 구성할 수 있다.
- Multi AZ support: (v2) 특정 영역의 장애로 인한 다운타임에 대해 걱정할 필요가 없다.
- Read Replicas: (v2) DB 클러스터의 읽기 전용 복제본에서 데이터를 액세스할 수 있다.
🔗 참고 자료
AWS Aurora란? [1탄 - RDS MySQL과 AWS Aurora의 큰 차이점]
AWS Aurora - Aurora의 Storage 특징
[AWS RDS MySQL] RDS MySQL와 Aurora MySQL 차이점
Aurora vs. RDS: An Engineer's Guide to Choosing a Database
Amazon Aurora이란 무엇인가요? - Amazon Aurora
Amazon Aurora Serverless (v1 vs v2): What's the Difference?
현대적 관계형 데이터베이스 서비스 - Amazon Aurora FAQ - AWS