Заявка на услуги DST
Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.
Высокопроизводительное адаптивное веб-приложение из-за его повсеместных нефункциональных требований создает проблемы при проектировании с точки зрения проектирования производительности.
Появление множества асинхронных и событийно-ориентированных технологий повлияло на смену парадигмы в традиционной трехуровневой веб-архитектуре, внося изменения на каждый уровень архитектуры. Веб-разработка внешнего интерфейса поддерживается 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 настроен на низкую задержку, высокую пропускную способность и производительность.
Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.
Ижевск, ул. Воткинское шоссе, д. 170 Е, Технопарк Нобель, офис 1117
Задать вопрос по почте