Проектирование высокопроизводительного адаптивного веб-приложения с помощью сервисов AWS

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

Появление множества асинхронных и событийно-ориентированных технологий повлияло на смену парадигмы в традиционной трехуровневой веб-архитектуре, внося изменения на каждый уровень архитектуры. Веб-разработка внешнего интерфейса поддерживается React JS , Micro Frontend jQuery и т. д. Уникальные требования к дифференциации пользовательского опыта в веб-приложении требуют значительных архитектурных изменений на уровне контроллера, бизнеса и серверной части и, что наиболее важно, требуют управляемого событиями и асинхронный подход. В современных приложениях глобального пользовательского опыта, обычно используемых службой регистрации или онлайн-приложениями для клиентов, эти архитектурные изменения встречаются повсеместно. В этой статье представлены стратегические рекомендации по принятию архитектурных решений по выбору сервисов AWS и дальнейшей точной настройке производительности таких быстро реагирующих и производительных веб-приложений на основе некоторых реальных и практических разработок и опыта развертывания решений промышленного масштаба.

Подход к решению

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

Высокая пропускная способность

Низкая задержка

Беспрепятственный доступ к данным

Глобальное развертывание

Эффективность затрат

Бессерверный

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

Шаблон архитектуры для ключевых решений по сервисам AWS

- Используйте Amazon CloudFront с Amazon S3 для размещения веб-приложения.

- Используйте AWS AppSync для создания API приложений.

- Используйте AWS MSK для получения различных событий из приложений-источников событий.

Обзор архитектуры:

В архитектурной структуре для построения бизнес-возможностей используется микросервис, управляемый событиями. Этот микросервис подписывается на события в теме Kafka и впоследствии предоставляет их внешним каналам через WebSocket с использованием модели публикации/подписки, реализуемой с помощью AWS AppSync.

Архитектура включает в себя управляемые событиями микросервисы, реализованные с использованием загрузки Java Spring, и API Kafka Stream, развернутый как контейнер в AWS Red Hat OpenShift (ROSA). Микросервис, управляемый событиями, интегрирован с AWS AppSync.

Ключевые архитектурные компоненты

Сервис потоковой передачи данных AWS:

Amazon Managed Streaming для Apache Kafka (Amazon MSK) — это сервис потоковой передачи данных AWS, предназначенный для управления инфраструктурой и операциями Apache Kafka. Amazon MSK превосходно справляется с эксплуатацией, обслуживанием и масштабированием кластеров Apache Kafka, предлагая надежные функции безопасности и встроенную интеграцию с AWS, которая ускоряет разработку приложений потоковой передачи данных. Ключевые компоненты Amazon MSK включают узлы-брокеры, узлы Zookeeper, производители, потребители, создатели тем (плоскость данных Kafka) и операции с кластерами через консоль управления AWS, интерфейс командной строки AWS и API-интерфейсы SDK.

Для разработки приложений в стиле микросервисов мы рассмотрели три варианта Kafka:

1. API производителя и потребителя

Он обеспечивает простой способ получения сообщений из тем Kafka.

2. API Kafka Streams (рекомендуется)

API Kafka Streams идеально подходит для обработки потоков данных в реальном времени. Этот API позволяет преобразовывать, агрегировать и выполнять другие операции с потоками данных, получая результаты для новых тем Kafka. Он обычно используется для создания приложений и микросервисов потоковой обработки, доступных через библиотеку Java. Примечательные особенности включают в себя способность создавать высокомасштабируемые, эластичные, отказоустойчивые и распределенные приложения для критически важных случаев использования в режиме реального времени. API использует ключевые концепции обработки потоков, такие как эффективное управление состоянием приложения, быстрые и действенные агрегации и соединения, а также правильную обработку различий во времени события и времени обработки.

3. Spring Cloud Stream 

Spring Cloud Stream построен на основе Spring Boot и интегрируется с Apache Kafka, обеспечивая бесперебойную связь между микросервисами посредством обмена сообщениями. Spring Cloud Stream предоставляет такие функции, как «Binder», для создания управляемых событиями микросервисов в среде Spring Boot. Кроме того, Spring Cloud Stream обеспечивает автоматическую сериализацию и десериализацию сообщений на основе типов контента, упрощая обработку сообщений разных форматов.

API подключения:

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

Хранение данных Kafka Streams:

Хотя API Kafka Streams эффективно управляет состоянием, мы рекомендуем использовать сервисы управляемого хранилища AWS для хранения данных. Эти сервисы обеспечивают высокую доступность, встроенную отказоустойчивость и масштабируемость.

Пользовательский интерфейс приложения микросервиса и агента :

Микросервис подписан на тему Kafka. Он принимает желаемое сообщение из темы Kafka, применяет бизнес-логику и использует HTTP-клиенты для подключения к конечной точке GraphQL (https://) для вызова API-интерфейсов мутации, в то... с DynamoDB достигается с помощью преобразователей DynamoDB, что позволяет API-интерфейсам GraphQL хранить данные в существующих таблицах Amazon DynamoDB.

Синхронизация приложений AWS:

AWS AppSync — это полностью управляемый сервис, позволяющий развертывать бессерверные серверные части GraphQL в облаке AWS. Поддерживаемые типы запросов: запросы (для получения данных из API), мутации (для изменения данных через API) и подписки (долгоживущие соединения для потоковой передачи данных из API). Он автоматически масштабирует механизм выполнения API GraphQL в зависимости от объемов запросов, предлагая управляемые подписки GraphQL для обновления данных в реальном времени через Websockets. AppSync обеспечивает подписку в режиме реального времени и автономный доступ, синхронизируя обновления при повторном подключении устройств.

Ресурс AWS::AppSync::DataSource создает источники данных, к которым могут подключаться преобразователи в AWS AppSync, например Amazon DynamoDB.

Ключевые методы настройки производительности

Синхронизация приложений AWS

Проблема в преобразователе была выявлена после анализа журналов, созданных AWS AppSync: время доступа к данным значительно превышает ожидаемое, что влияет на общую производительность API.

JSON

{
  "requestID": "12352289",
  "query execution time": "500ms",
  "resolver": "GetUserData",
  "DataSource": "DynamoDB",
  "dataAccessTime": "980ms",
  "cachet": "false",
  "error": "false",
  "message": "Resolver 'GetUserData' experienced high execution time",
  "additional details": "The resolver 'GetUserData' is fetching data from DynamoDB and took 980ms, which is significantly higher than expected. This may impact the overall performance of the API.",
  "request": {
    "query": "query GetUser($userID: ID) { user(userID: $userID) { name email }"
  },
  "variables": {
    "userID": "99345"
  }
}

Для повышения производительности AWS AppSync были приняты следующие меры.

Советы от специалистов DST Global по улучшению производительности:

Стратегии кэширования. Внедряйте стратегии кэширования, включая кэширование в памяти и интеграцию с такими сервисами, как AWS DynamoDB или Amazon ElastiCache, чтобы снизить нагрузку на API GraphQL и сократить время отклика. AWS AppSync обеспечивает кэширование данных на стороне сервера, что повышает производительность и снижает задержку за счет хранения данных в высокоскоростном кэше в памяти.

Пакетирование и свертывание. Используйте встроенные функции пакетной обработки и отложенной обработки AWS AppSync, чтобы объединить несколько запросов и мутаций в один запрос, сокращая задержку.

Шаблон загрузчика данных. Реализуйте шаблон загрузчика данных для пакетной обработки и кэширования запросов к базе данных, снижая нагрузку на базу данных и увеличивая время ответа.

Регулирование и ограничение запросов. Настройте регулирование и ограничение запросов, чтобы предотвратить перегрузку API AWS AppSync, гарантируя справедливое использование и управление ресурсами.

Сжатие. AWS AppSync предлагает возможность сжимать ответы API, повышая скорость загрузки и скачивания полезного контента. Эта функция не только потенциально снижает нагрузку на ваши приложения, но также может снизить затраты на передачу данных.

Реализация подписки:

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

Случаи использования:

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

Если агент отсутствует более 5 минут, браузер отключается, а при повторном подключении инициируется синхронизация состояния Init.

Библиотека подписки:

Разработчики компании DST Global предлагают использовать клиентскую библиотеку Apollo WebSocket в пользовательском интерфейсе веб-приложения как для низкоуровневых, так и для высокоуровневых абстракций WebSocket.

Решение для оптимизации производительности AWS MSK:

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

Ведение журнала дельта-синхронизации AWS AppSync:

AWS AppSync поддерживает ведение журнала Delta Sync для мутаций, что позволяет записывать изменения в версионных источниках данных и оптимизировать инкрементальные обновления. Таблица Delta Sync используется для реализации Delta Sync, упрощая процесс синхронизации с помощью одного преобразователя и использования двух таблиц DynamoDB — Base и Delta — для разделения запросов синхронизации.

Примечание. Amplify DataStore был исключен из-за ограничений политики безопасности, налагаемых командой безопасности. Amplify DataStore предлагает модель программирования для работы с распределенными данными в автономном и онлайн-сценариях.

Ниже показан общий план ведения журналов AWS AppSync и Delta Sync.

Заключение

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

Проектирование высокопроизводительного адаптивного веб-приложения с помощью сервисов AWS
Получить консультацию у специалистов DST
Напишите нам прямо сейчас, наши специалисты расскажут об услугах и ответят на все ваши вопросы.
Комментарии
RSS
Вам может быть интересно
В этой статье разработчики компании DST Global расскажут про синхронные и асинхронные взаимодействия в облачных приложениях, изучайте варианты использования, проблемы и стратегические приложения при п...
В этой статье разработчиками компании DST Global рассматривается распределенное ...
В этой статье разработчики компании DST Global рас...
Откройте для себя эффективные стратегии плавного п...
Ориентируйтесь в развивающейся среде облачных вычи...
Бессерверная архитектура стала горячей темой в мир...
Amazon ECS упрощает развертывание контейнеров Dock...

Новые комментарии

Раньше не хотели внедрять себе CRM систему, после того как установили DST CRM просто вынесла мозг своим функционалом, тысяча кнопок, менеджеры DST по ...
Уже зарегистрировался на Эпсилоне, соц сеть быстро развивается, оно и понятно сейчас такое время когда советы психологов да и просто людей которые аде...
Как минимум Роман искусственный интеллект — это моделирование человеческого интеллекта в машинах, которые запрограммированы на то, чтобы мыслить и учи...
Хотелось бы узнать — что может сделать искусственный интеллект для CMS? И чем это поможет администраторам и для моего бизнеса в прикладном понятии

Заявка на услуги DST

Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.

Адрес

Россия, Ижевск, ул.Салютовская,
д.1, офис 17

8 495 1985800
Заказать звонок

Режим работы: Пн-Пт 10:00-19:00

info@dstglobal.ru

Задать вопрос по почте

Укажите ваше имя
Укажите ваше email
Укажите ваше телефон