[대규모 서비스를 지탱하는 기술] 12장. MySQL의 분산

June·2021년 12월 26일
0

MySQL에는 기본 기능으로 레플리케이션 기능이 있다. 레플리케이션이란 마스터(master)를 정하고 마스터를 뒤따르는 서버(슬레이브)를 정해두면, 마스터에 쓴 내용을 슬레이브가 폴링(Polling)해서 동일한 내용으로 자신을 갱신하는 기능이다. 슬레이브는 마스터의 레플리카가 되는 것이다. 이렇게 해서 동일한 내용의 서버를 여러 대 마련할 수가 있다.

마스터/슬레이브로 레플리케이션해서 서버를 여러 대 준비하게 되면, 그림과 같은 구성으로 해서 AP 서버에서는 로드밸런스를 경유해서 슬레이브로 질의 한다. 이렇게 해서 쿼리를 분산할 수 있다.

이때 애플리케이션 구현에서 select등 참조 쿼리만 로드밸런서로 흘러가도록 한다. 갱신 쿼리는 항상 마스터로 직접 던진다. 갱신을 항상 마스터에서 이뤄지도록 OR매퍼에서 제어할 수 있다.

마스터 슬레이브의 특징

참조계열은 확장하고 갱신계열은 확장하지 않는다.

마스터는 확장하기 어렵다. 갱신계열 쿼리가 늘어나면 어렵다. 하지만 웹 애플리케이션에서는 90% 이상이 참조계열 쿼리다. 따라서 웹 애플리케이션에서는 참조계열에 비하면 마스터가 병목이 되어 곤란한 상황이 발생하는 경우는 그렇게 많지 않다.

갱신/쓰기 계열을 확장하고자 할 때

드물지만 마스터에 엄청난 쓰기작업이 발생하는 애플리케이션을 개발할 때가 있다.
이런 경우에도 역시나 테이블을 분할해서 테이클 크기를 작게 해준다. 그러면 분할로 인해 쓰기 작업이 분산된다. 테이블 파일이 분산되면 동일 호스트 내에서 여러 디스크를 가지고 분산시킬 수도 있으며, 서로 다른 서버로 분산할 수도 있다.

애초에 RDBMS를 쓰지않는 것도 방법이다. key-value 스토어 방식으로 쓰면 오버헤드가 적고 압도적으로 빠르다.

0개의 댓글