Pull to refresh
74.22

Как заставить сайт летать и сэкономить десятки часов системного администрирования

Reading time 10 min
Views 109K
Скорость работы вашего сайта, его стабильность и отказоустойчивость всегда зависят от трех составляющих:

1. Платформа (CMS) и ее настройки, которые влияют на производительность (параметры кэширования и т.п.)
2. Конфигурация сервера (реального физического или виртуального) и настройки системного ПО (веб-сервер, база данных и т.д.)
3. Качество разработки, кода, интеграции с платформой.

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

В общем-то, это — совершенно нормально, каждый должен заниматься своим делом. Но, к сожалению, в небольших веб-студиях, которых большинство, редко есть админы в штате. Настройкам хостинга уделяется мало внимания. В лучшем случае — полагаются на суппорт хостера и настройки «по умолчанию».

В итоге сайт может «хромать» из-за проблем и «узких» мест в любой из составляющих: CMS, хостинг, разработка. Клиент в нюансы не вникает и остается не удовлетворен проектом в целом. Его негатив переносится на всех: «Тормозной хостинг! Ужасная система! Разработчики ничего не умеют!»

Такая картина нас, конечно, никогда не устраивала. И мы решили, что надо что-то делать…

Возможности самой платформы «1С-Битрикс», касающиеся производительности по-настоящему огромны (это и монитор производительности, и инструменты отладки, и несколько вариантов кэширования, и поддержка веб-кластерных систем, и много другое) и требуют отдельной статьи. О многом мы уже писали, о чем-то — расскажем в ближайшее время.

Сегодняшний пост — о хостинге, серверах, VPS и их администрировании.

Самое простое и, вроде бы, наиболее очевидное решение — написать хорошее подробное руководство по конфигурированию веб-систем, дать его всем желающим. И всё будет хорошо.

И начали мы как раз с этого — написали подробную документацию (было это, кажется, 6 или 7 лет назад). Затем на ее основе было выпущено несколько бесплатных учебных курсов, которые постоянно улучшались и адаптировались. В итоге сейчас они обобщены в общий «Курс для хостеров».

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

Но, к сожалению, даже наличие максимально полной документации и практических рекомендаций по настройке серверов не решает проблему производительности для большинства проектов! Хороших — правильных! — конфигураций все равно очень мало.

Причин тому много…
  • У многих администраторов банально нет времени для «тонкой» настройки системы. Поставили, базовое конфигурирование выполнили — уже хорошо...
  • Низкая квалификация технических специалистов — даже для того, чтобы все сделать «по мануалу», нужен какой-то технический бэкграунд и понимание происходящих процессов.
  • «Историческое наследие» – использование конфигураций 3-5-…-летней давности, в лучшем случае – апгрейд ПО. Четкое следование принципу «работает — не трогай». Который, как оказывается, не всегда применим.
  • Шаблонные конфигурации для всех проектов.
  • И т.д.

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

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

PHP как CGI

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

Чем плох CGI? Тем, что на каждое обращение к скрипту запускается отдельный процесс PHP. Это долго и ресурсоемко.

open_basedir

Этот параметр в PHP отвечает за ограничение доступа скриптов в те или иные директории. Очень полезно для конфигураций, в которых на одном сервере могут работать сайты разных клиентов. Благая цель — безопасность, но при этом реализовано решение, мягко говоря, «не очень»…

Во-первых, есть немало вариантов «обойти» ограничения, установленные в open_basedir.

Во-вторых, установка этого параметра (даже в «пустое» значение) очень негативно влияет на скорость работы PHP (файловые операции, например, include). На пустом ненагруженном сервере скорость генерации страниц может снизиться на 20-30%, а при высокой нагрузке — в 2-3 раза.

Есть много альтернатив для open_basedir. Начиная с отдельной копии веб-сервера для каждого клиента, заканчивая использованием chroot.

Не установлен прекомпилятор PHP

APC, eAccelerator, XCache… Надеюсь, эти слова вам знакомы.

Прекомпилятор служит для оптимизации и ускорения выполнения PHP-скриптов (прекомпилирует интерпретируемый код, кэширует результат и затем исполняет уже прекомпилированный код).

Разница в производительности на разных проектах может достигать нескольких раз.

Недостаточно памяти прекомпилятору

Прекомпилятор может быть установлен, но, например, все настройки оставлены «по умолчанию». Чем это может быть чревато? Например, тем, что будет выделено слишком мало памяти для закэшированных скриптов, обращения к новым скриптам будут вытеснять старые данные, и вся работа прекомпилятора будет неэффективной.

Отсутствует FrontEnd (nginx)

Двухуровневая архитектура «Backend — Frontend» — практически обязательное требование для стабильной работы любого более-менее нагруженного веб-проекта.

Такая схема работы решает несколько задач:
  • всю статику быстро отдают «легкие» (с минимальным потреблением памяти) процессы;
  • backend занят обработкой только «тяжелых» запросов к скриптам;
  • на медленных каналах у клиентов backend не занят отдачей контента конечному клиенту — он отдает его frontend'у и свободен для обработки последующих запросов.

Не отрегулировано значение MaxClients в Apache

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

Многие думают, что чем больше — тем лучше. Во многих конфигурациях можно видеть значения и 50, и 150, и 256.

Что это означает на практике. Допустим, один процесс Apache может потребить 40 Мб оперативной памяти. Если MaxClients установлено в 150, то при пиковой нагрузке (DDoS, хабраэффект, ошибки в разработке и т.п.) под все процессы потребуется примерно 6 Гб RAM. Только под Apache.

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

Гораздо лучше ограничить MaxClients разумным значением. Если количество запросов будет больше, то они просто «встанут в очередь» и будут обработаны, когда освободятся занятые процессы. Система будет стабильна.

* * *

Список таких типовых ошибок можно продолжать очень долго…

Мы в своей практике сталкивались с ними очень часто.

И в результате в 2009 году мы выступили в достаточно нетипичной для себя роли — не разработчиков, а системных администраторов. И выпустили бесплатный продукт «1С-Битрикс: Виртуальная машина».

Что это такое?

VMBitrix (как мы коротко называем виртуальную машину) — это готовый образ VMWare Virtual Appliance, который можно запустить на самых разных продуктах VMware (VMWare Server, VMWare ESX и ESXi, VMWare Workstation, VMWare Player, VMWare Fusion).

Чтобы было реализовано в этом образе?
  • Конечно, уже установлена операционная система (первые образы были на Ubuntu, в дальнейшем — CentOS).
  • Настроена двухуровневая конфигурация веб-сервера (Apache + Nginx).
  • Установлен прекомпилятор Zend Optimizer+, входящий в пакет Zend Server CE. По результатам нагрузочных тестов он показал наилучшую производительность.
  • Установлен и сконфигурирован MySQL.

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

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

Тем не менее, «1С-Битрикс: Виртуальная машина» оказалась очень востребованной. Хостеры, которые могли предоставлять тарифы на базе VMware, стали использовать наш образ для новых тарифов, ориентированных на размещение проектов на платформе «1С-Битрикс».

Постепенно стали появляться запросы «а сделайте такой же образ под Hyper-V», «а сделайте темплейт под Virtuozzo»…

Постепенно мы стали поддерживать почти все распространенные среды виртуализации.

Поддержка всех актуальных версий в итоге стала требовать достаточно заметных усилий, и в итоге примерно через год появился еще один бесплатный продукт — «1С-Битрикс: Веб-окружение» (Linux).

По сути это — RPM пакет, который автоматически можно развернуть на CentOS (5, 6), Fedora (12-16), Red Hat Enterprise Linux (5, 6). Поддерживается и 32-, и 64-разрядная архитектура.

Таким образом, совершенно не важно и не принципиально, используете ли вы реальный физический сервер, или же арендовали виртуальную машину (у Амазона, Scalaxy, Clodo.Ru или кого-то еще), или же купили обычный VPS.

На «голой» системе достаточно выполнить:

# wget repos.1c-bitrix.ru/yum/bitrix-env.sh
# chmod +x bitrix-env.sh
# ./bitrix-env.sh


… и несколько раз ответить «yes» в процессе установки. :)

(К слову, современные версии виртуальной машины, которая продолжает поддерживаться, собираются именно так — из пакета «1С-Битрикс: Веб-окружение»).

Собственно, все! После такой простой установки вы получаете «Веб-окружение» — сейчас уже версии 3.1.

Как эволюционировал продукт и что он «умеет делать» сейчас (при чем умеет сразу, «из коробки»). Опишу несколько наиболее интересных, на мой взгляд, «фишек».

Удобный инсталлятор любых продуктов «1С-Битрикс»

После установки веб-окружения при входе на сервер по HTTP вас встречает очень простой мастер, который позволяет развернуть уже существующий сайт из резервной копии или же установить новый, использовав любой продукт — будь то «Управление сайтом», «Корпоративный портал» или же то или иное тиражное решение.





Мастер доступен на трех языках — русском, английском и немецком.

При этом уже полностью настроено соединение с базой MySQL (в файле /home/bitrix/www/bitrix/php_interface/dbconn.php), поэтому инсталляция любого продукта проходит по «сокращенной» процедуре: не проверяются параметры системы (мы заранее знаем, что она удовлетворяет техническим требованиям), не запрашиваются параметры соединения с базой (все уже настроено).

Стартап-меню

Вот такое меню вы увидите, если зайдете на машину по SSH:



Конечно, выглядит оно несколько аскетично по сравнению с современными красивыми веб-интерфейсами. :) Наверное, когда-нибудь мы сделаем и их для веб-окружения и виртуальной машины — и получим в итоге полноценную панель управления хостингом а-ля ISPmanager, cPanel или Plesk. :)

Но даже в таком варианте — это очень мощный и удобный инструмент.

Веб-кластер

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

У нас есть подробное руководство по настройке веб-кластере, все желающие могут с ним ознакомиться.

Но для того, чтобы сэкономить свое время, можно воспользоваться мастером, который входит в состав веб-окружения:
  • он сконфигурирует и запустит репликацию MySQL;
  • сконфигурирует nginx в качестве балансировщика на несколько нод;
  • настроит пул серверов memcached для распределенного кэша данных;
  • настроит и запустит синхронизацию данных веб-серверов с помощью утилиты csync2.

Процесс настройки получается примерно таким:
  • Запускаем виртуальную машину или разворачиваем веб-окружение.
  • Устанавливаем через мастер в браузере «1С-Битрикс: Управление сайтом» одной из двух старших редакций (куда входит модуль «веб-кластер»).
  • Запускаем настройку master ноды через меню.
  • Запускаем еще одну виртуальную машину (или разворачиваем веб-окружение на втором сервере).
  • Через меню первой машины добавляем slave ноду.

Далее все настройки будут выполнены автоматически.

На прошедшей недавно партнерской конференции Денис Шаромов, руководитель технической поддержки, наглядно демонстрировал весь процесс разворачивания маленького тестового кластера буквально за 10-15 минут.

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

У вас есть замечательная возможность посмотреть все это практически «вживую» — на сайте конференции выложены видео-записи докладов, в том числе и доклад «Виртуальная машина 3.0: Как запустить веб-кластер за 15 минут с практическими примерами».

Корпоративный портал

«1С-Битрикс: Веб-окружение» максимально адаптировано для любых проектов, разработанных на платформе «1С-Битрикс» (при этом на нем замечательно будут работать вообще любые сайты, использующие PHP и MySQL).

Но при этом есть целый ряд отдельных «фишек», специально предусмотренных для работы именно с «Корпоративным порталом».

Например, автоматически инсталлируются и конфигурируются в продукте утилиты catdoc и xpdf, которые позволяют «на лету» индексировать и делать доступными для поиска на портале документы самых популярных форматов (MS Word, Excel, PowerPoint, Adobe Acrobat).

Веб-сервер сразу сконфигурирован для работы и по HTTP, и по HTTPS. Можно просто заменить self signed сертификат на свой купленный — и работать в защищенной среде.

Далее… Сразу «из коробки» поддерживается WebDAV для подключения сетевых дисков.

Отдельно можно упомянуть мастер настройки NTLM авторизации:



Если в компании используется Active Directory, и пользователям AD разрешено авторизовываться на портале, то помимо настроек собственно портала зачастую требуется немало «танцев с бубном» вокруг конфигов Apache и Nginx для корректной работы NTLM авторизации.

Теперь это не требуется, весь процесс автоматизирован!

(Подробно весь процесс настройки описан в блоге Николая Рыжонина.)

Автоматическая конфигурация в зависимости от доступных ресурсов

В веб-окружении есть хитрый скрипт /etc/init.d/bvat.

Запускаясь при старте системы, он определяет количество доступных ресурсов (RAM) и в зависимости от них автоматически оптимально настраивает:
  • MySQL (размеры буферов, количество соединений, временные таблицы и т.п.);
  • MaxClients и связанные с ним параметры в Apache;
  • количество доступной памяти для Zend Optimizer+.

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

* * *

Мы как-то попробовали посчитать, а сколько бы понадобилось времени в «человеко-часах» :) на полную настройку всего софта, разворачивание кластера, конфигурирование NTLM-авторизации… Получалось не меньше 200 часов! :)

Конечно, это — верхняя оценка. Тем не менее, даже если вам, например, нужно настроить VPS для стабильной работы обычного сайта, понадобится 1-2 дня для того, чтобы все поставить, настроить и протестировать.

С «Веб-окружением» или «Виртуальной машиной» «1С-Битрикс» это время можно сэкономить и потратить на что-то другое. :)

P.S. Нас часто просят выложить подробное описание веб-окружения: с примерами скриптов, конфигов и т.п.

Такое «описание» — это само веб-окружение. Оно абсолютно бесплатно. Поставьте его на любую машину или же скачайте нашу виртуальную машину. Зайдите на нее по ssh — и изучайте! Все конфиги, все скрипты — всё полностью открыто и доступно. :)
Tags:
Hubs:
+15
Comments 107
Comments Comments 107

Articles

Information

Website
www.bitrix24.ru
Registered
Founded
2012
Employees
201–500 employees
Location
Россия
Representative