Серверное программное обеспечение
На серверах устанавливается программное обеспечение, которое требуется для работы сайта и других служб домена, для обслуживания и мониторинга, а также для защиты от взлома и устойчивости к нагрузкам.
На виртуальных хостингах часть из этого изначально установлена, но ни изменить конфигурацию, ни добавить компоненты там нельзя. На выделенных серверах (в том числе и виртуальных) можно установить любое нужное программное обеспечение.
На серверах, служащих для размещения сайтов, наиболее популярны безопасные и стабильные операционные системы семейства Linux (CentOS, RHEL, Debian и др.) и BSD (FreeBSD). Microsoft Server тоже встречается, но значительно реже.
Популярные пакеты серверного ПО
Веб-сервер. ПО, позволяющее принимать запросы пользователей, обрабатывать их и отправлять пользователям результаты обработки (html-страницы и другие файлы). Наиболее популярные веб-серверы — это Nginx и Apache, значительно менее распространен Microsoft IIS. Иногда с целью увеличения производительности устанавливается два веб-сервера: быстрый Nginx, который отдаёт пользователям «статику» (физически существующие на сервере документы, не требующие обработки перед отправкой), а остальные запросы переадресовывает серверу приложений (Apache, например), который занимается генерацией динамических документов. Существуют и другие производительные связки (Nginx + FastCGI, например), о рациональности использования той или иной реализации лучше проконсультироваться с разработчиками приложения и администраторами серверов.
Интерпретатор языка программирования. Компонент, который нужен для исполнения программного кода на сервере. Имеет различные версии и, как правило, модули расширений. Используемое на сервере программное обеспечение требовательно как к версии интерпретатора, так и к списку установленных расширений. Список требований приложения можно получить как у разработчика, так и у поставщика системы управления.
СУБД — система управления базами данных: MySQL, PostgreSQL, MS SQL, Oracle, Redis, MongoDB и т.д.
Поисковые системы — ElasticSearch / Sphinx — позволяют осуществлять поиск и фильтрацию быстрее, нежели это возможно с использованием реляционных СУБД.
FTP-сервер. Позволяет получать доступ к файлам, расположенным на сервере по протоколу FTP. Как правило, используется для администрирования сайта (как для обновления программного кода приложения, так и для загрузки объёмных файлов, которые нельзя загрузить через админку). Более безопасной альтернативой FTP является SFTP, протокол базирующийся на SSH и позволяющий шифровать передаваемые и получаемые данные.
Кеширующие сервера — системы, «запоминающие» результат обработки запросов и использующие эти данные при повторных обращениях для ускорения генерации страниц. Наиболее популярные кэширующие механизмы — Memcached и Redis.
ПО для обеспечения безопасности — от обычных брандмауэров (что обязательно) до автоматизированных систем обнаружения и предотвращения вторжений.
Софт для резервного копирования — бэкапы должны создаваться регулярно и автоматически, а также хранится не на том же сервере, где расположены «боевые данные».
Балансировщики нагрузки — обычно это веб-сервера, которые проксируют обращения клиентов на разные узлы, занимающиеся обработкой запросов, обеспечивая равномерное распределение нагрузки по кластеру. Также балансировщики отрабатывают инциденты отказа софта или железа на узлах обработки данных — если узел перестаёт корректно обрабатывать данные, то он исключается из списка балансировки.
Ускорители исполнения программного кода. Служат для повышения производительности, часто используемые ускорители для PHP: APC, eAccellerator, XCache.
Мониторинг и оповещения — системы, собирающие важные метрики производительности системы и сообщающие о проблемах.
Службы работы с электронной почтой. Позволяют осуществлять приём и отправку почты. Не рекомендуется на одной машине совмещать эти службы с размещением сайта, так как на активные почтовые домены поступает много писем (большая часть из которых спам), а их получение и обработка требуют как вычислительных мощностей сервера, так и загружают канал связи — всё это может вызывать замедление работы сайта. Эта рекомендация не касается почты на виртуальных хостингах, там размещение почты и сайтов осуществляется на разных серверах.
Рекомендации
- При выборе виртуального хостинга сопоставьте технические требования используемой вами системы управления или веб-приложения и список возможностей тарифного плана.
- При разработке веб-приложений старайтесь минимизировать количество зависимостей и не расширяйте технологический стек без необходимости — большое количество используемых технологий повышает риски и усложняет процессы сопровождения.
- Используйте инструменты, которые наиболее хорошо подходят для решения задач, например: для поиска — поисковые системы, а не реляционные СУБД; для кэширования — Redis / Memcached, а не файловую систему; для нагруженных сервисов компилируемые, а не интерпретируемые языки программирования.
- При настройке серверного ПО конфигурируйте сервисы, основываясь на мощности используемого оборудования. Очень часто используемые по умолчанию конфигурации либо не используют в должной мере имеющиеся вычислительные ресурсы, что снижает общую производительность, либо, напротив, в пик нагрузки могут выйти за рамки имеющихся мощностей, что потенциально приведёт к аварийной остановке сервисов.
- «Запрещено всё, что явно не разрешено» — этот принцип информационной безопасности существенно снижает угрозы. Закрывайте неиспользуемые публично порты, старайтесь минимизировать количество служб, расположенных в DMZ, урезайте права учётных записей до уровня, необходимого для выполнения возложенных задач.
- При использовании выделенных серверов (в т.ч. и виртуальных) обеспечьте своевременное обновление ПО, это залог стабильности работы и безопасности.
- Автоматизируйте резервное копирование. Бэкапируйте не только данные, но и конфигурации используемых сервисов.
- Для упрощения настройки используйте системы управления конфигурациями, например, Ansible.
- Настройте мониторинг как оборудования, так и программных сервисов. Это упрощает разбр инцидентов, позволяет превентивно решать часть проблем и ускоряет реакцию на сбои.
- Не размещайте почтовые сервисы на том же сервере, где размещаете сайт. Самое простое решение для размещения почты — воспользоваться специальными сервисами Яндекса ( connect.yandex.ru ) или Google ( google.com/apps ), эти службы по качеству сервиса превосходят многие «почтовые» тарифы хостингов и практически все «самодельные» решения.
На серверах для веб-приложений обычно устанавливается достаточно большой набор программного обеспечения, цель которого как обеспечение работы приложения, так и надёжность, быстродействие и отказоустойчивость.
Причин для сбоев в работе веб-приложений немало — это и выход из строя серверного оборудования, и сбои программного обеспечения, и аварии на уровне дата-центров.
При этом, действительно серьёзные проекты должны работать без перебоев даже в случае отказа отдельных подсистем. Практически всех рисков можно избежать или минимизировать их последствия при помощи грамотного проектирования как серверной инфраструктуры, так и архитектуры приложения.
Отказоустойчивость — важное свойство для больших и нагруженных систем: если минута простоя обходится к крупную сумму денег, то целесообразно инвестировать в построение отказоустойчивой инфраструктуры и разрабатывать архитектуру ПО в соответствие с принципами отказоустойчивости.
Ansible — система управления конфигурациями ПО. Используется для автоматизации настройки и развертывания программного обеспечения.
Ansible позволяет реализовать подход «инфраструктура как код» (Infrastructure-as-Code) — управление и описание инфраструктуры осуществляется через конфигурационные файлы, а не через ручное редактирование конфигураций на серверах или интерактивное взаимодействие.
Мы обеспечиваем бесперебойную работу сайтов и веб-приложений наших клиентов.
Мы занимаемся разворачиванием и сопровождением хостинговых площадок для серьёзных веб-проектов, построенных на Ruby, Python, PHP и Java, использующих реляционные базы данных и NoSQL-хранилища, работающих на веб-серверах Apache или nginx.
Мы оказываем услуги по администрированию физических и виртуальных серверов, сопровождению облачных решений, разворачиванию и сопровождению систем виртуализации, мониторингу, резервному копированию и информационной безопасности.