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

Все говорят о REST и микросервисах, но достаточно ли хорошо мы разбираемся в устройстве клиент-серверной архитектуры? Это ключевой аспект, без которого понимание и использование REST невозможно.
Клиент-серверная архитектура описывает, как взаимодействуют между собой клиент (в нашем случае фронтенд) и сервер (бэкенд).
Клиент
Клиент — это та часть приложения, с которой работает пользователь. Клиент может быть веб-приложением, открывающимся в браузере, или десктоп-приложением, установленным на компьютере. Клиент отвечает за отображение пользовательского интерфейса и отправку запросов на сервер.
Сервер
Сервер — это та часть приложения, которая обрабатывает запросы от клиента и возвращает ответы. Сервер может быть физическим или виртуальным. Сервер отвечает за выполнение бизнес-логики и доступ к базе данных.
База данных
База данных может быть расположена на том же устройстве, что и сервер (двухзвенная архитектура), или на отдельном (трёхзвенная архитектура). База данных отвечает за хранение, поиск и изменение данных по запросам от сервера.
Пример работы клиент-серверной архитектуры
- Пользователь вводит данные в форму на клиенте и нажимает кнопку “Отправить”.
- Клиент формирует запрос на сервер и отправляет его через сеть.
- Сервер получает запрос от клиента и обрабатывает его согласно бизнес-логике.
- Сервер формирует запрос на базу данных и отправляет его через сеть или локально.
- База данных получает запрос от сервера и выпол няет его, возвращая результаты.
- Сервер получает результаты от базы данных и формирует ответ на клиент.
- Сервер отправляет ответ на клиент через сеть.
- Клиент получает ответ от сервера и отображает его пользователю.
Виды клиент-серверной архитектуры
-
Двухзвенная — это архитектура, в которой есть только два слоя: клиентский и серверный. К двухуровневой архитектуре «клиент-сервер» следует относить такую, в которой прикладные программы сосредоточены на сервере приложений, например, на сервере CRM, а в рабочих станциях находятся программы-клиенты, которые предоставляют для пользователей интерфейс для работы с приложениями на общем сервере.
-
Трехзвенная — сервер баз данных, файловый сервер и другие представляют собой отдельный уровень, результаты работы которого использует сервер приложений. Логика данных и бизнес-логи ка находятся в сервере приложений.
-
Многозвенная — больше трех слоев, которые могут выполнять разные функции, такие как презентация, бизнес-логика, интеграция, хранение и т.д. Клиент обращается к одному или нескольким серверам за услугами, а серверы обращаются к другим серверам или базам данных за данными или услугами.
Преимущества и недостатки клиент-серверной архитектуры
Преимущества
- Экономия ресурсов и денег. Масштабировать систему легко, добавляя или удаляя клиентов и серверов по мере необходимости.
- Упрощение разработки и поддержки кода. Не нужно дублировать логику на каждом клиенте, достаточно реализовать её на сервере.
- Обеспечение безопасности и конфиденциальности данных. Пользователь не имеет прямого доступа к базе данных и другим частям приложения, только к своему интерфейсу.
Недостатки
- Зависимость от сети и доступности сервера. Если сеть пропадет или сервер упадет, пользователь не сможет работать с приложением.
- Сложность обеспечения отказоустойчивости. Если нагрузка на приложение возрастет или произойдет сбой на одном из серверов, нужно предусмотреть механизмы балансировки и резервирования.