-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Labels
Description
Describe
아래와 같은 근거로 AWS RDS의 운영을 종료하고 TiDB Cloud 로 이관한다.
요구사항
- 운영, 개발 디비 2개 이상을 제공해야 한다.
- 단 한푼도 DB 운영에 돈을 쓰고 싶지 않다.
- Response time gap(Max response time - min response time) ≤ 200ms
- MySQL 8.0 호환 가능
- Solution Migration 예상 작업 소요 1일 이내
- 작업 심사가 까다롭지 않았으면 좋겠다.
- 장기간 미사용시(활동종료 ~ 디프만 코어 신규 모집 후 개발 시작 : 약 3개월) 데이터가 유지되어야 한다.
서버리스 DB 벤치마크
| 평가 항목 | TiDB Cloud Serverless | CockroachDB Serverless | Supabase | Neon |
|---|---|---|---|---|
| 핵심 엔진 | MySQL 5.7 / 8.0 호환 | PostgreSQL 호환 | PostgreSQL 15+ | PostgreSQL 15+ |
| 무료 스토리지 | 25 GiB (행 5GiB + 열 5GiB + @) | 10 GiB | 500 MB | 500 MB |
| 컴퓨팅 한도 | 월 5,000만 Request Units (RU) | 월 5,000만 Request Units (RU) | 공유 CPU (2 vCPU Burst) | 공유 CPU (0.25 - 2 CU) |
| 최적 리전 | 도쿄 (AWS ap-northeast-1) | 서울 (AWS ap-northeast-2) | 서울 (AWS ap-northeast-2) | 싱가포르 (AWS ap-southeast-1) |
| 가입/심사 난이도 | 카드 등록 불필요 | 카드 등록 불필요 | 카드 등록 불필요 | 카드 등록 불필요 |
| Java 호환성 | 기존 MySQL 드라이버 사용 가능 | PostgreSQL 드라이버로 교체 필요 | Connection Pooler 모드 필수 | Connection Pooler 모드 필수 |
| 운영 리스크 | 쿼리 없을 시 일시 정지 (Cold Start 존재) | 완전 자동 스케일링 (Cold Start 미미함) | 1주일 미사용 시 프로젝트 정지 | 5분 미사용 시 일시 정지 |
| NCP 연동 지연시간 | ~30ms - 40ms | <10ms | <10ms | ~90ms |
도입시 예상 운영 문제
- Serverless cold start
잦은 TPS 가 발생하지 않기 때문에 간헐적인 접속에도 최소한의 Connection 을 유지
hikari: # 서버리스 환경 필수 튜닝 minimum-idle: 1 # 최소 1개의 연결을 유지하여 Cold Start 빈도 감소 maximum-pool-size: 10 # 무료 티어의 연결 수 제한(보통 50-100개)을 고려하여 보수적으로 설정 max-lifetime: 600000 # 10분. DB의 유휴 타임아웃보다 짧게 설정하여 좀비 커넥션 방지 idle-timeout: 300000 # 5분. 불필요한 연결을 정리 keepalive-time: 60000 # 1분. 주기적인 Ping으로 연결이 끊기지 않도록 생존 신호 전송 connection-timeout: 30000 # 30초. 연결 획득 대기 시간 validation-timeout: 5000 # 5초. 연결 유효성 검사 시간
- VPC 외부 자원과 연결시 보안 문제
SSL 강제: JDBC URL에 sslMode=VERIFY_IDENTITY
TiDB 콘솔에서 NCP LB IP allow, deny all
Solution Migration Plan
현재 AWS를 쓰고 있으니, snapshot dump, streaming 방법들이 있다.
TiDB에서는 import from S3를 제공하기 때문에 이를 활용하도록 한다.
- RDB Read replica snapshot / dump mydumper 예시 (로컬 저장 후 S3 업로드)
mydumper -h <RDS_ENDPOINT> -u <USER> -p <PASSWORD> -o./backup --rows 100000 --threads 4
aws s3 cp./backup s3://my-bucket/backup --recursive
- TiDB 클라우드 내부망(AWS 백본)을 통해 S3 데이터를 고속으로 흡입(Ingest)
precaution : IAM 에 외부 제한된 설정이 있는지 검토 요청
TiDB 클라우드 내부망(AWS 백본)을 통해 S3 데이터를 고속으로 흡입(Ingest)
- NCP 임시 Cloud - TiDB connection test
k6 로 100건 정도 health check packet (SELECT 1) test
- 정상일 경우 아래 절차 수행
- 비정상이거나 유실이 자주 발생하면 추가 분석 예정
- RDS 종료
AWS RDS Terminate 비용 차단 최소화
차선책 불응 사유
- Supabase
서울 리전을 지원하지만 Database Solution 사용하는데 아래와 같은 한계가 있다.
- 500 MB 스토리지 제한, 이를 초과할 경우 데이터베이스가 Read-only 전환, 유료 플랜($25/월)으로 강제 전환
- 일주일 휴면 정책: free project는 1주일 동안 API 요청 없으면 Pause 강제전환. → refresh 시도하려면 대시보드에서 수동으로 전환해야 함.
- Depromeet core의 write 빈도를 고려해봤을 때 부적절
- CockroachDB
용량 및 트래픽은 감당할 정도로 좋지만
우리는 JooQ, JPA에서 Driver를 PostgreSQL migration 할 시간 없음.
- Neon
NCP 서울 리전에서 싱가포르까지의 지연 시간은 약 90ms ~ 100ms : 도쿄리전보다 2.5배 느림.
- AWS
AWS EC2, EBS 서비스로 DB Process를 올려 사용하는 것은 운영 비용 월 최소 5만원 추가 발생 예정.
- AWS RDS는 비용 감당 안됨.
Tasks
이서현, 정준원, 이한음 3인 전원 동의시 milestone 설정 예정.
ETC
No response
Reactions are currently unavailable