Элементы архитектуры веб-приложений

Что такое архитектура веб-приложений?

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

Разница между архитектурой ПО и дизайном ПО

Архитектура программного обеспечения включает все высокоуровневые компоненты системы и взаимодействие внутри них.

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

Схема архитектуры веб-приложения

Рассмотрим основные понятия в данной схеме.

Юзер-агенты

Пользовательские агенты (юзер-агенты)  —  это в первую очередь инструменты, которые помогают пользователям взаимодействовать с сервером. Пользователь преимущественно взаимодействует с сервером через веб-браузеры  —  Google Chrome, Firefox, Microsoft Edge, Safari  —  или мобильные приложения на платформах Android и IOS. Агент отправляет запрос на сервер и получает ответ, который затем показывается пользователю.

DNS

Серверы доменных имен  —  это что-то вроде адресной книги для веб-сайтов. Всякий раз, когда пользователь отправляет запрос на веб-адрес с помощью браузера, браузер использует DNS, чтобы найти реальный адрес веб-сервера (IP-адрес). Браузеру необходимо выяснить, на каком сервере находится веб-сайт, чтобы он мог отправлять HTTP-запросы туда, куда нужно.

Балансировщик нагрузки

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

Виртуальная машина

В вычислительной технике виртуальная машина (VM)  —  это виртуализация/эмуляция компьютерной системы. Виртуальные машины основаны на компьютерных архитектурах и обеспечивают функциональность, аналогичную физическому компьютеру. Их реализация может включать специализированное аппаратное обеспечение, программное обеспечение или их комбинацию.

Веб-сервер

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

Базы данных

База данных предоставляет инструменты для организации, добавления, поиска, обновления, удаления и выполнения вычислений с данными. Как правило, существуют реляционные базы данных  —  MySQL, PostgreSQL, Microsoft SQL Server, Oracle Database, Microsoft Access и т.д., А также нереляционные БД  —  MongoDB, Dynamo DB и другие.

Служба кэширования

Служба кэширования обеспечивает хранение данных, что позволяет сохранять и искать данные. Кэширование дает возможность ссылаться на предыдущий результат, чтобы значительно ускорить вычисления. Кэши применяются на различных технологических уровнях, включая операционные системы, и в сетях, включая сети доставки контента (Content Delivery Network, CDN) и DNS, веб-приложения и базы данных.

На стороне клиента  —  Заголовки HTTP-кэша, браузеры;
DNS  —  DNS-серверы;
Web  —  заголовки HTTP-кэша, CDN, обратные прокси, веб-ускорители, хранилища ключей/значений;
Приложения  —  хранилища ключей/значений, локальные кэши;
Базы данных  —  кэш базы данных, буферы, хранилища данных ключей/значений.

Сеть доставки контента

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

Внешнее хранилище

Внешние хранилища используются для хранения ресурсов, включая изображения, видео, документы и другие большие файлы. Во многих случаях с этими файлами также выполняются операции. Пример — Youtube автоматически конвертирует видео, загруженные пользователями, в нескольких разрешениях. Facebook преобразует изображения и видео пользователей в формат, удобный для мобильных устройств. Поскольку хранение этих данных на локальном диске виртуальной машины дорогостояще и потребляет большие вычислительные ресурсы, они обычно хранятся во внешнем хранилище. Облачное хранилище  —  один из самых популярных вариантов.

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

Веб-службы

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

Веб-службы используют SOAP (Simple Object Access Protocol, Протокол простого доступа к объектам) для отправки XML-данных между приложениями. Данные отправляются по HTTP-запросу. Данные, которые отправляются из веб-службы в приложение, называются SOAP-сообщением. Сообщение SOAP  —  это не что иное, как XML-документ. Поскольку документ написан на языке XML, клиентское приложение, вызывающее веб-службу, может быть написано на любом языке программирования.

Существует два основных типа веб-сервисов:

  • Простой протокол доступа к объектам или веб-службы SOAP.
  • Передача репрезентативного состояния или веб-службы REST.

Хранилище данных

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

Два основных подхода к построению системы хранилища данных  — это извлечение, преобразование, загрузка (ETL) и извлечение, загрузка, преобразование (ELT).

Упомянутые три процесса:

  • Извлечение. Извлечение данных из нескольких источников.
  • Преобразование. Преобразование данных, включая очистку, разделение и категоризацию.
  • Загрузка. Загрузка данных в хранилище.

Модели компонентов веб-приложений

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

  • Один веб-Сервер, одна база данных;
  • Несколько веб-серверов, одна база данных;
  • Несколько веб-серверов, несколько баз данных;
  • Сервисы приложений;

Три так называемые монолитные модели таковы благодаря жесткой и стабильной природе их сервера. Напротив, сервисы приложений (микросервисы и бессерверные), как правило, гибкие, поскольку они упрощают обновление и масштабирование. Применение этой модели позволяет разделить веб-серверы на более мелкие части: сервисы в микросервисах и функции в бессерверных. Таким образом, становится проще независимо изменять и масштабировать любую из этих составляющих.

Лучшие практики в области архитектуры веб-приложений

Основные критерии построения надежной архитектуры приложения:

  • Эффективность;
  • Гибкость;
  • Многоразовость;
  • Легкость в тестировании;
  • Последовательность и успешность в решении задач;
  • Хорошо структурированный и понятный код;
  • Масштабируемость в процессе разработки;
  • Быстрое время отклика;
  • Отсутствие падений;
  • Нет единой точки отказа;
  • Простота;
  • Опора на опробованные стандарты безопасности.

Полезные материалы:

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи: Viplove Prakash, “Web Application Architecture”

Предыдущая статьяFlutter и SonarQube для статического анализа кода
Следующая статьяСоздание пользовательских уведомлений с помощью AWS WebSockets