модуль 4 из 6 · Акт II · ~30 мин · 7 решений

сцена

Среда, полдень. Платежи уже месяц как отдельный сервис, и Тимур наконец катит их первое серьёзное обновление: в событие о проведённом платеже добавили поле rounding_mode — аудиторам нужно знать, как округлили копейки. Выкатка зелёная.

Через минуту в чат падает Лера:

Лера
Лера

У меня половина заказов зависла в статусе «оплата обрабатывается». Не отваливаются, не подтверждаются — просто висят.

Тимур
Тимур

Платежи отвечают двести, деньги списываются. На их стороне всё чисто.

Иван
Иван

(листая логи Заказов) Вот оно. Обработчик события оплаты в Заказах падает на разборе сообщения: встретил незнакомое поле rounding_mode и растерялся. А Заказы мы сегодня не трогали вообще — выкатили только Платежи.

Гена
Гена

Стоп. Раньше это была одна кодовая база — поменял формат в одном месте, он поменялся везде разом. Хотя… помнишь округление из седьмого модуля? Формат и в монолите умел разъезжаться. А теперь Платежи уехали вперёд, Заказы остались на старом коде — и падают. Ну, Тимур же и говорил: сеть всё усложнит.

Иван
Иван

Усложнила не сеть. Усложнил независимый деплой — то самое, ради чего мы платежи и вынесли. Пока всё было в одном куске, обе стороны менялись одновременно. Теперь они выкатываются порознь, и какое-то время в проде живут старая и новая версия сразу. Значит, формат сообщений обязан это переживать. Нам нужен общий язык, который не ломается от того, что кто-то выучил новое слово.

инцидент · старый консюмер на новом поле
событие оплаты v2платежи · v2добавили поле rounding_modeзаказы · v1падают на разбореотчёты · v1выкатили одних — упали другие

Выкатили только Платежи. Заказы на старом коде встретили незнакомое поле — и упали на разборе.

← карта