Что такое архитектура
В этом уроке вы узнаете, что такое архитектура программного обеспечения, и познакомитесь с её типовой моделью — трёхзвенной архитектурой.
Команда Chatty решила показать макеты веб-приложения небольшой фокус-группе. Оказалось, что при регистрации многие пользователи не хотят оставлять свой номер телефона, потому что их раздражают звонки. К сообщениям в мессенджерах большинство участников фокус-группы относится лояльнее.
На дейли команда приняла решение добавить в личный кабинет новое поле — «Не звоните мне, пишите в мессенджерах», чтобы у пользователя была возможность сразу отказаться от общения по телефону.
Архитектуру программного обеспечения часто сравнивают с архитектурой зданий, но это не совсем верная параллель. Архитектура в сфере строительства — более широкое понятие, это наука и искусство строить, проектировать здания и сооружения. При проектировании здания архитектор думает о внешнем виде, об удобстве использования, о конструктивных материалах и о технологичности.
Архитектура ПО подразумевает фокус только на его структуре — из каких компонентов состоит приложение и как они взаимодействуют между собой. Разработкой архитектуры программного обеспечения занимается архитектор ПО. Если в команде нет архитектора, эту роль на себя может взять ведущий разработчик, реже — системный аналитик. Архитектуру приложения описывают в виде набора диаграмм и текстовых документов.
Приложение Chatty построено в трёхзвенной (или трёхуровневой) архитектуре. Так называют одну из типовых архитектурных моделей, которая состоит из трёх основных компонентов: клиента, сервера приложений и сервера баз данных.
- Клиент — предоставляет пользователям интерфейс для взаимодействия с приложением. Через этот интерфейс он принимает от пользователя команды и показывает ему данные, предоставленные сервером приложений. В веб-приложениях (о них мы поговорим позже) функции клиента выполняет веб-браузер.
- Сервер приложений — принимает команды от клиента и обрабатывает их. Если для ответа на запрос клиента необходимы данные, сервер приложений обращается к серверу баз данных. При обмене данными через сеть Интернет функции сервера приложений выполняет веб-сервер.
- Сервер баз данных (или сервер БД) — хранит данные приложения и управляет ими.
В трёхзвенной архитектуре клиент и сервер баз данных не могут взаимодействовать напрямую — им нужен сервер приложений.
Когда мы добавляем поле «Не звоните мне, пишите в мессенджерах», нам потребуется доработать компоненты всех трёх уровней:
- Сервер баз данных должен научиться хранить для каждого пользователя новое поле — признак «Не звонить».
- В форме регистрации нового пользователя должно быть добавлено новое поле-чекбокс «Не звонить», чтобы пользователь мог указать, что ему удобнее читать сообщения в мессенджере, а не принимать звонки. После того как пользователь заполнил форму регистрации, клиент отправляет серверу приложений запрос: вот данные нового пользователя, зарегистрируй его, пожалуйста. В состав направляемого запроса должно включаться значение чекбокса — выбрал пользователь «Не звонить» или нет. Также нужно изменить форму редактирования профиля пользователя, чтобы пользователь мог изменить решение о том, хочет ли он получать звонки, в любой момент после регистрации.
- Сервер приложений должен научиться проверять корректность значения поля (например, если пользователь указал номер домашнего телефона вместо мобильного, то нельзя выбрать «Не звоните мне, пишите в мессенджерах») и передавать его между клиентом и сервером баз данных.
Поэтому задача хоть и не сложная, но не тривиальная.
Помимо перечня компонентов, из которых состоит ПО, архитектура ПО определяет, какие компоненты могут взаимодействовать между собой, с какой целью, кто может быть инициатором взаимодействия.
Разберём, как это устроено, на примере Яндекс Практикума (да-да, у него тоже трёхзвенная архитектура). В ролях:
- Пользователь — это студент.
- Клиент — это веб-браузер.
- Сервер приложений — это веб-сервер Яндекс Практикум (расположен по адресу https://practicum.yandex.ru/).
- Сервер баз данных — это сервер баз данных Яндекс Практикум, где хранится содержимое уроков.
В конце предыдущего урока вы нажимаете на кнопку «К следующему уроку». Эта команда запускает обмен данными между компонентами приложения:
- Веб-браузер формирует запрос данных для следующего урока, направляет его веб-серверу.
- Веб-сервер проверяет, существует ли запрашиваемый урок, доступен ли он для пользователя (например, при оплате курса). Если урок пока недоступен, веб-сервер через клиент показывает пользователю ошибку.
- Если проверка прошла успешно, веб-сервер запрашивает у сервера БД данные об уроке.
- Сервер баз данных возвращает данные об уроке веб-серверу.
- Веб-сервер передаёт данные об уроке клиенту.
- Клиент отображает страницу нового урока для пользователя.
Трёхзвенная архитектура ПО — это не просто схема с тремя компонентами. Каждый её компонент делится на составные части — модули, пакеты, классы и прочие. Модули, в свою очередь, могут дробиться дальше — на более мелкие составляющие. Всё это — разные уровни детализации архитектуры.
Системный аналитик, как правило, работает с одним или двумя верхними уровнями детализации архитектуры ПО. Уровни пониже тесно связаны с деталями реализации программного кода, поэтому находятся в зоне ответственности архитектора ПО и разработчиков.
Разделить приложение на составные части можно по-разному. Можно делить, например, на компоненты (как выше). А можно по функциональному принципу — например, по функциональности для работы с учебными курсами, для работы с заказами и оплатой и так далее. Всё зависит от взгляда на архитектуру ПО.
Прочитайте утверждения и выберите, какие из них верно описывают функции и особенности сервера приложений в трёхзвенной архитектуре:
Сервер приложений отвечает за надёжность хранения данных — данные целы и находятся в безопасности.
Неверно
Так и есть, за надёжность хранения данных отвечает сервер баз данных, а не сервер приложений.
Один сервер приложений может поддерживать работу нескольких видов клиентов — например, обычного веб-сайта и его версии для слабовидящих.
Верно
Так и есть. Способ визуализации информации для пользователя — это забота клиента, а не сервера приложений. Сервер приложений предоставляет ту же самую информацию для всех пользователей, а клиент в зависимости от возможностей пользователя может показать её с повышенной контрастностью.
К одному серверу приложений могут подключаться несколько клиентов.
Верно
Всё верно. Яндекс Практикум один, а студентов много.
В случае проблем с сервером приложений клиенты могут напрямую подключиться к серверу баз данных, работа приложения не нарушится.
Неверно
Так и есть. Взаимодействие между клиентом и сервером баз данных — всегда только через сервер приложений.
Сервер приложений проверяет корректность запросов клиентов — правильно ли сформирован запрос и имеет ли пользователь право на получение данной информации.
Верно
Точно! Раз сервер приложений принимает и обрабатывает запросы от клиента, он же должен проверить их корректность.
Клиентом для сервера приложений всегда является веб-браузер. Сервер приложений и веб-сервер — это одно и то же.
Неверно
Да, клиентом может быть не только веб-браузер. Им может быть, например, мобильное приложение.