Data-Oriented Design в бэкенде: как уплощение структур и SoA экономят сотни ядер CPU

Архитектура и масштабируемость

Бэкенд
Архитектурные паттерны
Оптимизация производительности
GO

Программный комитет ещё не принял решения по этому докладу

Целевая аудитория

Backend-инженеры, TechLead'ы и Системные архитекторы CPU-bound и Memory-bound компонентов (in-memory скоринг, рекомендательные движки, системы матчинга и высоконагруженные агрегаторы), желающие выжать максимум из железа и понять физику процессорного кэша без перехода на C/C++.

Тезисы

В бэкенд-разработке принято ставить во главу угла удобство поддержки кода и принципы Domain-Driven Design (DDD). Мы упаковываем бизнес-сущности в структуры и гибкие графы объектов. Для 95% задач это единственный правильный подход. Но когда система перешагивает порог в сотни тысяч RPS, изящный ООП-код начинает жестко воевать с физикой современного процессора.

На этом выступлении мы без эмоций разберем, почему классический подход Array of Structs (AoS) разрушает механическую симпатию (убивает L1/L2 кэши CPU) и заставляет процессор простаивать в ожидании данных из RAM, и как адаптация структур под архитектуру железа (Data-Oriented Design) позволяет кратно снизить утилизацию CPU.

О чем поговорим и что разберем:

Границы применимости: где DOD действительно необходим (in-memory скоринг, матчинг, агрегация), а где он станет избыточным оверхедом (I/O-bound сервисы).

AoS vs SoA на пальцах: почему обращение к одному полю структуры User вымывает кэш-линию L1 метаданными, и как переход к Structure of Arrays (SoA) обеспечивает 100% плотность данных.

Цена указателя и Pointer Chasing: как ссылки на объекты фрагментируют память и превращают работу процессора в постоянные остановочные такты (CPU Stalls).

Пакетная обработка и ECS: запуск микро-батчинга и принципов Entity-Component-System на бэкенде для обработки массивов данных за один проход CPU.

Контроль аллокаций: от проблем с деградацией sync.Pool до использования Bump-аллокаторов (Memory Arenas) под Request-Scoped данные.

Иван Синицын — технический лидер в Ozon Tech с более чем 8-летним опытом в IT. Он строил высоконагруженные системы, разрабатывал масштабируемые микросервисы для управления складскими процессами и создавал feature store для рекомендательной системы крупного ритейлера. Иван специализируется на Golang, оптимизации производительности, распределённых системах и эффективной обработке больших объёмов данных. Увлекается марафонами и садоводством.

Видео

Другие доклады секции

Архитектура и масштабируемость