Главная
АИ #8 (294)
Статьи журнала АИ #8 (294)
Подходы к обеспечению согласованности данных в высоконагруженных DDD-системах

Подходы к обеспечению согласованности данных в высоконагруженных DDD-системах

17 февраля 2026

Рубрика

Информационные технологии

Ключевые слова

предметно-ориентированное проектирование
DDD
блокировки
согласованность данных
высоконагруженные системы
версионирование
конкурентный доступ

Аннотация статьи

В статье рассматриваются подходы к обеспечению согласованности данных в высоконагруженных системах, построенных на принципах предметно-ориентированного проектирования (Domain-Driven Design, DDD). Описаны основные архитектурные уровни, характерные для DDD, а также ключевые механизмы управления конкурентным доступом к данным. Особое внимание уделено использованию блокировок и контроля версий, которые позволяют снизить риски коллизий и сохранить целостность бизнес-логики при параллельной работе множества пользователей и процессов. Приведены примеры реализации данных подходов на прикладном и инфраструктурном уровнях.

Текст статьи

Введение

Методология Domain-Driven Design (DDD) активно применяется при разработке и эволюции сложных информационных систем с высокой нагрузкой. Одной из ключевых проблем в подобных архитектурах является обеспечение согласованности данных и управление конкурентным доступом.

Системы, основанные на DDD, как правило, строятся по многоуровневой архитектуре, включающей:

  • Client Code – фреймворк, контроллеры внешнего API, представления;
  • Application Layer – внутренний API для работы с доменом;
  • Domain – вся бизнес-логика приложения, изолированная от остальных слоев;
  • Infrastructure – вспомогательный код для обеспечения работы слоев выше: постоянное хранение данных, очереди, интеграционные события.

Такое разделение позволяет концентрировать бизнес-правила в доменной области и выносить технические детали за её пределы.

Управление конкурентным доступом

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

  • одновременное изменение одного объекта несколькими пользователями или процессами;
  • модификация объекта в момент, когда другие операции полагаются на его состояние;
  • конкурентная обработка событий, влияющих на одно и то же агрегированное состояние.

Для минимизации подобных рисков применяется механизм блокировок (locks). Блокировка накладывается на сущность или группу связанных сущностей в момент выполнения критически важной операции. Таким образом предотвращается одновременное выполнение действий, способных нарушить согласованность данных.

Первым шагом является определение интерфейса для работы с блокировками на уровне домена:

image.png

Рис. 1

Реализация этого интерфейса располагается на уровне инфраструктуры. В одном из вариантов может использоваться механизм блокировок СУБД.

image.png

Рис. 2

Для целей модульного тестирования может использоваться Null-реализация:

image.png

Рис. 3

Далее создаётся сервис на уровне домена, определяющий правила блокировки сущностей:

image.png

Рис. 4

Здесь блокировка накладывается на сущность или её контейнер. Таймаут ожидания блокировки ограничен пятью секундами.

Следующим шагом является интеграция сервиса блокировок в прикладные команды. Для этого может использоваться декоратор команд:

image.png

Рис. 5

При необходимости декоратор можно использовать в других командах, добавив статический конструктор:

image.png

Рис. 6

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

Версионирование сущностей

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

Для решения этой проблемы применяется контроль версий. Каждая сущность получает версионный атрибут:

image.png

Рис. 7

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

В репозитории выполняется проверка версии при сохранении:

image.png

Рис. 8

Если версия в базе данных не совпадает с версией, в сущности, выбрасывается исключение. При успешной записи версия увеличивается.

Выводы

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

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

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

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

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

  1. Эванс Э. (2003). Проектирование на основе предметной области: преодоление сложности в самом сердце программного обеспечения. Эддисон-Уэсли.
  2. Vaughn V. (2016). Domain-Driven Design Distilled. Addison-Wesley Professional.
  3. Buenosvinos C., Soronellas C., Akbar K. (2017). Domain-Driven Design in PHP. Packt Publishing.

Поделиться

26

Мусатов А. О. Подходы к обеспечению согласованности данных в высоконагруженных DDD-системах // Актуальные исследования. 2026. №8 (294). URL: https://apni.ru/article/14472-podhody-k-obespecheniyu-soglasovannosti-dannyh-v-vysokonagruzhennyh-ddd-sistemah

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

Похожие статьи

Другие статьи из раздела «Информационные технологии»

Все статьи выпуска
Актуальные исследования

#9 (295)

Прием материалов

21 февраля - 27 февраля

осталось 7 дней

Размещение PDF-версии журнала

4 марта

Размещение электронной версии статьи

сразу после оплаты

Рассылка печатных экземпляров

11 марта