Core Architecture
Система использует микросервисную архитектуру с отдельными сервисами для каталога, бронирований, платежей, листов ожидания и уведомлений. Каждый сервис масштабируется независимо, чтобы справиться с различными нагрузками.
Event Catalog
- Храни данные о событиях и местах в реляционной базе данных (например, PostgreSQL)
- Кэшируй часто используемые страницы каталога с помощью Redis или CDN
- Используй Elasticsearch для быстрого поиска событий с фильтрацией
Выбор мест и управление конкурентностью
Это самый критичный компонент. Чтобы предотвратить двойное бронирование:
- Используй распределённые блокировки Redis или атомарные операции (
SETNX), чтобы временно зарезервировать место в момент, когда пользователь его выбирает
- Резервирование автоматически истекает (например, через 10 минут), если платёж не завершён — это бронирование с ограничением по времени
- Запиши подтверждённое бронирование в базу данных только после успешного платежа
Обработка платежей
- Интегрируй сторонний шлюз (например, Stripe, Razorpay) через отдельный Payment Service
- Используй idempotency keys, чтобы безопасно повторять неудачные запросы без создания дублирующихся платежей
- При успешном платеже атомарно сними блокировку в Redis и сохрани бронирование
Управление листом ожидания
- Храни записи списка ожидания в очереди (например, Redis List или SQS)
- Когда бронирование отменяется или резервирование истекает, автоматически предложи место следующему пользователю в списке ожидания с ограниченным по времени окном подтверждения
Уведомления
- Публикуй обновления о бронированиях и событиях в message broker (например, Kafka)
- Отдельный Notification Service потребляет эти события и отправляет письма или push-уведомления асинхронно
Обработка всплесков трафика
- Размести очередь или виртуальный зал ожидания перед сервисом бронирования во время продаж с высоким спросом
- Используй rate limiting и auto-scaling, чтобы защитить бэкенд-сервисы
- Раздавай статическое содержимое каталога через CDN, чтобы снизить нагрузку на origin во время thundering herd