Перейти к содержанию

E-02 · Реестр организационных ограничений#

Ведётся с: 2026-09-16 · форма — decisions/03-constraints-registry.md v1.0

Не используем#

Что Почему С какого ADR Условие пересмотра
Cassandra под ленты Нет в эксплуатации; выигрыш по стоимости хранения (диск против памяти) при 64 ГБ уходит в шум и не окупает квартал на освоение и второй операционный контур ADR-0001 · 2026-09-16 Объём лент вырос на порядок — при 640 ГБ разница снова решающая
Valkey Эквивалентен Redis по всем осям; Redis уже эксплуатируется, причины менять нет ADR-0001 · 2026-09-16 Изменились лицензионные условия Redis у нашего провайдера
Ленты в основной БД PostgreSQL 17 400 вставок/с пошли бы в базу, которая уже является узким местом чтения постов ADR-0001 · 2026-09-16 Материализация отменена или нагрузка на основную БД снята
Оставить границу web / posts как есть Связность изменений 68 % при здоровых 80 %; разрез частично идёт по техническим слоям; у users.last_seen два писателя ADR-0002 · 2026-09-16 Доля задач в одной границе поднялась выше 80 % без переноса линии
Выделить ленту третьим сервисом, не трогая границу web/posts (вариант A) Дешевле на два шага миграции, но хуже по трём осям; разовая экономия против постоянных издержек на каждой задаче ADR-0002 · 2026-09-16 Перенос графа подписок оказался невозможен по техническим причинам
Вычистка удалённого поста из всех лент Миллионы правок ради одного удаления; И2 закрывается фильтрацией при чтении ADR-0001 · 2026-09-16 Фильтрация при чтении стала дороже вычистки — то есть удалений стало сопоставимо с чтениями
Синхронная вставка в собственную ленту автора при публикации Выглядит как требование И1, но И1 — требование к пути чтения: подмешивание уже обязательно ради гибрида, автор в нём ещё один источник ADR-0003 · 2026-09-16 Подмешивание при чтении убрано — тогда И1 снова придётся закрывать на записи
Симметричная раздача без порога Один пост аккаунта с 10 млн подписчиков даёт 10 млн вставок; длинные раздачи встают поперёк обычных ADR-0003 · 2026-09-16 Тяжёлый хвост распределения подписок исчез
Отдельная дедупликация раздачи И3 закрывается структурой ленты: повторная вставка того же идентификатора не создаёт второго элемента ADR-0003 · 2026-09-16 Структура хранения ленты изменилась — тогда И3 остаётся без механизма и ломается молча
Состояние раздачи в памяти воркера Около сорока одновременных раздач в пике при автовыкате несколько раз в день: перезапуск всегда попадает в незавершённые ADR-0003 · 2026-09-16 Раздачи перестали идти непрерывно — длительность, умноженная на частоту, упала ниже единицы
Общий кэш под подмешивание постов крупных авторов 1,8 млн обращений/с превратили бы операцию ценой в наносекунду в сетевой участок; карта в 5 МБ помещается в каждый экземпляр целиком ADR-0004 · 2026-09-16 Число крупных авторов выросло на порядок — карта перестала быть маленькой
Короткий TTL для локальной карты вместо обновления по событию Тысячи обращений к источнику в секунду с каждого экземпляра ради данных, меняющихся 12 раз в секунду на всю систему ADR-0004 · 2026-09-16 Поток post.created перестал доходить до экземпляров
Набор удалённых постов вместо инвалидации кэша Надёжнее (не зависит от доставки события), но добавляет обращение на каждое открытие ленты ради события раз в десять секунд ADR-0004 · 2026-09-16 Удалений стало сопоставимо с публикациями — тогда фильтр выигрывает

Используем#

Что С какого ADR
Управляемый Redis под материализованные ленты, длина 200 идентификаторов ADR-0001 · 2026-09-16
Три сервиса — лента (с графом подписок), посты, шлюз с профилями ADR-0002 · 2026-09-16
Событие post.created в Kafka, ключ партиционирования author_id; связь — ячейка aec ADR-0003 · 2026-09-16
Гибрид с порогом 100 тыс. подписчиков; раздача чанками по 1 000 с курсором в PostgreSQL ADR-0003 · 2026-09-16
Локальный кэш в процессе под крупных авторов: карта «автор → 40 идентификаторов», обновление по post.created, прогрев при старте ADR-0004 · 2026-09-16
Кэш постов post:{id}: cache-aside, инвалидация по post.deleted, TTL 10 мин как верхняя граница ущерба ADR-0004 · 2026-09-16
Материализованный список крупных подписок feed:large:{user_id} — принят вне метода, документа нет ADR-0004 · 2026-09-16

Не рассматривали#

  • Собирать ленту при чтении и дальше — вариант отвергнут вне метода, по разбору кейса: документа решения под материализацию в наборе нет (находка 1 прогона). Решение принято, но не по документу, и это записано честно.
  • Деградация при холодном кэше — до неё не дошли. Требуется двумя дисквалификаторами D-03 подряд, в E-01 и в E-02; документа под неё нет, решение отложено как D-06. Записано здесь именно потому, что это не решение: ссылаться на него как на решение нельзя, а построить кэши без него нельзя тоже.

Раздел отличает «решили не брать» от «до этого не дошли»: второе не является решением, ссылаться на него как на решение нельзя.