Сначала проверьте подпись
Вычислите HMAC от строки, состоящей из временной метки, точки и необработанного тела запроса, используя секрет конечной точки. Сравните результат со значением заголовка X-Meteor-Signature алгоритмом с постоянным временем выполнения и отклоняйте временные метки старше пяти минут. Проверяйте подпись до разбора JSON: после повторной сериализации тело изменится, и подпись не совпадёт.
Как можно быстрее подтвердите приём
У вас есть 5 секунд, чтобы ответить любым кодом 2xx. Не выполняйте основную работу внутри запроса: сохраните событие в очереди или таблице и верните 200. Обработчик, который синхронно обновляет три системы, превысит время ожидания, как только одна из них замедлится, а повторные попытки лишь увеличат нагрузку.
Удаляйте дубликаты
Повторные попытки нормальны: их может быть 6 попыток в течение 24 часов, и каждая содержит одно и то же событие. Храните обработанные идентификаторы с уникальным индексом и отвечайте на дубликат как на успешный запрос. Для идемпотентной обработки достаточно одной таблицы.
Порядок по времени
Порядок доставки не гарантируется, а повторное событие может прийти через несколько дней. Сохраняйте последний статус с учётом created_at и приоритета: окончательный статус нельзя перезаписывать более ранним Отправлено. Если учитывать только последнее полученное событие, повторное Отправлено может затереть Доставлено.
Контроль и повторная отправка
Настройте оповещения о росте доли ответов 5xx от вашей системы и времени обработки свыше двух секунд. Панель показывает долю успешных запросов для каждой конечной точки и хранит недоставленные события 30 дней. После сбоя исправьте конечную точку и повторно отправьте события пакетом. Секрет можно сменить в панели; старый и новый секреты действуют одновременно 24 часа, поэтому простой не требуется.
Что-то непонятно или устарело? Напишите на [email protected]. Мы внесём исправления в руководство и обновим дату.
