'
Научный журнал «Вестник науки»

Режим работы с 09:00 по 23:00

zhurnal@vestnik-nauki.com

Информационное письмо

  1. Главная
  2. Архив
  3. Вестник науки №1 (82) том 1
  4. Научная статья № 41

Просмотры  38 просмотров

Шкрябин Г.Д.

  


ПРИМЕНЕНИЕ ПАТТЕРНОВ CQRS И EVENT SOURCING В EVENT-DRIVEN АРХИТЕКТУРЕ: ОПЫТ РАЗРАБОТКИ ВЫСОКОНАГРУЖЕННЫХ СИСТЕМ *

  


Аннотация:
исследование в данной статье сосредоточено на применении архитектурных паттернов Command Query Responsibility Segregation и Event Sourcing в рамках Event-driven Architecture в области программной инженерии. Анализируется, как эти паттерны улучшают асинхронную обработку событий, повышая масштабируемость и надежность систем. Статья обсуждает преимущества разделения операций чтения и записи через CQRS и последовательное хранение событий в Event Sourcing, которая позволяет восстанавливать историческое состояние систем. Освещаются основные трудности, такие как сложность управления зависимостями и поддержание консистентности данных. В исследовании используется методология структурного моделирования и анализа инфографик, сравнительных таблиц и нагрузочных тестов для оценки производительности паттернов. Результаты подтверждают ощутимое улучшение устойчивости и адаптивности программных систем, особенно в высоконагруженных приложениях, таких как финансовые платформы и электронная торговля.   

Ключевые слова:
асинхронная обработка, масштабируемость, надежность систем, производительность приложений, архитектурные паттерны   


Введение.В современной сфере программной инженерии архитектура, ориентированная на события, занимает ведущее положение благодаря её возможности асинхронной обработки событий, улучшая масштабируемость и повышая надёжность систем. Такой подход дает возможность компонентам системы самостоятельно реагировать на любые изменения, делая Event-driven архитектуру (далее EDA) эффективной для приложений с необходимостью скоростной обработки данных, таких как платформы для финансовых операций или электронные торговые площадки. Поэтому изучение и разработка архитектурных паттернов, в том числе Command Query Responsibility Segregation (далее CQRS) и Event Sourcing, является перспективной и актуальной областью в области программной инженерии.CQRS повышает производительность и масштабируемость приложений, разделяя операции чтения и записи, а Event Sourcing усиливает этот механизм, позволяя восстановить состояние системы по хронологической последовательности событий. Вместе, эти паттерны создают продуктивные инструменты для разработки распределенных и надежных систем. Применение CQRS и Event Sourcing, несмотря на их возможности, связано с трудностями, включая сложность управления зависимостями, поддержание консистентности данных и обработку исключений в асинхронной среде.Цель данного исследования состоит в оценке применимости и результативности архитектурных паттернов CQRS и Event Sourcing в рамках EDA, а его задачи включают:1) исследование и категоризацию существующих методик реализации CQRS и Event Sourcing,2) оценку основных трудностей при их внедрении и использовании,3) создание предложений для повышения результативности данных паттернов.Литературный обзор подтверждает актуальность изучения EDA, CQRS и Event Sourcing, обилие источников, которая включает научные публикации, технические доклады и примеры из практики, предоставляет надежную базу для последующего исследования, цель которого – усилить результативность и адаптивность современных программных архитектур.Материалы и методы.В настоящем исследовании применена архитектура Event-driven Architecture для изучения масштабируемости, асинхронности и механизмов управления состоянием в разрабатываемых системах, причем реализация и тестирование содержит несколько основных этапов:1. На начальной стадии осуществлялось структурное моделирование основных элементов EDA, которая содержит генераторы событий, обработчики событий, брокеры и потребители событий, при этом для визуализации архитектуры и связей между компонентами использовалась инфографика, отображающая число каждого типа элементов в системе.2. Введение методологии CQRS и принципов Event Sourcing обеспечило разделение процессов чтения и записи данных, а использование Event Sourcing позволило последовательно документировать все изменения состояния системы через события.3. В ходе разработки и тестирования применялись методики, базирующиеся на создании автономных тестов, которые воспроизводят функциональность EDA и CQRS в контролируемой среде, в том числе проверки на асинхронную обработку событий, масштабируемость компонентов и устойчивость системы к потенциальным неисправностям.4. Оценка эффективности применяемых методик проводилась посредством нагрузочных тестов, которые измеряли временные характеристики отклика системы, скорость обработки событий и умение системы настраиваться к увеличению объема обрабатываемых данных.Результаты.EDA — это подход к проектированию программного обеспечения. Основные элементы содержат генерацию, обнаружение и реакцию на события. Эти события отражают весомые изменения в состоянии системы или её внешних условиях. Главное преимущество заключается в том, что компоненты системы способны асинхронно реагировать на события. Это обеспечивает возможность масштабирования и поддержание работоспособности даже в нештатных ситуациях.В EDA, компоненты системы общаются посредством событий, которые позволяют им функционировать независимо друг от друга, снижая тем самым взаимозависимость элементов и повышая гибкость системы, причём события обрабатываются непосредственно в момент их возникновения. Этот механизм особенно ценен в приложениях, которые требуют быстрой обработки данных, таких как финансовые платформы или системы управления заказами в интернет-магазинах.В рамках EDA существуют разнообразные структуры, в том числе топологии брокера и посредника, где первая предполагает минимальную координацию, увеличивая масштабируемость и гибкость системы, тогда как последняя усиливает управление потоками событий, которая оказывается основополагающим для поддержания консистенции данных и управления исключениями.Маршрутизаторы и потребители событий выступают как фундаментальные элементы EDA, определяющие обработку и распределение событий между компонентами, при этом потребители событий, как отдельные элементы, способны к масштабированию независимо от других, обеспечивая тем самым возможность адаптации к возрастающей нагрузке без необходимости перестройки всей системы. Асинхронность, масштабируемость, надежность, быстродействие и способность к интеграции выделяют EDA как особенно привлекательный подход в условиях современного многозадачного и распределенного программного окружения [3].Далее представим инфографику «Компоненты EDA», которая представляет основные элементы Event-driven архитектуры, такие как генераторы, обработчики, брокеры и потребители событий, иллюстрируя их количество в системе (диаграмма 1).Диаграмма 1. Компоненты EDA (источник: составлено авторомна основе собственного исследования).CQRS – это шаблон проектирования, зарекомендовавший себя в архитектуре и создании программного обеспечения за отличную стратегию управления сложными приложениями путём разграничения операций чтения данных (запросов) и их изменения (команд), которая позволяет разрабатывать высокопроизводительные и масштабируемые системы, способные эффективно отвечать на возрастающие запросы современных приложений. Данный подход, укоренившийся на принципах Command-query Separation, введённых Бертраном Мейером, был дополнен и адаптирован Грегом Янгом для создания CQRS [8].Основной задачей CQRS является повышение масштабируемости и управляемости приложений путём отделения обязанностей между элементами, ответственными за обработку команд и запросов, при этом в архитектуре CQRS каждый из этих аспектов — команды и запросы — подлежит независимой оптимизации [9].Команды в CQRS задействованы для модификации состояния системы и часто содержат механизмы валидации, обеспечивающие соответствие всех выполненных команд бизнес-правилам до их активации, тогда как запросы нацелены на извлечение данных и настраиваются таким образом, чтобы обеспечивать быстрое и эффективное чтение. Такое разграничение приводит к формированию двух различных моделей — модели записи, управляющей состоянием системы, и модели чтения, предоставляющей данные в формате, наилучшим образом подходящем для пользователя или других систем, при этом между этими моделями возможна синхронизация через события, оповещающие о зафиксированных изменениях.Применение CQRS содействует высокой степени изоляции и специализации в компонентах системы, сокращая сложность управления зависимостями и повышая масштабируемость. Это делает его особенно полезным в таких сферах, как финансовые услуги, облачные технологии и системы управления заказами, где высокая производительность и расширяемость являются решающими параметрами. Поддержка CQRS обеспечивается реализациями на множестве языков программирования, включая C#, где разработчики применяют разнообразные шаблоны для эффективной обработки команд и запросов [5].Далее продемонстрируем сравнительную таблицу «CQRS vs. CRUD», которая отображает различия между подходами CQRS и CRUD по критериям производительности, масштабируемости и управления состоянием. Данная таблица помогает легко сравнить эти методики проектирования (таблица 1):Таблица 1. Сравнение CQRS и CRUD (источник: составлено автором на основе собственного исследования).Event Sourcing – «подход хранения данных, при котором вместо конечного результата хранится череда записей о событиях, происшедших с некоторой сущностью». Event Sourcing – это архитектурный паттерн, при котором все изменения в состоянии приложения фиксируются последовательно так, как они происходят. Такие записи не только служат основой для восстановления текущего состояния системы, но и создают аудит-лог событий, произошедших в системе, которые делают архитектуру особенно пригодной для масштабирования и адаптации в системах, уже управляемых событиями или тех, что могут быть к ней приспособлены. Паттерн не только обеспечивает детальный аудит, но и позволяет проводить анализ и предсказания на основе исторических данных.На диаграмме ниже продемонстрированы этапы обработки событий в паттерне Event Sourcing, начиная от генерации события до восстановления состояния системы (диаграмма 2):Диаграмма 2. Процесс Event Sourcing(источник: составлено автором на основе собственного исследования).Каждый элемент в регистрации Event Sourcing документирует полную информацию, необходимую для восстановления состояния системы на момент его возникновения, и становится неизменяемым после его фиксации. Такие системы часто интегрируют CQRS для разделения функций записи и чтения.Применение Event Sourcing оказывается особенно результативным в сферах, где критична точность хранения исторических данных, таких как финансовые услуги или электронная торговля, хотя, несмотря на свои преимущества, внедрение этого подхода требует существенной переориентации разработческих методик по сравнению с традиционными CRUD-системами.Следует учитывать, что в крупных системах, использующих Event Sourcing, появляются трудности с поддержанием консистентности данных и интеграцией с внешними системами, требующие дополнительных усилий для обеспечения актуальности данных в условиях асинхронной работы и корректировки ошибок в процессе исполнения команд.Применение CQRS вместе с Event Sourcing в архитектуре, ориентированной на события, предоставляет существенные преимущества за счёт их способности управлять сложной бизнес-логикой и обеспечивать масштабируемость систем. CQRS эффективно разделяет функционал на команды, отвечающие за изменение состояния, и запросы, предназначенные для чтения данных [1].Event Sourcing укрепляет архитектуру, регистрируя каждое изменение в состоянии приложения в виде последовательности событий. Такая методика облегчает интеграцию новых функциональностей и адаптацию бизнес-логики без изменения существующего кода. Особенность CQRS заключается в создании гибких и масштабируемых систем, способных поддерживать разные уровни согласованности данных. Event Sourcing расширяет возможности системы за счет временных запросов, позволяют отслеживать динамику изменений и содействуют глубокому анализу данных, в то время как проекции, применяемые совместно с Event Sourcing, создают оптимизированные для чтения модели, улучшают производительность запросов, а обработчики событий поддерживают требуемую консистентность между операциями записи и чтения [10].Паттерны CQRS и Event Sourcing усиливают разделение обязанностей и повышают читаемость кода в событийно-ориентированных системах, обеспечивая важные выгоды в отношении масштабируемости и адаптивности архитектуры. CQRS дифференцирует операции на команды, вносящие изменения в состояние системы (запись), и запросы, осуществляющие только чтение. Event Sourcing, в свою очередь, фиксирует все модификации состояния приложения в виде хронологической последовательности событий, облегчая восстановление прошлых состояний системы и повышая её надежность, поскольку текущее состояние может быть воссоздано путем последовательного воспроизведения зарегистрированных событий [2].Внедрение паттернов, таких как CQRS и Event Sourcing, привносит определенные сложности в проекты. Это требует от разработчиков: пересмотра традиционных методик проектирования и управления состояниями приложений, создания отдельных обработчиков для команд и событий. Последнее усложняет код и увеличивает необходимость усилий для поддержания согласованности данных между моделями чтения и записи, особенно это актуально для распределенных систем, однако такие системы повышают производительность запросов благодаря денормализации данных и специализации схем для определенных операций чтения и записи.Примеры использования CQRS и Event Sourcing находят применение в системах с интенсивными нагрузками, где особенно важно эффективно распределять операции чтения и записи, в системах с сложной бизнес-логикой, требующих подробного аудита изменений, или в тех случаях, когда необходимо быстро восстановить функциональность после технических сбоев.Техническое внедрение паттернов CQRS и Event Sourcing задействует ряд основных компонентов, каждый из которых вносит свой вклад в архитектуру системы. В частности, CQRS разделяет операции изменения состояния (команды) и операции возврата данных (запросы) на отдельные независимые модели. Это дает возможность настроить и оптимизировать каждую модель для выполнения своих специфических задач, тем самым улучшая производительность и возможности масштабирования системы. В контексте Event Sourcing любое изменение в состоянии системы регистрируется как серия событий, которые последовательно записываются в специализированное хранилище событий (event store). Все события должны быть атомарными и постоянными [7].Команды обрабатываются через специализированные обработчики (command handlers), которые принимают, валидируют команды и запускают события, влекущие изменения в состоянии системы, а затем эти события регистрируются в хранилище событий. Демонстрации внедрения показывают, как команды и события обрабатываются и сохраняются в разнообразных программных средах, которые содержат Go, Java, а также .NET Core. Чтение данных происходит через проекции (projections), которые формируются на базе событий и настроены для обеспечения быстрой реакции на запросы, причем проекции бывают сконфигурированы множеством методов, соответственно требованиям приложения для чтения данных. Одними из главных проблем для разработчиков при внедрении CQRS и Event Sourcing являются управление версиями событий, масштабирование хранилища событий, обеспечение консистентности данных между командными и запросными моделями.Внедрение CQRS и Event Sourcing в архитектуру, ориентированную на события, в комбинации с современными базами данных и микросервисами, предоставляет весомые выгоды для управления сложными системами, повышения производительности и гарантии консистентности данных. CQRS и Event Sourcing формируют эффективную основу для взаимодействия с микросервисами, позволяя каждому из них фокусироваться на специфичных сегментах бизнес-логики. События, зафиксированные как неизменяемые записи, упорядочиваются для обеспечения возможности восстановления состояния системы в любой точке времени и гарантии полного аудита всех изменений.Одним из весомых преимуществ данного метода является улучшение производительности системы благодаря возможности отдельного масштабирования операций чтения и записи, при этом проекции данных можно настроить для оптимизации под конкретные запросы. Также следует выделить, что Event Sourcing и CQRS применяются с различными видами баз данных, которые содержат реляционные и NoSQL-решения [6].Внедрение Event Sourcing требует тщательного проектирования событий и увеличивает сложность системы, особенно при взаимодействии с распределёнными транзакциями и выполнении запросов, которые содержат основные операции соединения данных. Хотя использование CQRS и Event Sourcing приносит много преимуществ, это также добавляет сложности в архитектуру системы, в том числе необходимость управления версиями событий, создание снимков состояния для ускорения обработки данных и поддержание конечной консистентности между моделями команд и запросов [4].Внедрение CQRS и Event Sourcing в архитектуру, ориентированную на события, влечет за технические и концептуальные трудности, а также вовлекает потенциальные риски:1. Применение Event Sourcing требует, чтобы каждое изменение в системе было зафиксировано как событие. Каждое событие представляет собой набор изменений в данных (например, AddedItemToOrder). Данный факт усложняет моделирование бизнес-логики и требует от разработчиков углубленного понимания доменной области.2. CQRS вводит разделение между командами, изменяющими состояние, и запросами, читающими состояние. Команды, изменяющие состояние системы, обрабатываются write-частью, запросы, не изменяющие состояние, обращаются к read-части.3. Асинхронная обработка событий может вызвать задержки между выполнением команд и обновлением состояния в проекциях, создавая трудности в поддержании согласованности данных.Потенциальные риски:1. Несмотря на то, что теоретически возможность независимого масштабирования команд и запросов обеспечивает улучшение производительности, на практике потребуется колоссальная работа по оптимизации и адаптации инфраструктуры для достижения желаемых результатов.2. С течением времени изменения в бизнес-требованиях влекут за собой необходимость модификации структуры событий, при этом управление версиями событий и миграция уже существующих данных оказываются сложными и требовательными к ресурсам задачами.3. Внедрение архитектурных паттернов требует продвинутых знаний и опыта в области программирования и проектирования систем.Оптимизация производительности и управление исключениями в системах, применяющих CQRS и Event Sourcing, требуют обобщенного взгляда и глубокого понимания данных паттернов. Важнейшим элементом здесь является разделение функций чтения и записи, улучшая этим общую производительность, так как операции чтения и записи могут масштабироваться и адаптироваться к разнообразным требованиям нагрузки независимо друг от друга. Event Sourcing вносит дополнительную сложность, поскольку все модификации в системе зафиксированы как события, используемые затем для реконструкции состояний системы. Производительность системы при этом становится зависимой от скорости обработки событий и способности быстро реконструировать прошлые состояния из хронологической истории изменений.Для улучшения эффективности процесса можно применять разнообразные техники, в том числе асинхронную обработку команд и запросов. Рациональное использование кэширования проекций и создание снимков состояния могут существенно уменьшить время доступа к информации.Необходимо особо сосредоточиться на обработке исключений, поскольку в асинхронных системах требуется адекватно реагировать на ошибки и исключения, дабы предотвратить продолжительные перебои или несоответствие данных. Для этого могут использоваться механизмы компенсации и восстановления предыдущего состояния через дополнительные события отката. Основным элементом также является мониторинг и логирование всех действий, при этом использование специализированных инструментов для слежения за состоянием и производительностью распределенных систем может заметно облегчить их поддержку и дальнейшее развитие.Обсуждение.Исследование выявило и проанализировало данные, подтверждающие преимущества использования архитектурной стратегии Event-driven Architecture для разработки асинхронных, масштабируемых и ошибкоустойчивых систем. Были выделены следующие основные результаты:1. Инфографика «Компоненты EDA» (диаграмма 1) наглядно показывает распределение основных элементов такой архитектуры как генераторы, обработчики, брокеры и потребители событий, иллюстрируя снижение зависимостей и увеличение адаптивности системы.2. Сравнительная таблица «CQRS vs. CRUD» (таблица 1) демонстрирует, что методика CRUD превосходит традиционную модель CQRS, улучшая производительность и масштабируемость.3. Диаграмма «Процесс Event Sourcing» (диаграмма 2) отображает процесс от момента генерации события до его закрепления и последующего восстановления состояния системы, выделяя точность и последовательность метода в хранении данных.Анализ результатов экспериментов указывает на то, что внедрение EDA и CQRS весомо улучшает устойчивость, масштабируемость и гибкость систем, что актуально при высоких нагрузках и строгих требованиях к скорости обработки данных, как это наблюдается в финансовых системах и системах управления заказами в электронной коммерции.Заключение.В заключении данного исследования можно сделать вывод, что архитектурный подход, ориентированный на события, совместно с паттернами Command Query Responsibility Segregation и Event Sourcing, обеспечивает разработку высокомасштабируемых и надежных систем, особенно актуальных для приложений с высоким уровнем асинхронной обработки данных, как, например, финансовые платформы или системы электронной коммерции.Применение CQRS позволяет разделить операции записи и чтения. Данное содействует повышению производительности и гибкости, в то время как Event Sourcing обеспечивает детальное хранение состояния системы.Однако внедрение данных паттернов требует учета трудностей, таких как сложность управления зависимостями, поддержание консистентности данных и адекватная обработка исключений в асинхронной среде. Это предполагает необходимость дополнительных усилий со стороны разработчиков.В рамках будущих исследований целесообразно сосредоточиться на оптимизации методов кэширования проекций, управлении версиями событий, а также на разработке стратегий улучшения производительности и повышения устойчивости систем, использующих CQRS и Event Sourcing в EDA.   


Полная версия статьи PDF

Номер журнала Вестник науки №1 (82) том 1

  


Ссылка для цитирования:

Шкрябин Г.Д. ПРИМЕНЕНИЕ ПАТТЕРНОВ CQRS И EVENT SOURCING В EVENT-DRIVEN АРХИТЕКТУРЕ: ОПЫТ РАЗРАБОТКИ ВЫСОКОНАГРУЖЕННЫХ СИСТЕМ // Вестник науки №1 (82) том 1. С. 280 - 295. 2025 г. ISSN 2712-8849 // Электронный ресурс: https://www.вестник-науки.рф/article/20583 (дата обращения: 10.02.2025 г.)


Альтернативная ссылка латинскими символами: vestnik-nauki.com/article/20583



Нашли грубую ошибку (плагиат, фальсифицированные данные или иные нарушения научно-издательской этики) ?
- напишите письмо в редакцию журнала: zhurnal@vestnik-nauki.com


Вестник науки СМИ ЭЛ № ФС 77 - 84401 © 2025.    16+




* В выпусках журнала могут упоминаться организации (Meta, Facebook, Instagram) в отношении которых судом принято вступившее в законную силу решение о ликвидации или запрете деятельности по основаниям, предусмотренным Федеральным законом от 25 июля 2002 года № 114-ФЗ 'О противодействии экстремистской деятельности' (далее - Федеральный закон 'О противодействии экстремистской деятельности'), или об организации, включенной в опубликованный единый федеральный список организаций, в том числе иностранных и международных организаций, признанных в соответствии с законодательством Российской Федерации террористическими, без указания на то, что соответствующее общественное объединение или иная организация ликвидированы или их деятельность запрещена.