Тестирование веб-приложений
Клиент-серверная архитектура: схема, тонкий и толстый клиент
Клиент-серверная архитектура – это устройство системы, в котором одни программы (клиенты) запрашивают данные и услуги, а другие (серверы) их предоставляют. Клиент, чаще всего браузер, отправляет HTTP-запрос, сервер обрабатывает его, при необходимости обращается к базе данных и возвращает ответ. Схема из клиента и сервера называется двухуровневой, а когда к ним добавляется сервер базы данных, архитектура становится трёхуровневой.
- 2 или 3 уровня
- клиент и сервер или клиент, сервер и база данных
- HTTP
- протокол, по которому чаще всего общаются клиент и сервер
- Собеседование
- схему и примеры тонкого и толстого клиента спрашивают часто
Что такое клиент-серверная архитектура
Клиент-серверная архитектура распределяет работу в сети между поставщиками услуг, серверами, и их заказчиками, клиентами. И клиент, и сервер – это программы. Обычно они работают на разных компьютерах и обмениваются данными по сетевым протоколам, но могут располагаться и на одной машине.
Чаще всего клиент и сервер общаются по протоколу HTTP. Клиент отправляет запрос (HTTP request), сервер обрабатывает его и возвращает ответ (HTTP response). Самый привычный клиент – браузер: Chrome, Safari, Firefox или Opera. Адрес, введённый в адресную строку, уходит на сервер запросом, а страница на экране собирается из ответа.
Один сервер обслуживает запросы многих клиентов, поэтому серверную программу обычно ставят на отдельный мощный компьютер, часто вместе с другими серверными программами.
Двухуровневая и трёхуровневая схема
Если в схеме только клиент и сервер, архитектуру называют двухуровневой: сервер сам готовит ответ и отправляет его клиенту. Когда данные хранятся в отдельной базе, появляется третье звено, сервер базы данных, и архитектура становится трёхуровневой. На собеседовании такую схему часто просят нарисовать, поэтому разницу стоит помнить.
Тестировщику схема подсказывает, в каком звене искать дефект. Если сервер прислал верные данные, а на экране они искажены, ошибка на стороне клиента. Ответ с кодом 500 указывает на сервер, а пустой ответ там, где запись точно была, даёт повод проверить базу SQL-запросом. Запросы и ответы видны во вкладке Network инструментов разработчика браузера.
Мой пример – поиск в социальной сети. По шагам он проходит так.
1. Клиент отправляет запрос
Пользователь вводит имя в строку поиска, и браузер отправляет на сервер HTTP-запрос.
2. Сервер обращается к базе
Сам сервер списка пользователей не хранит и запрашивает его у сервера базы данных.
3. База отвечает серверу
Сервер базы данных возвращает найденные записи.
4. Сервер отвечает клиенту
Сервер собирает из записей ответ и отправляет его браузеру, а браузер рисует список на экране.
Плюсы и минусы модели
Сильные и слабые стороны модели следуют из того, что вычисления и данные собраны на сервере.
Плюс: код сервера не дублируется
Логика хранится в одном месте, и копировать её в каждую программу-клиент не нужно.
Плюс: клиенту хватает слабого компьютера
Основные вычисления выполняет сервер, поэтому требования к машине пользователя ниже.
Плюс: данные под защитой
Они хранятся на сервере, который обычно защищён лучше большинства клиентов. Там же проще настроить права, чтобы данные получали только клиенты с нужным доступом. Этим занимается системный администратор или DevOps-инженер.
Минус: сервер – единая точка отказа
Если сервер не работает, перестаёт работать вся система, сколько бы клиентов ни было исправно.
Минус: нужны специалист и дорогое оборудование
Сервер требует отдельного человека для поддержки, а серверное оборудование стоит дорого.
Тонкий и толстый клиент
Клиенты делят на тонкие и толстые. На собеседовании часто просят объяснить разницу и привести примеры, и нередко хватает самих примеров.
Тонкий клиент переносит всю или почти всю обработку данных на сервер. Бизнес-логика и вычисления находятся на сервере, а клиент отправляет запросы и показывает ответы. Пример – браузер, в котором открыто веб-приложение.
Толстый клиент сам выполняет основную работу, и сервер часто служит для него только хранилищем данных. Типичный пример – 1С:Бухгалтерия: учёт ведётся в программе на компьютере пользователя, а на сервер уходят данные, которые нужно сохранить в базе или достать из неё. К толстым клиентам относятся и онлайн-игры вроде "Танков": сама игра установлена у игрока, а на сервере хранится информация о пользователях.
От типа клиента зависит и набор проверок. Интернет-банк в браузере проверяют в разных браузерах и при разной ширине окна, а новая версия доходит до пользователя, стоит ему обновить страницу. У толстого клиента, например кассовой программы магазина, добавляются установка, обновление версии на каждом компьютере и обрыв связи: если программа умеет работать без сети, продажи должны сохраняться и уходить на сервер, когда связь вернётся.
Веб-сайт, веб-приложение и веб-сервис
Три термина звучат похоже, и о разнице между ними могут спросить на первом собеседовании. Отличаются они тем, что может делать пользователь и есть ли у системы экран для человека.
Веб-сайт
Связанные между собой веб-страницы с информацией: тексты, изображения, иногда музыка. Устроен просто, на основе HTML-разметки, и пользователь почти ничего не может на нём изменить, разве что заполнить форму подписки. Примеры – новостные и кулинарные сайты, прогноз погоды.
Веб-приложение
Интерактивная программа, созданная для работы через интернет: пользователь вводит, получает и изменяет данные, а приложение постоянно обменивается запросами с сервером. Обычно в нём есть вход по логину и паролю, сообщения и контент под интересы пользователя. Примеры – Gmail, YouTube, социальные сети. У многих веб-приложений информационного содержания почти нет: онлайн-переводчики, мессенджеры, конвертеры файлов и валют нужны, чтобы выполнить задачу.
Веб-сервис
Программный интерфейс (API) на сервере, который отдаёт данные клиенту по HTTP через стандартизированный обмен сообщениями. Через веб-сервисы программы общаются между собой, поэтому я связываю их с интеграционным уровнем тестирования.
SOAP и REST
Веб-сервисы чаще всего строят по протоколу SOAP или в архитектурном стиле REST. SOAP строго стандартизирован и передаёт сообщения в XML, они получаются объёмнее. REST гибче, данные в нём чаще всего передают в JSON, и большинство современных сервисов выбирают его.
Пример: сервис расчёта доставки
Интернет-магазин считает стоимость доставки через отдельный веб-сервис: передаёт город и вес заказа и получает цену и срок. Тестировщик проверяет этот сервис в Postman ещё до того, как готова страница оформления заказа: обычный город, город без доставки, нулевой и слишком большой вес. Ошибки расчёта находятся раньше, а на странице потом проверяют, верно ли она показывает ответ.
Видеоурок, шпаргалки и задания
Клиент-серверную архитектуру я разбираю в одиннадцатом уроке курса "Тестировщик с нуля" на YouTube, с которого в курсе начинается тестирование веб-приложений. В бесплатном базовом курсе по тестированию этой теме посвящён урок "Клиент-серверная архитектура", и после теории в нём идут задания.
Шпаргалка по архитектуре приложения продолжает тему: трёхуровневая схема, монолит и микросервисы, балансировщики нагрузки и очереди сообщений, а к ним то, что меняется в работе тестировщика. Шпаргалка о сети показывает, что происходит с запросом между нажатием Enter в адресной строке и ответом сервера.
Курсы по теме
Вопросы и ответы
Что такое клиент-серверная архитектура простыми словами?
Это устройство системы, в котором одна программа, клиент, просит данные или услугу, а другая, сервер, их предоставляет. Клиент, например браузер, отправляет HTTP-запрос, сервер его обрабатывает и возвращает ответ. Обычно клиент и сервер работают на разных компьютерах и общаются по сети.
Чем двухуровневая архитектура отличается от трёхуровневой?
В двухуровневой схеме два звена: клиент и сервер, который сам готовит ответ. В трёхуровневой добавляется сервер базы данных: сервер приложения запрашивает у него данные и только потом отвечает клиенту. Такую схему часто просят нарисовать на собеседовании.
Что такое тонкий и толстый клиент?
Тонкий клиент переносит обработку данных на сервер и в основном отправляет запросы и показывает ответы, как браузер. Толстый клиент выполняет основную работу сам, а сервер использует как хранилище данных. Примеры толстого клиента – 1С:Бухгалтерия и онлайн-игры.
Чем веб-сайт отличается от веб-приложения?
Веб-сайт в основном показывает информацию: новости, рецепты, прогноз погоды, и пользователь почти ничего на нём не меняет. Веб-приложение интерактивно: пользователь входит по логину и паролю, вводит и изменяет данные, а приложение постоянно обменивается запросами с сервером. Примеры – почта, видеохостинг, социальные сети.
Что такое веб-сервис?
Программный интерфейс (API) на сервере, через который программы обмениваются данными по HTTP. Экрана для человека у него нет, им пользуются другие приложения. Чаще всего веб-сервисы строят по протоколу SOAP с сообщениями в XML или в стиле REST, где данные чаще всего передают в JSON.
Могут ли клиент и сервер работать на одном компьютере?
Могут. Клиент и сервер – это программы, поэтому их можно запустить на одной машине, например при разработке. В рабочих системах сервер обычно стоит на отдельном мощном компьютере, потому что обслуживает много клиентов сразу.
Посмотреть программы курсов
Программа каждого курса открыта целиком: видны все модули, уроки и число шагов.
