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



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



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



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



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



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



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



1️⃣ Пользователь вводит данные в форму на клиенте и нажимает кнопку “Отправить”.

2️⃣ Клиент формирует запрос на сервер и отправляет его через сеть.

Сервер получает запрос от клиента и обрабатывает его согласно бизнес-логике.

3️⃣ Сервер формирует запрос на базу данных и отправляет его через сеть или локально.

4️⃣ База данных получает запрос от сервера и выполняет его, возвращая результаты.

5️⃣ Сервер получает результаты от базы данных и формирует ответ на клиент.

6️⃣ Сервер отправляет ответ на клиент через сеть.

7️⃣ Клиент получает ответ от сервера и отображает его пользователю.



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



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



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



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



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



Клиент-серверная архитектура имеет много преимуществ перед другими архитектурами, например, файл-серверная, в которой все файлы хранятся на одном сервере и доступны для всех клиентов:



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

Упрощение разработки и поддержки кода, так как не нужно дублировать логику на каждом клиенте, а достаточно реализовать ее на сервере.

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



Однако клиент-серверная архитектура также имеет некоторые недостатки, такие как:

🔻 Зависимость от сети и доступности сервера, так как если сеть пропадет или сервер упадет, то пользователь не сможет работать с приложением.

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



📎 Материалы по теме

1. Клиент-серверная архитектура в картинках: статья на Хабре и видео

2. Клиент - серверная архитектура (Client-Server Architecture)

3. Клиент-серверная архитектура — JavaRush

4. Как работают веб-приложения

5. Грамотная клиент-серверная архитектура: как правильно проектировать и разрабатывать web API



#архитектура