Проектирование высокопроизводительного адаптивного веб-приложения с помощью сервисов 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 исс...
Часть 1. Конфиденциальность и безопасность данных....
Kubernetes стал незаменимым для разработки совреме...
В этой статье разработчики компании DST Global рас...
В этой статье разработчики компании DST Global зна...

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

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

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

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

Адрес

Ижевск, ул. Воткинское шоссе, д. 170 Е, Технопарк Нобель, офис 1117

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

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

info@dstglobal.ru

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

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