728x90
반응형
◇ 공부 기록용으로 작성하였으니 틀린 점, 피드백 주시면 감사하겠습니다 ◇
RDS Proxy
Application - RDS Proxy - RDS (Aurora)
- RDS proxy는 애플리케이션과 DB사이에서 Proxy layer를 제공하는 서비스이다. (쉽게 말해, RDS Proxy는 DB 앞에 위치한 "대리인(Proxy)" 역할을 한다)
- 연결 풀(Connection Pool)을 사용하여 DB 접속 관리를 효율적으로 만들고 이를 통해 DB 서버 부하를 줄이고, 애플리케이션의 성능과 Scalability & Availability까지 향상시킬 수 있다.
빈번히 DB 연결의 접속과 차단이 필요한 어플리케이션일 경우, 게다가 높은 가용성을 필요한 경우
→ RDS Proxy 활용하기
Application (애플리케이션) | Connection Pool (연결 풀) | DB (데이터베이스) |
– Lambda – EC2 – ECS, Fargate – EKS |
RDS Proxy | – Amazon RDS – Aurora |
RDS에 Proxy가 왜 필요한가??????
기존의 RDS의 연결 문제점
- DB에 연결이 많을 수록 DB 서버의 CPU와 메모리 사용량이 증가한다.
- 이로 인해 DB 리소스 안에서 query 실행을 하기 위한 리소스에 배당하기 어려워진다.
- 특히 AWS Lambda를 기반으로 하는 서비리스 어플리케이션은 짧은 시간에 수천 개의 DB 접속을 만든다.
RDS Proxy의 작동방식
- RDS Proxy는 Connection Pooling(연결 풀)이라는 것을 활용한다.
- Connection Pooling을 통해 DB 연결을 공유한다. → DB 연결을 re-use(재사용) 할 수 있게 한다.
- 이를 통해 DB 서버에 부하를 줄이고 어플리케이션의 성능을 개선할 수 있다.
- 클라이언트/어플리케이션은 RDS Proxy의 엔드포인트를 통해 연결한다.
연결 풀링 (Connection Pooling)
원래부터 있는 IT용어이다.
DB에 대한 연결을 효율적으로 하는 기술이다.
어플리케이션이나 DBMS에 접속할 경우, 접근 요청을 할 때마다 DB에게 접속이나 끄기를 반복하는 것이 아닌,
한번 형성된 접속을 유지해서 계속 사용할 수 있는 방법이다.
이를 쉽게 설명하면, 연결 풀(Connection Pool)은 여러 개의 미리 만들어진 "DB 연결"을 저장해 두는 일종의 "연결 저장소"이다.
RDS Proxy 특징 정리
- 연결 풀링 (Connection Pooling)
- RDS Proxy는 연결 풀링을 사용하여 여러 데이터베이스 연결을 효율적으로 관리한다.
- 애플리케이션에서 데이터베이스로 새로운 연결을 자주 설정하고 해제할 필요가 없어지기 때문에 데이터베이스 서버의 부하를 줄일 수 있다.
- 또한, 한 번 설정된 데이터베이스 연결을 풀 내에서 유지하고 필요에 따라 재사용하므로 연결 설정에 소요되는 시간과 리소스를 절약할 수 있다.
- failover (페일오버)와 Multi-AZ 지원
- RDS Proxy는 DB의 페일오버 시 연결을 관리하고, 새로운 DB 인스턴스로 자동으로 라우팅한다.
- 또한, Multi-AZ 배치를 지원하여 애플리케이션의 다운타임을 최소화할 수 있다.
- 예시) Multi AZ의 RDS의 프라이머리 DB 인스턴스가 장애를 겪는 경우, RDS Proxy는 프라이머리 인스턴스에 대한 연결이 실패한 것을 감지한다. 그런 다음 자동으로 Secondary 인스턴스로 연결을 재라우팅한다.
- 서버리스 아키텍쳐나 마이크로 서비스 아키텍처에서 자주 사용된다. (예: AWS Lambda)
- 보안
- RDS Proxy는 IAM 및 Secrets Manager와 통합되어 데이터베이스 인증 정보를 안전하게 관리한다.
- 이를 통해 DB 인증 정보의 보안이 강화되고 접근 제어도 용이해진다.
🤔 문제
한 회사가 AWS에서 중요한 애플리케이션을 운영 중입니다. 이 애플리케이션은 Amazon API Gateway를 사용하여 HTTP API를 제공합니다. API는 AWS Lambda 함수와 통합되어 있으며, 애플리케이션은 Amazon RDS for MySQL DB 인스턴스에 데이터를 저장합니다. 이 인스턴스는 2개의 가상 CPU(vCPU)와 64GB의 RAM을 사용하고 있습니다.
고객들은 일부 API 호출에서 HTTP 500 Internal Server Error 응답이 발생했다고 보고했습니다. Amazon CloudWatch Logs는 "too many connections" 오류가 발생했다고 보여줍니다. 이러한 오류는 예측할 수 없는 시간대의 피크 사용량 동안 발생합니다.
회사는 애플리케이션의 복원력을 향상시켜야 하며, 데이터베이스는 예정된 유지 관리 시간 이외에는 중단될 수 없습니다.
요구 사항을 가장 효율적으로 해결할 솔루션은 무엇입니까?
- DB 인스턴스의 vCPU 수를 줄이고 max_connections 설정을 증가시킵니다.
- Amazon RDS Proxy를 사용하여 DB 인스턴스에 연결하는 프록시를 생성하고, Lambda 함수가 프록시를 통해 연결하도록 업데이트합니다.
- 연결 수가 1,000을 초과하면 DB 인스턴스 클래스를 변경하는 CloudWatch 알람을 추가합니다.
- CPU 사용률이 75%를 초과할 때 DB 인스턴스의 max_connections 설정을 증가시키는 Amazon EventBridge 규칙을 추가합니다.
정답
더보기
정답. 2번
참고자료)
https://medium.com/@mrdevsecops/rds-proxy-overview-4640a13fc70e
728x90
반응형
'클라우드(AWS) > RDS' 카테고리의 다른 글
[AWS] RDS Event Notification (이벤트 알림)이란? (0) | 2024.09.04 |
---|---|
[AWS] RDS Storage Auto Scaling란? 쉽게 정리 (0) | 2024.08.11 |
[AWS] RDS와 Aurora란? 쉽게 개념 정리 (Snapshot, Automated Backups, Multi-AZ, Read Replica, 데이터 암호화) (0) | 2024.03.07 |