РАСПРЕДЕЛЕННАЯ ОТКАЗОУСТОЙЧИВАЯ АРХИТЕКТУРА СИСТЕМЫ WEB-ПРИЛОЖЕНИЯ ОТЗЫВОВ ПОЛЬЗОВАТЕЛЕЙ

Опубликовано в журнале: Научный журнал «Интернаука» № 41(264)
Рубрика журнала: 3. Информационные технологии
DOI статьи: 10.32743/26870142.2022.41.264.346697
Библиографическое описание
Невский А.А. РАСПРЕДЕЛЕННАЯ ОТКАЗОУСТОЙЧИВАЯ АРХИТЕКТУРА СИСТЕМЫ WEB-ПРИЛОЖЕНИЯ ОТЗЫВОВ ПОЛЬЗОВАТЕЛЕЙ // Интернаука: электрон. научн. журн. 2022. № 41(264). URL: https://internauka.org/journal/science/internauka/264 (дата обращения: 04.05.2024). DOI:10.32743/26870142.2022.41.264.346697

РАСПРЕДЕЛЕННАЯ ОТКАЗОУСТОЙЧИВАЯ АРХИТЕКТУРА СИСТЕМЫ WEB-ПРИЛОЖЕНИЯ ОТЗЫВОВ ПОЛЬЗОВАТЕЛЕЙ

Невский Алексей Александрович

ведущий инженер-программист, AWS Certified Architect, бакалавр, Белорусский государственный университет информатики и радиоэлектроники,

Республика Беларусь, гМинск

 

DISTRIBUTED RESILIENT ARCHITECTURE OF WEB-APPLICATION SYSTEM FOR USER’S REVIEWS

Aliaksei Neuski

Lead Software Engineer, AWS Certified Architect Bachelor's degree, Belarusian State University of Informatics and Radioelectronics,

Republic of Belarus, Minsk

 

АННОТАЦИЯ

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

ABSTRACT

This article presents the architecture of a web-application for user’s reviews of goods and describes the method of designing such a distributed and resilient system. The result includes a high-level architecture of components for such a system and the performance analysis. When designing modern systems, it is worth considering the possible load on the system, as well as the fault-tolerant layout of its individual components well in advance.

 

Ключевые слова: архитектура web-приложений; распределенная web-система; отказоустойчивая web-система; проектирование программного обеспечения; асинхронная обработка данных; очередь сообщений; хранилище данных; поток событий; кэш; документо-ориентированная база данных; репликация.

Keywords: web-application architecture; distributed web-system; fault-tolerant web-system; software design; asynchronous data processing; message queue; data store; event streaming; cache; document-oriented data base; replication.

 

Актуальность проблемы.

Сегодня миллионы пользователей каждый день совершают сотни тысяч покупок в сети Интернет. Количество представленных во всемирной сети товаров настолько велико, что сделать правильный выбор не всегда простая задача. Значительно упростить задачу выбора качественного товара призваны системы на основе отзывов покупателей. Имея в распоряжении такую систему, пользователи могут изучить отзывы других покупателей, на основе чего получить представление о плюсах и минусах товара, а также добавить свой отзыв о товаре, тем самым помочь другим пользователям принять взвешенное решение о покупке. Для владельца web-приложения такая система позволяет привлечь дополнительный траффик на сайт за счет повышения индексируемости и повышения доверия предлагаемых к продаже товаров на основе оценки, описания и отзывов других пользователей. При этом система должна продолжать работать нормально даже в случае проблем [1].

Описание предложенного решения.

Представим объекты проектируемой системы:

  • Товар (id, name, description)
  • Отзыв (id, text, user_id, item_id, rating, date)

Актором в проектируемой системы выступает непосредственно пользователь web-приложения или веб-сайта. Исходя из модели поведения пользователя на веб-сайте, основная предполагаемая нагрузка должна приходить на операции чтения данных, а не на операции записи данных, потому необходимо предусмотреть отдельный кластер базы-данных, который будет справляться с высокой нагрузкой чтения данных. Для хранения данных предлагается использовать MongoDB – документо-ориентированную систему управления базами данных [2], не требующую описания схемы таблиц, что позволит хранить отзывы о товарах в качестве документов без заранее жесткой схемы. Для повышения производительности приложения необходимо добавить уровень кэширования данных. В качестве решения кэширования данных предлагается использовать распределенный кэш данных на основе Redis [3]. Для повышения отзывчивости и отказоустойчивости, а также лучшего контроля производительности системы предлагается использовать механизм асинхронной коммуникации на основе очереди сообщений. В качестве реализации очереди сообщений будем использовать Apache Kafka [4] - распределенный программный брокер сообщений.

 

Рисунок 1. Высокоуровневая архитектура системы отзывов о товарах

 

Представим сервисы проектируемой системы:

  • API Gateway – Application Programming Interface
  • Review Service
  • Event Bus / Message Queue
  • Worker
  • Hot Product Service
  • Top Added Item based on MapReduce Jobs
  • Cache
  • Cache Updater
  • Audit Service

Пользователь отправляет запросы на веб-сайт через мобильный или десктопный клиент с помощью поддерживаемого API и HTTP CRUD методов таких как GET, CREATE, READ, UPDATE. Для контроля количества запросов от одного пользователя необходимо использовать Rate Limiter [5]. Для определения наиболее востребованных товаров на веб-сайте предлагается предусмотреть механизм отслеживания количества запросов на основе идентификатора продукта  item_id и отдельного сервиса Hot Product Service. Для повышения качества работы данного сервиса также предлагается использовать отдельные MapReduce Jobs, запускаемые ежедневно вне пиковых часов в отдельном порядке. В качестве асинхронной коммуникации между сервисами лучше использовать Event Bus, который позволит контролировать нагрузку на компоненты системы и выступать гарантом доставки сообщений между всеми сервисами. Несколько инстансов Worker могут читать сообщения из Event Bus и синхронизировать их между write-инстансами базы данных. Спроектированная таким образом система позволит сократить риски безопасности и отказа работы [6]. Чтобы повысить отказоустойчивость системы предлагается использовать механизм репликации баз данных, а также добавить несколько инстансов Review Service, чтобы в случае сбоя одного из них система могла продолжить принимать запросы от пользователей и с помощью брокера сообщений достигать согласованность системы спустя время, что придаст системе свойство Eventual consistency. Audit Service будет отвечать за хранение истории действий по изменению записей, а  Cache Updater позволит контролировать время жизни объектов в памяти на основе модели MRU (Most Recently Used) – наиболее часто используемых записей с определенным максимальным количеством и временем жизни TTL (Time to Live) таких записей в памяти системы.

Вывод.

Предложенная архитектура системы отзывов о товарах позволяет получить высокопроизводительную надежную отказоустойчивую распределенную систему с коэффициентом SLA (Service-Level Agreement) на уровне около 99.95%, а также на основе такой системы увеличить скорость работы и удовлетворенность пользователя от использования веб-сайта, повысить конверсию покупок товаров на веб-сайте и доходы владельца веб-сайта.

 

Список литературы:

  1. Высоконагруженные приложения. Программирование, масштабирование, поддержка. Мартин Клеппман. O’Reilly. СПб.: Питер, 2020. С.-27.
  2. MongoDB. Distributed database with flexible document data model. [Электронный ресурс]. Режим доступа: mongodb.com
  3. Redis. In-memory data store. [Электронный ресурс]. Режим доступа: redis.io
  4. Kafka. Open-source distributed event streaming platform. [Электронный ресурс]. Режим доступа: kafka.apache.org
  5. System Design Interview – An Insider's Guide: Volume 2. Alex Xu, Sahn Lam. March 2022. С.-51.
  6. Building Secure & Reliable Systems. Heather Adkins, Betsy Beyer, Paul Blankinship, Piotr Lewandowski, Ana Oprea & Adam Stubblefield. Published by O’Reilly Media, Inc. March 2020: First Edition. С.-11.