17.3.3 확장(Scale-Out)을 위한 복제
복제를 스케일 아웃 솔루션으로, 즉 몇 가지 합리적인 한도 내에서 데이터베이스 쿼리 부하를 여러 데이터베이스 서버로 분할하는 데 사용할 수 있습니다
복제가 하나의 마스터에서 하나 이상의 슬레이브에 분산하도록 기능하기 때문에 확장 복제를 사용하는 것은 읽기가 매우 많은 쓰기 / 업데이트가 적은 환경에서 최적으로 작동합니다. 대부분의 Web 사이트가이 범주 (사용자가 Web 사이트를 찾아보고 기사와 게시물을 읽고 제품을 보거나)에 해당합니다. 업데이트는 세션 관리 중 구매할 때, 또는 포럼에 댓글 / 메시지를 추가하는 경우에만 발생합니다.
이 상황에서 복제를 사용하면 읽기를 복제 슬레이브에 분산하면서 Web 서버는 쓰기가 필요할 때 복제 마스터와 상호 작용할 수 있습니다. 이 시나리오에 대한 샘플 복제 레이아웃은 그림 17.1 "스케일 아웃시 성능을 향상시키기 위해 복제 사용" 에서 볼 수 있습니다.
그림 17.1 확장시 성능을 향상시키기 위해 복제를 사용하는
데이터베이스에 액세스하는 코드의 일부가 제대로 추상화 / 모듈화되어있는 경우는 그것을 복제 된 설치에서 작동하도록 변환하는 것은 매우 쉽고 효율적이어야합니다. 데이터베이스 액세스 구현을 모든 쓰기를 마스터로 전송하고 읽기를 마스터 또는 슬레이브로 전송하도록 변경하십시오. 코드가이 수준의 추상을 갖추지 못한 경우 복제 된 시스템의 설치는 조직에 대한 기회 및 동기입니다. 우선 다음의 함수를 구현하는 랩퍼 라이브러리 또는 모듈을 작성하십시오.
safe_writer_connect()
safe_reader_connect()
safe_reader_statement()
safe_writer_statement()
각 함수 이름 safe_
은 함수가 모든 오류 조건의 처리를 착수하는 것을 의미합니다. 함수에 다른 이름을 사용할 수 있습니다. 중요한 것은 읽기위한 접속, 기입을위한 접속, 독해 실행 및 쓰기 수행에 대해 통일 된 인터페이스를 가지고있다.
다음 래퍼 라이브러리를 사용하도록 클라이언트 코드를 변환합니다. 이것은 처음에는 답답하고 무서운 공정 할지도 모르지만 장기적으로 보면 할만큼의 가치가 있습니다. 설명한 방법을 사용하는 모든 응용 프로그램은 마스터 / 슬레이브 구성을 사용할 수 있습니다 (복수의 슬레이브를 사용하는 것으로도). 이러한 코드는 매우 보수적하기 쉽고, 문제 해결 옵션을 추가하는 것도 시간이 들지 않습니다. 예를 들어, 1 개 2 개의 함수를 수정하는 것만으로, 각 문에 어느 정도의 시간이 걸리 모기장 발행 된 문에서 어떤 진술이 오류가 발생한 하나의 로그를 기록 할 수 있습니다.
많은 코드를 작성한 경험이있는 경우는 MySQL 표준 배포본에 포함 된 replace 유틸리티를 사용하여 변환 작업을 자동화하거나 자신의 변환 스크립트를 작성하는 것이 좋습니다. 이상적으로는 코드가 일관성있는 프로그래밍 스타일 규칙을 사용해야합니다. 그렇지 않은 경우는 일관성있는 스타일을 사용하기 위해, 어쨌든 고쳐 쓰거나 최소한 자세히 알아 수동으로 구성 할 것을 권장합니다.