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

На виртуальных хостингах часть из этого изначально установлена, но ни изменить конфигурацию, ни добавить компоненты там нельзя. На выделенных серверах (в том числе и виртуальных) можно установить любое нужное программное обеспечение.

На серверах, служащих для размещения сайтов, наиболее популярны безопасные и стабильные операционные системы семейства 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.

Узнать больше →

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

Cтатьи по теме:

Реляционные базы данных и NoSQL-хранилища
13.03.2019  |  Статьи  —  СУБД  /  хранение данных  /  SQL  /  NoSQL  /  серверное ПО
Базы данных служат для хранения и обработки данных. Бывают реляционные (SQL) и нереляционные (NoSQL) системы управления базами данных.
Ускоряем работу сайта, используя быстрый и надёжный веб-сервер nginx
nginx — это простой, быстрый и надёжный сервер. Применение nginx очень эффективно для отдачи статического контента и в качестве прокси-сервера перед динамическими сайтами.
Ускоряем работу сайта: используем Redis для кеширования и хранения данных
Redis — сетевое журналируемое хранилище данных типа «ключ — значение», которое обрабатывает данные в оперативной памяти и обладает механизмами снимков и журналирования для обеспечения постоянного хранения. Хранилище поддерживает работу с пятью типами данных: со строками, списками, хешами, обычными и сортируемыми множествами.
Быстрый поиск на сайте, используя ElasticSearch или Sphinx
Sphinx и ElasticSearch — это поисковые «движки», которые обеспечивают более быстрый поиск и фильтрацию по сравнению с реляционными базами данных, а также обеспечивают возможность использования многих полезных функций поиска, например, учитывают морфологию языка, осуществляют фасеточный поиск, работают со стоп-словами, обеспечивают выборочную индексацию и позволяют производить настройку формулы определения релевантности документов.
Ускоряем работу сайта при помощи кеширования на базе Memcached
Memcached — это хранилище «ключ => значение», использование которого очень эффективно для ускорения работы сайта или веб-приложения.
MongoDB — документо-ориентированная база данных (NoSQL)
MongoDB — это NoSQL хранилище данных, крайне удобное для хранения информации, которая не может быть нормально структурирована в рамках реляционных баз данных.
MySQL — система управления базами данных
MySQL — это реляционная система управления базами данных с открытым исходным кодом. В настоящее время эта СУБД одна из наиболее популярных в веб-приложениях — подавляющее большинство CMS использует именно MySQL (часто только её, без альтернатив), а почти все веб-фреймворки поддерживают MySQL уже на уровне базовой конфигурации (без дополнительных модулей).

Тематические технологии:

PostgreSQL — объектно-реляционная СУБД
Поисковая система ElasticSearch
СУБД Redis
Колоночная СУБД Scylla
Колоночная СУБД Cassandra
Веб-сервер NGINX
Docker
CEPH — распределенная система хранения