본문 바로가기

AWS Design Pattern/관계 데이터베이스 패턴

Read Replica - 읽기 전용 레플리카를 통한 부하분산

ㅁ  풀어야 할 문제

데이터베이스의 액세스 빈도가 높아 DB 서버의 자원이 줄어들 때 서버의 사양을 높이는(, 스케일 업) 경우가 많다. 스케일 업이 힘들 때는 DB 서버를 수평 분산하는 스케일 아웃이 이루어지나, 일반적으로 어려워한다.

일반적으로 데이터베이스의 쓰기보다 읽기가 비교적 많기 때문에 읽기 처리를 분산하여 시스템 전체의 성능을 높이는 것이 요구된다.

 

  해결/패턴

읽기 성능을 높이기 위해서는 몇 가지 처리 방법이 있다. 이 패턴에서는 읽기를 여러 대의 Read Replica(읽기전용 레플리카)에 분산하는 것으로 전체 성능을 높인다.

읽기 전용 레플리카는 마스터에 대해 쓰기에 따라 자기 자신의 데이터에 반영한다. 읽기는 주로 읽기 전용 레플리카를 이용하는 것으로 마스터의 부하를 줄일 수 있다.

 

  구현

AWS RDBMS 서비스인 RDS에는 Read Replica라는 읽기 전용 데이터베이스를 쉽게 만들 수 있는 기능이 있다.

 EC2를 이용해 읽기 전용 데이터베이스를 만들 수 있다.

-       마스터 DB의 읽기전용 레플리카를 만든다. RDS가 대응하고 있는 데이터베이스의 경우는 Read Replica 기능으로 만든다.

-       애플리케이션에서 데이터를 읽는 경우는 읽기전용 레플리카를 액세스 위치로 설정한다.

-       복수의 읽기전용 레플리카를 이용할 수 있지만, 애플리케이션 쪽에서 배분할 필요가 있다. 그 때 HAProxy MySQL Proxy 등의 미들웨어를 이용해도 된다.

ㅁ  장점

-       데이터베이스에서의 읽기 부하가 높은 경우 부하 분산이 가능

-       데이터 분석 용도 등으로 마스터에 부하는 주지 않고 처리를 해야할 경우 유용하다.

 

  주의점

-       읽기 전용 레플리카는 이중화가 목적이 아니기 때문에 데이터베이스의 안전성을 높이기 위해서는 읽기전용 리플리카가 아닌 DB 레플리케이션 그 자체를 생각한다. 물론, 읽기 전용 레플리카와 DB레플리케이션을 같이 사용할 수 있다.

-       일반적으로 읽기전용 레플리카는 비동기 레플리케이션이기 때문에 마스터와 읽기전용 레플리카 사이에 약간의 지연이 있음에 주의한다.