Каков наилучший способ балансировки нагрузки PHP? - PullRequest
1 голос
/ 11 июня 2010

ТАК Я нахожусь в процессе настройки конфигурации с балансировкой нагрузки для нашего веб-приложения с помощью nginx.Скорее всего, я бы пошел с липкими сессиями, чтобы избежать проблем сессий при настройке балансировки нагрузки, или, возможно, даже с обработчиком сессий базы данных.

Однако у меня есть 2 проблемы, которые у меня сейчас есть:

1: При развертывании из SVN (мы используем beanstalk), это, конечно, развертывание на одной машине, как выполнить развертывание на всех веб-серверах?

2: Я использую S3 для хранения пользовательских файлов, однако я делаюсохранить локальную копию, если S3 выйдет из строя (как это было сделано несколько дней назад), каков наилучший подход для синхронизации этих пользовательских файлов по всему веб-серверу?

Любые указатели приветствуются.

Ответы [ 2 ]

1 голос
/ 11 июня 2010

ТАК Я нахожусь в процессе настройки конфигурации балансировки нагрузки для нашего веб-приложения с nginx

OK

Скорее всего, я бы остановился на липких сессиях, чтобы избежать проблем сессий при настройке балансировки нагрузки

То есть вы не собираетесь с балансировкой нагрузки, вы смотрите на разделение нагрузки?

Не.

Правильно выполнено, балансировка нагрузки означает, что ваши шансы на потерю обслуживания экспоненциально уменьшаются на количество узлов. Скажем, вероятность отдельного узла составляет 0,05 (то есть время безотказной работы 95%), тогда вероятность потери обоих узлов равна 0,05 x 0,05 = 0,0025 (время безотказной работы 99,75%). OTOH, если вы разделите нагрузку, как вы предлагаете, тогда вы потеряете 1 / N вашей доступности, когда узел выйдет из строя, и вероятность потери узла составляет N * 0,05, поэтому вы получаете 96,75% доступности только с 2 узлами.

Что касается развертываний на нескольких узлах, то, как я это делал, было: 1) взять узел, назвать его node1, офлайн 2) применить релиз к node1 3) убедитесь, что развертывание прошло успешно 4) вернуть узел 1 в оперативный режим 5) перевести узел 2 в автономный режим 6) rsync от узла 1 до узла 2 7) снова запустите rsync, чтобы убедиться, что он завершен 8) вернуть узел 2 в оперативный режим затем повторите 5-8 для каждого дополнительного узла

Как лучше всего синхронизировать эти пользовательские файлы на всем веб-сервере?

Метод, описанный выше, предназначен для развертываний - для данных, отправленных пользователем, вам необходимо распространять контент во время его отправки. Я использую собственные сценарии для этого. В случае, когда узел находится в автономном режиме, когда происходит обновление, его можно повторно синхронизировать (шаги 6 + 7), прежде чем снова сделать его доступным.

Сценарии, которые я использовал, отправили запрос узлу с просьбой скопировать его от отправителя запроса, чтобы он мог работать с короткими тайм-аутами и гарантировать доступность исходного содержимого.

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

НТН

С

0 голосов
/ 11 июня 2010

С активным активным интерфейсом настройки и сессионными сеансами вы можете вывести один из серверов из ротации, дождаться очистки сеансов, обновить этот сервер, прежде чем переключать весь трафик на этот первый сервер, дождаться очистки сеансов на втором сервере, затем вытащите его из ротации, обновите его и добавьте обратно в ротацию. Таким образом, вы получите чистое обновление без потери обслуживания. Если вы используете общее состояние сеанса, вы, вероятно, можете пропустить ожидание очистки сеансов, но убедитесь, что вы сделали это на тестовом стенде, прежде чем делать это в работе, если это важно для вас, и будьте очень осторожны с обновлениями, которые касаются Сеанс хранения.

В прошлом я использовал систему с реплицированной общей папкой NFS на каждом интерфейсном веб-сервере, которая позволяла нам обмениваться данными между ними, которые подходили бы для вашего кеша S3. Я не уверен, как именно он был настроен провайдером, но у нас никогда не было проблем с ним, даже когда один из серверов потерпел неудачу на диске.

...