FastNetMon

вторник, 22 декабря 2009 г.

Выбор ОС для хостинга: CentOS или Debian 5?

Довольно долгое время работаю с обоими ОС в основном в контексте
"хостинг-сервер". Раньше я склонялся к мнению, что лучше всего для
хостинг-серверов подходит CentOS 5 (т.к. все же это полноценный
"Enterprise" дистрибутив со всеми вытекающими), но сейчас уверенности
у меня поубавилось. Поэтому я постараюсь дать как можно более
объективное сравнение дистрибутивов как раз по качествам, которые в
первую очередь важны для хостинга.

Сравнение будет выполняться в следующем оснащении дистрибутивов:
Debian - только базовый репозиторий, CentOS - только базовый и Epel
репозитории (я бы его тоже отнес к "стандартным", т.к. работать в
CentOS без него почти невозможно).

Для начала давайте вспомним, что такое хостинг и из какого ПО он состоит.

Хостинговое ПО
Во-первых, это конечно же Apache, который выполняет львиную долю
работы на хостинге и является стандартом де-факто (по большей части
благодаря всеми любимому mod_rewite и .htaccess). Тут отличия найти
сложно, оба дистрибутива имеют 2.2 версию Apache и вполне стабильно
работают. Так что тут равноценно.

Кроме Апача для снижения нагрузки (и, к слову, в некоем роде защиты от
DoS при ограниченных ресурсах сервера) и раздачи статики часто
используется Nginx - актуальная версия в CentOS: 0.6.39, Debian:
0.6.32. К слову, обе эти версии имеют баг (он исправлен только в 0.7,
см. рассылку nginx-ru) при котором при усечении конфига nginx.conf
(проявляется такое, например, в довольно популярной панели ISPManager)
Nginx съедает всю памяти и система просто-напросто виснет. Так что тут
обоим минус и придется самому собирать пакет и ставить Nginx 0.7.

Для полноценного взаимодействия Nginx и Apache, т.е. для корректной
передачи IP бэкэнду необходим модуль Апача - rpaf, который
просматривает полученный от Nginx IP и передает его Апачу. Этот модуль
отсутствует даже в репозитории Epel CentOS`а (сейчас я его беру в
CentAlt), но в тоже время, в Debian он есть стандартно. Что также
добавляет преимуществ именно Debian`у.

Теперь о главном, о PHP, ведь это фактически причина использования
всего остального хостингового ПО, ибо подавляющее количество CMS
написано именно на нем (прощу прощения у любителей Python, Perl и
Ruby, а также других языков, но статистика потребительского шаред
хостинга говорит о тотальном количественном преимуществе PHP).

Тут-то и начинаются проблемы у CentOS, во-первых, на нем стоит PHP
5.1.6, а многое ПО (например, Magento - очень популярный веб-магазин)
требует именно 5.2 версию и если вы не хотите столкнуться с большим
числом жалоб от клиентов по причине неработоспособности скриптов, Вы
будете вынуждены либо подключать сторонние репозитории (которые мало
того, что не гарантируют стабильности ПО и корректности его сборки, а
в худшем случае - даже не отвечают требованиям безопасности и
надежности), либо собирать PHP 5.2 самостоятельно со всеми модулями
(что опять же сделать не так тривиально, учитывая число модулей в
репозиториях - в Debian это, например, около 50 штук). А если еще
вспомнить, что для PHP довольно часто выходят исправления
безопасности, то придется весь этот комплект оперативно патчить,
собирать в пакеты и разносить по серверами, то задача уже кажется
почти нерешаемой.

Также стоит упомянуть баг php-cgi в CentOS из-за которого он не читает
php.ini в текущей папке, когда он присутствует и все равно идет в
/etc/php.ini, что сильно мешает его работе в режиме php-fastcgi (в
Debian же с этим все ок). В Debian стоит 5.2.6 версия PHP с патчем
suhosin, который значительно увеличивает безопасность скриптов и
позволяет запускать почти все без исключения современные движки.

Далее пройдем по проприетарным модулям для PHP, которые используются
для защиты скриптов - это Zend Optimizer и IonCube. Что первый, что
второй поставляются в сборках и под PHP 5.1 и под 5.2. Так что и с
ними никаких проблем не будет.

MySQL, оба дистрибутива содержат 5.0 версию со всеми необходимыми
опциями. Стабильной же (по мнению Sun Microsystems) является 5.1, но
ни в одном дистрибутиве ее еще "не признали" по-настоящему стабильной
да и ПО, которое требует только 5.1 версию я не видел еще ни разу.

Postfix, Exim, Sendmail - все три почтовика представлены в обоих
дистрибутивах. Причем, к слову, postfix-mysql находится в стандартном
репо Debian, в то время как в CentOS он ставится весьма нетривиально,
но это лишь опция и в явные преимущества записывать не будем.

Теперь поговорим о версиях хостинговой экзотики - Perl, Python и Ruby.
В CentOS присутствует только 2.4 версия языка, а в Debian 2.5, так
что для любителей новых возможностей тут, пожалуй выбор однозначный. С
Ruby выбор чуть побольше - в Debian присутствует и 1.8 и 1.9 версии, а
в CentOS только 1.8.5. Perl же в Debian самой модной версии - 5.10, в
CentOS же проверенный временем (и лингвистами :) 5.8.8.

Управление ПО: установка и обновление
Тут у обоих дистрибутивов дела обстоят довольно хорошо, как я уже
говорил выше, для CentOS существует отличный сторонний репозиторий со
многими необходимыми пакетами - Epel (является частью проекта Fedora),
а у Debian даже без дополнительных репозиториев выбор пакетов очень
большой. Для установки и обновления программ в CentOS используется
YUM, отличающийся относительно неэкономным отношением к памяти, но при
этом он не заваливает пользователя вопросами о конфигурации пакетов,
как это делает пакетный менеджер Debian - apt-get.

Различные способы запуска ОС
По поводу работы на "чистом железе" (выделенный, dedicated сервер либо
colocation) стоит отдать предпочтение все же Debian, т.к. у него ядро
новее, чем у CentOS (да, Вы можете возразить, что RH оперативно
бэкпортит поддержку оборудования, но все же мой опыт говорит о том,
что с Debian при работе на железе проблем намного меньше, чем c
CentOS).

Отдельным пунктом, думаю, стоит отметить стабильность работы в
виртуальных окружениях OpenVZ и Xen. Оба дистрибутива работают отлично
и каких-либо нареканий и проблем не имеют, что очень важно, учитывая
популярность VPS хостингов и Cloud платформ (например, Amazon EC2).

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

P.S. статья была попыткой получить инвайт на Хабр, неудачной попыткой - отклонили :) Так что выкладываю здесь :)

7 комментариев :

  1. Мы устанавливаем PHP 5.2 на CentOS из репозитория remi (http://rpms.famillecollet.com/)

    Также скоро собираемся выложить в публичный доступ наш собственный репозиторий оптимизированных под Magento сборок PHP для CentOS

    ОтветитьУдалить
  2. Да, Реми почти стандартный для обновления PHP (хотя о том, что у них представляет сборка 53го лучше промолчать), правда, кроме него есть Центос-тестинг: http://phpsuxx.blogspot.com/2009/10/php-52-centos5.html, но я там заметил, что далеко не все расширения присутствуют.

    А куда выложите, если не секрет и в чем заключается оптимизация?

    ОтветитьУдалить
  3. Для меня, debian vps самое лучшее среди 2 потому что я использую debian и он действительно дает мне обслуживания ровные плавания для 1year.

    ОтветитьУдалить
  4. Сравнивая установку из репо (yum vs apt-get(aptitude)). При каких бы то ни было срочных действиях, yum сравнительно дольше устанавливает пакеты чем apt-get, что склоняет меня к Debian. Еще большой плюс дебы это централизация по демонам, то есть каждому демону присваивается папка в /etc/ удобно имхо.

    ОтветитьУдалить
  5. Этот комментарий был удален автором.

    ОтветитьУдалить
  6. По версиям пакетов, это как-то не то сравнивать. Пакеты это как-бы не постоянное. Что в дебьяне можно подключить роднодной, но более новый реп, так подобно можно в сент.
    Не могли бы ли вы дать сравнение на уровне "интерфейсов".
    К примеру как сказано было, что в /etc хранятся конфиги у деба.

    кст, в посте сказано было про большое кол-во вопросов aptitude... на сколько знаю, можно изменить уровень debconf?

    ОтветитьУдалить
  7. Пакеты сравнивались потому что шло сравнение конкретных версий дистрибутивов с минимальным использованием внешних репо.

    По поводу конфигов, у Дебы они намного удобнее, например, вместо монолитного /etc/php.ini присутствует целая папка конфигов, которые можно удобно контролировать и редактировать, тоже самое относится к /etc/sysctl.conf.d, /etc/mysql/conf.d

    Насчет debconf не заморачивался - не знаю, все же иногда эти уведомления очень помогают, поэтому я с ними свыкся.

    ОтветитьУдалить

Примечание. Отправлять комментарии могут только участники этого блога.