организация php кода - PullRequest
       20

организация php кода

29 голосов
/ 31 декабря 2011

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

Мне нужно хорошее решение, поэтому мне не нужно реорганизовывать его через 1 год (например), и я хочу, чтобы передовые практики и методы обеспечивали выживание моего кода достаточно долго, чтобы избежать повторного его пересмотра позже , здесь нет фреймворка

Вот мой новый env:

  • 8 веб-серверов LAMP (apache2, php 5.3.5, cent os 5) - (xeon E5645, 32g ram, raid 10 1T 15k) - 1 балансировщик нагрузки для управления ими
  • 12 серверов базы данных mysql 5.5 (аналогично описанным выше) с репликацией (4 главных, 8 подчиненных)
  • 1 svn-сервер (старый сервер, который мы используем)

Моя идея состояла в том, чтобы отразить их (веб-серверы), и они передают код из SVN на все серверы. Это хорошо?

1 Ответ

36 голосов
/ 31 декабря 2011

Вы можете централизовать свой код в одной общей папке (либо создать сценарий, который копирует весь код на 8 серверов, либо использовать NFS ).

Этот централизованный код может находиться в однойили более хранилище в вашем SVN.Поэтому, когда вы нажимаете, вы нажимаете только то, что вам нужно.

Например, вы можете создать 1 репозиторий для своих собственных библиотек PHP (класс базы данных, xml, imap и т. Д.).В простой структуре и при вызове этих файлов вы просто делаете:

require('/web/lib/DatabaseMySQL.class.php');

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

Вы можете создать столько хранилищ, сколько захотите, и повторить это, если не хотите смешивать файлы - например, сторонние (Smarty, phpmailer) с кодом, который вы создаете.

Другое дело, не изобретайте велосипед.Существует множество хороших программ, которые, вероятно, делают то, что вам уже нужно.Как отправка электронной почты (phpmailer или любые другие) или системы шаблонов (Smarty или любые другие).Таким образом, вы получаете то же время разработки, и когда обновление доступно, вы просто загружаете, копируете (фиксируете, если оно есть в хранилище) и нажимаете.

Script VS NFS .

Создать скрипт для загрузки всего вашего кода на 8 веб-серверах очень просто.Обратной стороной этого является то, что вы должны убедиться, что все папки и все файлы, которые у вас есть на каждом сервере, идентичны, чтобы избежать ошибок.Кроме того, если в вашей сети произошла задержка или разрыв соединения во время отправки, у какого-либо сервера не будет того же кода.Опять больше ошибок.Это немного быстрее для запуска по сравнению с решением NFS .

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

Вот пример сценария, который вы можете использовать:

Вы можете создать .shСценарий, который будет копировать код из вашего хранилища (например, код, который вы извлекли из хранилища) на все серверы следующим образом:

// file: pushcode.sh
#!/bin/bash
/usr/bin/rsync -avz --exclude='.svn' -e ssh /path/to/code/checkedout/ user@server1:/path/to/code
/usr/bin/rsync -avz --exclude='.svn' -e ssh /path/to/code/checkedout/ user@server2:/path/to/code

сделать этот сценарий исполняемым и запустить его:

./pushcode.sh

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

Вот хороший вариант, который вам может понравиться: https://serverfault.com/questions/195035/linux-nfs-performance-vs-other-fss

...