Что такое архитектура веб-приложений?
Архитектура веб-приложения описывает расположение всех компонентов веб-приложения, а также акцентирует взаимодействие между различными компонентами приложения, системами промежуточного программного обеспечения сторонних производителей, веб-службами и базами данных. Так обеспечивается моментальный снимок взаимодействия между несколькими приложениями, работающими вместе для предоставления услуг конечным пользователям.
Разница между архитектурой ПО и дизайном ПО
Архитектура программного обеспечения включает все высокоуровневые компоненты системы и взаимодействие внутри них.
Дизайн программного обеспечения — это проектирование на уровне кода, направленное на распределение бизнес-логики приложения по различным модулям со своими специфическими целями. Он помогает в построении бизнес-логики приложения и управлении ею.
Схема архитектуры веб-приложения
Рассмотрим основные понятия в данной схеме.
Юзер-агенты
Пользовательские агенты (юзер-агенты) — это в первую очередь инструменты, которые помогают пользователям взаимодействовать с сервером. Пользователь преимущественно взаимодействует с сервером через веб-браузеры — 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).
Упомянутые три процесса:
- Извлечение. Извлечение данных из нескольких источников.
- Преобразование. Преобразование данных, включая очистку, разделение и категоризацию.
- Загрузка. Загрузка данных в хранилище.
Модели компонентов веб-приложений
Существует всего три модели компонентов веб-приложения. Это тесно связано с количеством служб и баз данных, используемых для веб-приложения. Вот они:
- Один веб-Сервер, одна база данных;
- Несколько веб-серверов, одна база данных;
- Несколько веб-серверов, несколько баз данных;
- Сервисы приложений;
Три так называемые монолитные модели таковы благодаря жесткой и стабильной природе их сервера. Напротив, сервисы приложений (микросервисы и бессерверные), как правило, гибкие, поскольку они упрощают обновление и масштабирование. Применение этой модели позволяет разделить веб-серверы на более мелкие части: сервисы в микросервисах и функции в бессерверных. Таким образом, становится проще независимо изменять и масштабировать любую из этих составляющих.
Лучшие практики в области архитектуры веб-приложений
Основные критерии построения надежной архитектуры приложения:
- Эффективность;
- Гибкость;
- Многоразовость;
- Легкость в тестировании;
- Последовательность и успешность в решении задач;
- Хорошо структурированный и понятный код;
- Масштабируемость в процессе разработки;
- Быстрое время отклика;
- Отсутствие падений;
- Нет единой точки отказа;
- Простота;
- Опора на опробованные стандарты безопасности.
Полезные материалы:
Читайте также:
- 8 советов работы с JavaScript, которые повысят ценность вашего кода
- 5 инструментов Chrome DevTools, упрощающих разработку
- У меня появилась идея для приложения, но…я не разработчик
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи: Viplove Prakash, “Web Application Architecture”