Ситуация: у клиента был сервис бронирования мероприятий на React + Node.js. Пользователи жаловались на то, что места отображаются некорректно: два человека могли купить один и тот же билет, потому что система обновлялась только при перезагрузке страницы. Это приводило к конфликтам и потере клиентов.
Решение:
Внедрил WebSocket-соединения (Socket.IO) между фронтендом и backend.
Добавил механизм блокировки мест в БД (PostgreSQL) на время транзакции через транзакции и row-level locking.
Настроил Redis Pub/Sub для синхронизации состояний между несколькими инстансами серверов.
На фронтенде реализовал real-time обновление состояния мест: занято/свободно.
Для отказоустойчивости добавил fallback на polling, если WebSocket недоступен.