Репликация данных для двух веб-серверов и вопросы по масштабированию веб-сайта?

Исходные данные:


Есть веб-сайт, который работает на связке Linux+Nginx+PHP(+фреймворк Yii)+MySQL.


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


Что нам нужно:


Каждый из компонентов продублировать. В идеале с учетом последующего масштабирования на новые сервера.


В итоге спроектировал так:

2 frontend nginx'a, которые принимают все запросы и отдают статику. Балансировка запросов в фронтендам по DNS Round Robin.

2 backend сервера c PHP_FPM и memcache. Балансировка обращений к базам есть в самом Yii (мне так наши прогеры сказали).

2 сервера баз данных MySQL.


Все сервера будут на работать FreeBSD.


Вопросы:

1) Как организовать синхронизацию статики между двумя frontend'ами?

2) Как сделать балансировку запросов к бекендам?

3) Есть ли смысл дублировать memcache или лучше пусть работают два независимых memcache?

4) Оптимально ли использование PHP-APC вместе с memcache?

5) Есть ли смысл в шардинге, если используется master-master репликация базы MySQL?
  • Вопрос задан
  • 6798 просмотров
Решения вопроса 1
@betal
Все почти как у вас, имею большой опыт в этом всем.
>2 frontend nginx'a, которые принимают все запросы и отдают статику. Балансировка запросов в фронтендам по DNS Round Robin.
Не делайте DNS Round Robin, если что — то упадет, долго восстанавливать, у меня реализовано проще, если ип клиента четный то files1.site.ru, если нечетный то files2.sites.ru. Если упал сервер статики, убираем из вывода неработающий домен. и перекидываем нагрузку на рабочий.
1) У меня статика копируется по мере необходимости.
2) Средствами nginx :)
3) По мне так если мало одного memcache, то делают разделение на основе ключей, таким образом часть информации на одном сервере, часть на другом, но никак не дублирование.
4) Разные вещи сравниваете, если вопрос о кэшировании каких то данных, я бы выбрал memcache.
5) Вопрос в том что выбирать, отказоустойчивость или скорость.

PS.
> Балансировка обращений к базам есть в самом Yii (мне так наши прогеры сказали).
Разве? Я эту часть сам писал когда — то. Да и чтобы избежать ошибки типа Race condition, нужно чтобы не фреймворк был правильно написан, а сама программа. Master — Master репликация, даже в теории достаточно сложна. Я бы без острой необходимости не сталкивался с такими сложными в обслуживании структурами ( по крайней мере до момента пока mysql не станет эти структуры официально поддерживать )
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы