Site icon 8HOST.COM

5 вариантов настройки сервера для обслуживания веб-приложения

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

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

1: Все на одном сервере

Вся среда находится на одном сервере. Подходит для простого веб-приложения, которое включает в себя веб-сервер, сервер приложений и сервер базы данных. Часто для этой настройки является стек LAMP – это Linux, Apache, MySQL и PHP на одном сервере.

Пользователь

Сервер
http://example.com/

Плюсы:

Минусы:

Читайте также: Установка стека LAMP в Ubuntu 16.04

2: Отдельный сервер баз данных

Систему управления базами данных (СУБД) можно отделить от остальной среды, чтобы исключить конфликт ресурсов между приложением и базой данных, а также повысить безопасность, ограничив доступ к серверу БД.

Такая настройка подходит для быстрого развертывания приложения, при котором между БД и приложением не будет возникать конфликтов за системные ресурсы.

Пользователь

Сервер приложения
http://example.com/

Сервер баз данных
(в частной сети)

Примечание: Здесь и далее красным выделены компоненты, которые находятся в частной сети.

Плюсы:

Минусы:

Читайте также: Перемещение базы данных MySQL на новый сервер

3: Балансировщик нагрузки, или обратный прокси-сервер

Балансировщик нагрузки повышает производительность и ошибкоустойчивость среды распределения рабочей нагрузки между несколькими серверами. Если один из серверов выходит из строя, другие серверы будут обрабатывать входящий трафик до тех пор, пока неисправный сервер не восстановится. Также балансировщик может обслуживать нескольких приложений через один и тот же домен и порт с помощью обратного прокси-сервера на уровне 7 (прикладной уровень).

Такая настройка подходит среде, которой необходимо горизонтальное масштабирование.

Пользователь

Балансировщик нагрузки

Серверы приложений
Сервер 1               Сервер 2
↓                   ↓
Сервер баз данных

Плюсы:

Минусы:

Читайте также:

4: HTTP-ускоритель (кэширующий обратный прокси-сервер)

HTTP-ускоритель (или HTTP-акселератор, кэширующий обратный прокси-сервер HTTP) позволяет снизить время обработки контента с помощью различных технологий. Главная технология, которую реализует HTTP-ускоритель – это кэширование ответов веб-сервера или сервера приложений.

Популярные HTTP-ускорители: Varnish, Squid, Nginx.

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

Пользователь

HTTP-ускоритель
http://example.com/

Сервер приложений
↓               ↓
Сервер баз данных

Плюсы:

Минусы:

Читайте также:

5: Репликация базы данных по типу «master-slave»

Одним из способов повышения производительности СУБД, которая выполняет множество операций чтения, является репликация данных по типу master-slave. Для репликации master-slave требуется один ведущий сервер (мастер) и один или несколько ведомых нод (slave). Все обновления отправляются на мастер-сервер, а операции чтения могут быть распределены между всеми нодами.

Такая настройка позволяет повысить производительность операций чтения.

Пользователь

Балансировщик нагрузки

Серверы приложений
Сервер 1             Сервер 2 
↑↓                   ↓
Master                 Slave
_________________
Репликация

Плюсы:

Минусы

Читайте также:

Пример: Комбинирование нескольких вариантов настройки веб-сервера

Вы можете использовать балансировку нагрузки для кэширующих серверов, а БД переместить в отдельную среду. Объединение этих методов позволяет извлечь преимущества каждого из них.

Предположим, что балансировщик нагрузки может распознавать статические запросы (изображения, css, javascript и т.д.) и отправлять их непосредственно на серверы кеширования, а другие запросы передавать серверам приложений.

Когда пользователь запрашивает динамический контент:

  1. Он отправляет запрос контента балансировщику (на http://example.com/).
  2. Балансировщик нагрузки отправляет запрос на бэкенд приложения.
  3. Бэкенд считывает запрашиваемый контент из базы данных и возвращает его балансировщику.
  4. Балансировщик нагрузки возвращает запрашиваемые данные пользователю

Когда пользователь запрашивает статический контент:

  1. Балансировщик обращается к серверу кэширования, чтобы узнать, не поступал ли запрос на этот контент ранее.
  2. Если запрос попадает в кэш, балансировщик извлекает контент и переходит к шагу 7. Если запроса нет в кэше, сервер кэширования передает запрос балансировщику.
  3. Балансировщик передает его серверу приложения на бэкенд.
  4. Бэкенд считывает данные из БД и возвращает их балансировщику.
  5. Балансировщик передает ответ кэширующему серверу.
  6. Он кэширует контент, а затем возвращает его балансировщику нагрузки.
  7. Балансировщик нагрузки возвращает запрашиваемые данные пользователю.

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

Заключение

Теперь вы знакомы с базовыми вариантами настройки веб-сервера для обслуживания приложений.