Внешняя система начинает отвечать с ошибками: назовите механизм, который предотвращает каскадный отказ вызывающего сервиса.
База Hintsage
Системный анализ
Интеграции, API, модели данных, требования к системам и техническая документация.
Практика
Вопросы: Системный анализ
В шлюзе API для одного клиента настроено ограничение запросов:
HTTP/1.1 429 Too Many Requests
Retry-After: 3
RateLimit-Limit: 100
RateLimit-Remaining: 0
RateLimit-Reset: 3
Какой механизм управления нагрузкой стоит за таким ответом и как он должен работать?
Команда трижды возвращается к спору о выборе архитектурного решения. Какой документ зафиксирует решение так, чтобы обсуждение не начиналось заново?
Клиент API получает одинаковый ответ для постоянной ошибки валидации и временного сбоя зависимости. Какой принцип контракта позволит различать их обработку?
В модели заказа одновременно хранятся сумма позиций и итоговая сумма. Как спроектировать её, чтобы производные значения не расходились с исходными данными?
Сервис принимает пакетную операцию над несколькими объектами. Как API должен сообщать частичный успех, чтобы клиент мог безопасно продолжить обработку?
В модели заказов удаление клиента иногда оставляет заказы без владельца. Какой механизм на уровне базы данных должен предотвращать такую ссылочную ошибку?
CREATE TABLE customers (
id BIGINT PRIMARY KEY
);
CREATE TABLE orders (
id BIGINT PRIMARY KEY,
customer_id BIGINT NOT NULL
);
Наблюдение: два последовательных SELECT в одной транзакции возвращают разные наборы строк, хотя сама транзакция ничего не меняет. Какой механизм изоляции объясняет это поведение?
-- Сеанс A
BEGIN;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT id FROM orders WHERE status = 'new'; -- 3 строки
-- Сеанс B параллельно
BEGIN;
INSERT INTO orders (id, status) VALUES (104, 'new');
COMMIT;
-- Сеанс A
SELECT id FROM orders WHERE status = 'new'; -- 4 строки
COMMIT;
Во время синхронизации события об изменении клиента приходят не по порядку. Как потребителю определить, что обновление устарело?
В модели заказа статус хранится свободной строкой. Какой механизм на уровне БД не позволит сохранить значение вне согласованного набора?
Две системы называют сущность «клиентом», но используют разные правила и статусы. Как спроектировать интеграцию, чтобы модель одной системы не загрязнялась понятиями другой?
Сравните тайм-аут установления соединения и тайм-аут ожидания ответа внешнего сервиса: какой сбой выявляет каждый из них?
Внешний API начал добавлять новые поля в ответы. Как потребителю пережить это изменение без внепланового релиза?
В системе аккаунт удаляется мягко, но адрес электронной почты должен снова стать доступным для регистрации. Какой механизм исправит ограничение в схеме?
CREATE TABLE accounts (
id BIGINT PRIMARY KEY,
email TEXT NOT NULL,
deleted_at TIMESTAMP NULL,
UNIQUE (email)
);
Как представить момент времени в API, чтобы его одинаково интерпретировали системы из разных часовых поясов?
Как спроектировать модель данных, чтобы восстановить состояние сущности на любую дату?
Как определить, должно ли событие из предметной модели стать внешним интеграционным контрактом?
Команда моделирует систему, где один пользователь может иметь несколько ролей, а каждая роль назначается многим пользователям. Как представить такую связь в реляционной модели?
Как согласовать бизнес-операцию, затрагивающую несколько сервисов, если общей транзакции между ними нет?
Клиент часто запрашивает ресурс, который меняется редко. Как API проверит его актуальность без передачи полного тела при каждом запросе?
Показано 21–40 из 47