Как называется элемент архитектуры веб-приложения, который обрабатывает HTTP-запросы?

"Сервер!" - так и хочется ответить на этот кажущийся глупым вопрос. Но если бы всё было так просто, я бы его на спрашивал на седьмом году в веб-разработке.

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

  • База данных может быть на отдельном сервере
  • Баз данных может быть несколько, и каждая на своём сервере
  • Помимо "клиента" (которых, обычно сколь угодно много) и "сервера" (в свете первых двух пунктов уже довольно запутанного понятия), могут быть сторонние сервисы, такие логирование или аналитика, и у каждый свой сервер

Мне уже объяснили, что необходимо различать "сервер" как роль - источник и обработчик данных по отношению с клиенту, структуру которого клиент не обязан знать (концепция "чёрного ящика"); и как инфраструктуру этого самого чёрного ящика. Так вот, в этом вопросе меня больше интересует второе.

введите сюда описание изображения

Итак, как называется помеченный тремя вопросительными знаками элемент системы, который принимает HTTP-запросы от клиентов и делает их первичную обработку? Мы не можем это просто так назвать "сервером", потому что серверов может быть сколь угодно умного, и у каждого - своя роль (обработка запросов с клиентской стороны, хранение данных, хранение файлов и т. д.). Например, при создании видео-хостинга рекомендуют обеспечить как минимум два сервера, один из которых возьмёт на себя отдачу только видеофайлов.

Термин HTTP-сервер тоже не описывает однозначно этот элемент. Допустим, тот самый сервер, который принимает запросы от клиентов, обменивается данными с сервером стороннего сервиса типа аналитики. И по какому же протоколу осуществляется обмен данными? Скорее всего HTTP(S). На момент задавания этого вопроса я разбираюсь в базах данных поверхностно, но могу предположить, что обмен данными с БД, расположенными на отдельных серверах во всяком случае иногда осуществляется тоже по протоколу HTTP.

А вот под "бэкендом", наверное, понимают всё то, что находится по ту сторону от фронтенда - тот самый чёрный ящик, который обрабатывает HTTP запросы от клиентов, но структура которого может быть заранее неизвестна для разработчиков фронтенд части. Если так, то "бэкеед" тоже не будет ответом на свой вопрос.

Ещё хотелось бы указать на путаницу, которую создают, когда говорят "Serverless application". В реальности имеют ввиду, что серверный код не придётся писать самостоятельно, а предлагается готовый сервер с проработанной логикой со стороны владельцев сервиса (поправьте меня, если я неправ).

Очень хочется воспользоваться в введённым Java словом "сервлет", но на сколько я въехал в размытые канонические определения, скорее всего, этот термин означает не то, что я имею ввиду. Ещё этот элемент, будучи принимающим разные запросы с клиентской стороны, немного ассоциируется с концепцией шины из электроники.


Ответы (2 шт):

Автор решения: Dmitry

Все зависит от функционала данного звена в цепи. На мой взгляд - это чистый backend (программно-аппаратная часть сервиса). Здесь уместен вопрос из вашего взгляда: что находится по ту сторону от фронтенда? Некий API, который используют фронт, сервисы и база. Так почему это не backend? То есть некоторое програмное обеспечение, которое понимает запросы к API и это может быть как HTTP, HTTP(s), SQL, MQTT и еще весть знает что.

Про огранизацию back'a - это совершенно другой вопрос. Поскольку технологий и протоколов предостаточно, чтобы устроить холивар по этому поводу.

→ Ссылка
Автор решения: Давид Манжула

Похоже, что такие сервера называют front-серверами. То есть сервер, который является точкой входа запроса. Он обрабатывает HTTP-запрос и передает на внутренние серверы, которые уже можно назвать полноценным бекендом, на них реализована бизнес-логика.

Ссылка на источник, из которого я сделал такой вывод: FAQ по архитектуре и работе ВКонтакте

→ Ссылка