Большие наборы объявлений и тяжёлые запросы требовали модели чтения, соответствующей способам доступа к данным.
02 / Как я это реализовал
Как я это реализовал
Я разделил быстрый обслуживающий слой на Rust, резервный Python-путь, кеш и поиск/чтение с транзакционным хранилищем. Балансировка и ограничение частоты сдерживали повторный трафик, а пакетная обработка и оптимизация запросов работали с тяжёлыми операциями над данными.
Поток системы
Управление трафиком
Быстрый путь чтения
Кеш и поиск
Транзакционные данные
Что это значит на практике
Архитектура и решения
01
Отдельный сервис и определённые пути данных
Каталог маркетплейса стал отдельным сервисом с собственной обслуживающей архитектурой. Rust отвечал за основной быстрый путь, рядом работал резервный Python-подход. Я отвечал и за архитектуру, и за реализацию, отделяя нагрузку каталога от более широкого commerce-приложения.
02
У кеша, поиска и транзакций разные задачи
Redis кешировал данные для повторных чтений, Elasticsearch обеспечивал модель поиска/чтения, а PostgreSQL сохранял транзакционные обязанности. Это разделяло получение данных каталога и хранение бизнес-состояния. Пакетные операции и оптимизация тяжёлых запросов дополняли это распределение.
03
Контроль повторного трафика на входе
Балансировка и ограничение частоты были частью дизайна сервиса. Клиентов с избыточными повторными запросами можно было замедлить до преобладания их трафика. Управление запросами, кеш и быстрый обслуживающий слой проектировались вместе, учитывая и поступление запросов, и способ чтения данных.
03 / Результат
Результат
Поиск и частые чтения получили собственный путь, а транзакционное хранение и бизнес-логика сохранили отдельные обязанности.