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. Записано здесь именно потому, что это не решение: ссылаться на него как на решение нельзя, а построить кэши без него нельзя тоже.
Раздел отличает «решили не брать» от «до этого не дошли»: второе не является решением, ссылаться на него как на решение нельзя.