Как переключить ведущий / ведомый, балансировка нагрузки в CakePHP - PullRequest
8 голосов
/ 26 августа 2010

Мне нужно реализовать балансирование главного / подчиненного / нагрузки на существующем сайте.

Кто-нибудь использует эти (или другие) реализации для переключения ведущий / ведомый?

Ресурсы, которые я нашел о том, как реализовать ведущий / ведомый в Cake:.

I 'я получаю номер 1), чтобы работать в большинстве случаев, но у него есть проблемы с некоторыми объединениями.

Я приветствую новые источники, хаки или моды для реализации master / slave, так как сейчас я не могу понятьвокруг него.

(версия Cake, которую я использую atm: 1.2) (я кросс-пост публикую это в группах Google CakePHP http://groups.google.co.uk/group/cake-php/browse_thread/thread/4b77af429759e08f)

Ответы [ 3 ]

1 голос
/ 26 августа 2010

Взгляните на этот учебник в отношении Master / Slave на нескольких узлах.

http://www.howtoforge.com/setting-up-master-master-replication-on-four-nodes-with-mysql-5-on-debian-etch

Это может помочь вам лучше понять.

0 голосов
/ 24 ноября 2011

Ваше веб-приложение выглядит многоуровневым, вам нужно масштабировать каждый уровень отдельно:

  • Веб-слой, то есть приложение CakePHP, может распространяться на несколько веб-серверов. Это легко сделать, так как сам код является идемпотентом. Вы должны посмотреть, как балансировать нагрузку на серверы Apache, это не имеет большого значения. Хотя веб-серверы имеют довольно высокую пропускную способность, поэтому, если у вас есть узкое место, вы можете вместо этого улучшить свою стратегию кодирования / кэширования. (Используйте memcache вместо файловых кешей, например.) Если вы зависите от файловой системы (например, для загрузки), это становится немного сложнее, так как оно должно стать распределенным или разделенным.

  • Уровень данных. Существуют различные учебные пособия о том, как масштабировать / балансировать нагрузку MySQL, уже связанный другими.

Хотя сначала я бы предложил сделать эталонные тесты. (Преждевременная оптимизация - корень всего зла.) Сначала вы должны знать, где находятся узкие места, где должна увеличиваться пропускная способность. Часто вы можете оптимизировать запросы, кеширование или сделать кеширование в первую очередь. Вы также должны четко понимать свои цели: масштабируемость? отказоустойчивость?

0 голосов
/ 16 марта 2011

Насколько я могу судить, это происходит, если ваша модель имеет отношения с моделями, которые не используют такое же поведение. Пожалуйста, исправьте меня, если это предположение неверно.

Все модели имеют метаданные, которые CakePHP накапливает с помощью запроса DESCRIBE к базе данных, если эти данные отсутствуют, ваши объединения будут нарушены. Эти метаданные зависят от конфигурации базы данных.

CakePHP использует эти метаданные для заполнения свойства схемы $ this -> _. Соединения SQL создаются на основе данных из свойства схемы $ this -> _, и я думаю, что именно в этом заключается ваша проблема: база данных, представленная этим поведением переключателя MasterSlave, не имеет метаданных модели для таблиц, связанных с моделью.

Решением было бы обновить ваше поведение, чтобы оно переключалось только выборочно на чтение и запись. Добавьте это поведение ко всем связанным моделям. т.е. любая модель, связанная с использованием hasOne, hasMany и т. д., должна также использовать то же поведение.

По сути, все связанные модели должны записывать в одну и ту же базу данных и читать из одной и той же базы данных.

Бонус этого решения заключается в том, что вы будете использовать одни и те же соединения с базой данных.

...