Спроектируйте потоковые признаки для антифрода
Вопрос
Платёжный сервис: 5000 транзакций в секунду в пике. Модели антифрода нужны признаки в момент платежа: число и сумма транзакций карты за 1 минуту, 1 час и 24 часа, число разных устройств за сутки, расстояние от прошлой транзакции. Решение должно приниматься за 100 мс. Спроектируйте систему.
Коротко
Что должно быть в решении
- 1Требования: список признаков и окон, задержка 100 мс на ответ, допустимая неточность, аудит решений
- 2Оценка нагрузки: 5000 событий в секунду, число активных карт, размер состояния на окна 24 часа
- 3Поток: события платежей в Kafka с ключом по карте, обработка во Flink с состоянием по карте
- 4Признаки: скользящие окна с TTL, приближённые структуры для distinct (HyperLogLog) там, где можно
- 5Хранилище онлайн-признаков с чтением по ключу за миллисекунды (key-value), запись из стриминга
- 6Согласованность онлайн и офлайн: те же определения признаков для обучения, point-in-time корректность
- 7Отказоустойчивость: чекпоинты, поведение при отставании (фолбэк на правила), мониторинг lag и задержки
Что спросит интервьюер
- Что делать, если стриминг отстаёт на 5 минут?
- Как гарантировать, что признак на обучении и в проде считается одинаково?
- Как учесть текущий платёж в признаках?
Разбор
Ключевые решения: партиционирование потока по карте, чтобы всё состояние карты жило на одном обработчике; состояние окон с TTL; онлайн-хранилище признаков с чтением за миллисекунды; единые определения признаков для обучения и прода (feature store), иначе модель на проде видит не то, на чём училась. Отдельно обработать отставание стриминга: сервис решений должен знать свежесть признаков и при большой задержке переходить на правила.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.