Перейти к основному содержимому

Как работает клиент-серверная архитектура

Клиент-серверная архитектура

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

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

Клиент

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

Сервер

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

База данных

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

Пример работы клиент-серверной архитектуры

  1. Пользователь вводит данные в форму на клиенте и нажимает кнопку “Отправить”.
  2. Клиент формирует запрос на сервер и отправляет его через сеть.
  3. Сервер получает запрос от клиента и обрабатывает его согласно бизнес-логике.
  4. Сервер формирует запрос на базу данных и отправляет его через сеть или локально.
  5. База данных получает запрос от сервера и выполняет его, возвращая результаты.
  6. Сервер получает результаты от базы данных и формирует ответ на клиент.
  7. Сервер отправляет ответ на клиент через сеть.
  8. Клиент получает ответ от сервера и отображает его пользователю.

Виды клиент-серверной архитектуры

  • Двухзвенная — это архитектура, в которой есть только два слоя: клиентский и серверный. К двухуровневой архитектуре «клиент-сервер» следует относить такую, в которой прикладные программы сосредоточены на сервере приложений, например, на сервере CRM, а в рабочих станциях находятся программы-клиенты, которые предоставляют для пользователей интерфейс для работы с приложениями на общем сервере.

  • Трехзвенная — сервер баз данных, файловый сервер и другие представляют собой отдельный уровень, результаты работы которого использует сервер приложений. Логика данных и бизнес-логика находятся в сервере приложений.

  • Многозвенная — больше трех слоев, которые могут выполнять разные функции, такие как презентация, бизнес-логика, интеграция, хранение и т.д. Клиент обращается к одному или нескольким серверам за услугами, а серверы обращаются к другим серверам или базам данных за данными или услугами.

Преимущества и недостатки клиент-серверной архитектуры

Преимущества

  • Экономия ресурсов и денег. Масштабировать систему легко, добавляя или удаляя клиентов и серверов по мере необходимости.
  • Упрощение разработки и поддержки кода. Не нужно дублировать логику на каждом клиенте, достаточно реализовать её на сервере.
  • Обеспечение безопасности и конфиденциальности данных. Пользователь не имеет прямого доступа к базе данных и другим частям приложения, только к своему интерфейсу.

Недостатки

  • Зависимость от сети и доступности сервера. Если сеть пропадет или сервер упадет, пользователь не сможет работать с приложением.
  • Сложность обеспечения отказоустойчивости. Если нагрузка на приложение возрастет или произойдет сбой на одном из серверов, нужно предусмотреть механизмы балансировки и резервирования.

Подборка материалов по теме

  1. Клиент-серверная архитектура в картинках: статья на Хабре и видео
  2. Клиент - серверная архитектура (Client-Server Architecture)
  3. Клиент-серверная архитектура — JavaRush
  4. Как работают веб-приложения
  5. Грамотная клиент-серверная архитектура: как правильно проектировать и разрабатывать web API