Работа с MySQL кластером в Doctrine

В этой статье я хочу рассказать, как настроить Doctrine таким образом, чтобы использовать master-сервера для записи, а slave-сервера для чтения данных. Эта стратегия позволит добиться распределения нагрузки между серверами БД. Речь идет именно о нескольких серверах, на которых реплицируются базы, а не о ndbcluster, как некоторые могли бы подумать.

Итак, сначала мы должны сконфигурировать все дсотупные соединения в Doctrine.

Теперь, когда у нас есть один master-сервер, и 4 slave-сервера мы можем переписать классы Doctrine_Record и Doctrine_Query для добавления логики по разделению запросов для чтения и для записи. Все запросы на запись мы будем отправлять на master-сервер, а все запросы на чтение на случайно выбранный slave-сервер. См. статью про мульти-мастер репликацию

Теперь DQL-запросы будут распределятсья между серверами, а что делать с сохранением записи? Мы сможем указать соединение дял записи, переписав класс Doctrine_Record, и используя его как базовый для наших моделей.

Отлично! Теперь запросы на чтение буду траспределены между slave-серверами, а на запись пойдут на master-сервер. Вот несколько примеров работы запросоов и моделей:

Leave a Comment