MySQL의 스케일링
- MySQL의 확장은 주로 데이터의 상태 저장 특성 때문에 다른 유형의 서버와 매우 다르다.
스케일링이란?
- 스케일링(Scaling)
- 증가하는 트래픽을 지원하는 시스템의 기능
- 시스템의 확장성은 비용과 단순성으로 측정할 수 있다.
- 용량(Capacity)
- 시스템의 용량은 주어진 시간 내에 수행할 수 있는 일의 양
- 시스템의 실제 용량은 수용 가능한 성능을 제공하면서 달성할 수 있는 처리량으로 정의한다.
- MySQL의 용량을 거시적으로 바라볼 필요가 있다.
- 거시적인 관점에서 확장성은 리소스를 추가하여 용량을 추가할 수 있는 능력이다.
읽기 대 쓰기 바운드 워크로드
- 데이터베이스 아키텍처 확장을 고려할 때 가장 먼저 검토해야 할 사항 중 하나는 읽기 바인딩된 워크로드 또는 쓰기 바인딩된 워크로드 중 어느 쪽을 확장하는가인가이다.
워크로드의 이해
- 데이터베이스 워크로드는 여러가지로 생각할 수 있다.
- 시간 경과에 따른 작업량
- 모든 유형의 쿼리와 지연 시간이 혼합된 것
읽기 바운드 워크로드
- 읽기 바운드 워크로드의 주요 지표
- CPU 사용률
- CPU 사용률이 높다는 것은 서버가 쿼리를 처리하는 데 모든 시간을 소비하고 있음을 의미한다.
- 디스크 읽기 IOPS 처리량
- 디스크를 매우 자주 읽거나 디스크에서 많은 행을 읽고 있다는 것을 나타낸다.
- 읽기 바운드 워크로드 개선 방안
- 인덱스를 추가하고 쿼리를 최적화하고 캐시할 수 있는 데이터를 캐싱해야 한다.
- 캐싱 개선 사항이 모두 소진되면 레플리카를 사용하여 읽기 트래픽을 확장한다.
쓰기 바운드 워크로드
- 병목이 쓰기 볼륨인 경우 개별 하위집합에서 병렬로 쓰기를 수용할 수 있게 데이터를 분할하는 방법을 생각해야한다.
기능적 샤딩
- 비즈니스에서 ‘기능’을 기반으로 데이터를 분할하려면 데이터가 무엇인지 깊은 이해가 필요하다.
- 대규모 단일/혼합 데이터베이스를 비즈니스 확장에 도움이 되는 합리적인 소규모 클러스터 세트로 분할할 때는 비즈니스 기능을 기반으로 신중하게 데이터를 분할하도록 해야한다.
읽기 풀로 읽기 스케일링
- 동일한 애플리케이션 노드가 가상 IP에 연결되어 해당 노드와 읽기 전용 레플리카 사이의 중간 계층 역할을 하는 것을 레플리카 읽기 풀이라고 한다.
- 레플리카 읽기 풀은 증가하는 읽기 로드를 둘 이상의 호스트로 분산할 수 있다.