В этой подборке вопросы сгруппированы по формату «System Design», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: backend, api, database.
Outbox сохраняет бизнес-изменение и запись события в одной транзакции БД. Отдельный relay публикует только подтверждённые outbox-записи, поэтому rollback не оставляет событие для отправки.
Не доверяйте предположению о быстром обновлении всех клиентов: изменение типа публичного amount ломает контракт. Сохраните старое поле и введите совместимое расширение либо новую версию API.
Используйте single-flight или блокировку по ключу: одно выполнение обновляет кеш, остальные ждут либо получают допустимое устаревшее значение. Повторно проверьте кеш после получения блокировки.
Выберите вариант с устойчивым хранилищем статуса и проверкой повторов заданий. Память FastAPI-процесса теряется при рестарте и не разделяется автоматически между workers.
Сравните скорость поступления и обработки, найдите узкое место и увеличьте эффективную производительность потребителей. Рост очереди нельзя надёжно устранить только увеличением её размера.
При read-through приложение читает через кеш, а сам кеш или его адаптер загружает отсутствующее значение из основного хранилища. Логика cache miss сосредоточена в одном слое.
Таймаут означает неизвестный результат, а не доказанный отказ. Сохраните локальную операцию и стабильный idempotency key, затем сверяйте статус с банком и повторяйте запрос только по его контракту.
Добавьте проверку доступа, валидацию с лимитом входа и таймауты внешнего вызова с ограничением конкуренции. Они снижают риски чужого доступа, исчерпания ресурсов и зависания.
Разделите решение на inventory, безопасное подключение к узлам, декларативные задачи и исполнитель. Основная сложность аналога Ansible — идемпотентность и предсказуемое восстановление после частичного сбоя.
Независимость данных означает владение каждым сервисом своей моделью и запрет прямой записи в чужие таблицы. Обмен идёт через API или события с явными контрактами.
Сам факт отправки данных кассой в POS-сервис не является недостатком. Риск появляется при жёсткой синхронной зависимости: недоступность сервиса может остановить работу кассы.
Kafka подходит для долговременного журнала событий с повторным чтением и независимыми потребителями. RabbitMQ часто выбирают для очередей работ и гибкой маршрутизации сообщений.