Система обнаружения простоев онлайн-платежей на Apache Flink и Kafka: кейс Razorpay

Автор Категория , ,
Система обнаружения простоев онлайн-платежей на Apache Flink и Kafka: кейс Razorpay

Сегодня рассмотрим, как индийская ИТ-компания Razorpay с помощью Apache Flink и Kafka свела к минимуму время простоя своего главного продукта – платежного шлюза для интернет-магазинов. Как всего 2 задания Flink могут быстро обнаруживать простои более 50 когорт событий на уровне платежного шлюза и 200+ когорт разных интернет-магазинов.

Работать нельзя остановиться: простои в платежных системах

Экосистема онлайн-платежей имеет незапланированные колебания на всех уровнях, начиная от источника платежного запроса и до получения клиентом уведомления об окончательном статусе платежа. Их нельзя полностью избежать, но можно попытаться выявить и проинформировать всех участников онлайн-транзакции, чтобы предупредить возможные сбои в финансовых переводах. Поскольку основным видом бизнеса Razorpay является предоставление шлюза онлайн-оплаты, компании необходимо быстро обнаруживать простои платежной системы. Под простоем понимается отключение или частичная деградация платежной системы, сбой в работе банка или интеграции, которые могут повлиять на выполнение клиентом транзакции.

Изначально дата-инженеры Razorpay реализовали быстрое решение поверх существующего хранилища данных, которое опрашивало базу через регулярные промежутки времени и определяла показатель успешности (SR, Success Rate).  Если значение SR ниже определенного порога, это считается простоем и система генерирует уведомления. Хотя решение оказалось рабочим, оно имело следующие проблемы:

  • зависимость – будучи компонентом основной платежной системы, приложение мониторинга простоев не работает при отказе базовой части;
  • длительное время обнаружения – чтобы снизить нагрузку на БД, частота расчета SR составляла каждые 2 минуты, что много для платежной системы;
  • отсутствие расширяемости – система обнаружения простоев работала только на уровне Razorpay и не охватывает сбои онлайн-оплаты по причине конкретного интернет-магазина;
  • низкая точность из-за задержки репликации базы данных определение времени простоя не всегда было точным, и возникали ложные срабатывания.

Поэтому для оперативного и надежного определения простоев нужно новое решение со следующими возможностями:

  • быстрое определение простоев;
  • классификация простоя по степени серьезности и фактора возникновения – способ оплаты, эмитент, тип карты, проблемы на стороне получателя и пр.
  • настройка правил обнаружения простоев для интернет-магазинов и платежного шлюза;
  • непрерывный мониторинг и улучшение стратегий обнаружения простоев;
  • автоматические проверки точности с устранением ложноположительных и истинно отрицательных ошибок по матрице ошибок;

Реализовать все эти требования могут следующие варианты дизайна:

  • решение на основе БД, что требует нового хранилища с конвейером для записи данных, cron-заданий для вычисления SR, очистки старых данных и обнаружения простоев. Недостатками этого варианта являются низкая частота выполнения заданий, задержка репликации и много возможных точек отказа.
  • система потоковой передачи событий. В качестве вычислительного движка в подобных решениях часто используется Apache Spark, но в данном случае команда Razorpay выбрала Flink. По функциональным возможностям и набору компонентов он похож на Spark, но Flink более привлекателен из-за действительно потоковой, а не микропакетной, передачи, высокой пропускной способности и богатых API-интерфейсов с набором специализированных библиотек.

Как именно Razorpay построили собственный сервис обнаружения простоев в платежной системе на базе Apache Flink, мы рассмотрим далее.

Сервис обнаружения простоев на базе Apache Flink и Kafka

Новый сервис является независимым и самостоятельным приложением из следующих компонент:

  • задание определения состояния платежа (Payment Status Job), которое считывает данные о платежных событиях из Apache Kafka;
  • задание по обнаружению простоев (Downtime Detection Job), которое прослушивает события состояния платежа и обнаруживает простои согласно заданным периодам времени и правилам.

Задание по обнаружению простоев периодически выбирает определенное количество платежей – когорту и вычисляет SR-коэффициент как долю успешных платежей от общего количества. При этом типовой набор платежей для расчета SR зависит от метода оплаты, банка, онлайн-магазина и прочих аспектов финансового перевода. А стратегия обнаружения простоев зависит от множества факторов, что необходимо отразить в правилах. Поэтому команда Razorpay решила разработать систему, которая сохраняет настраиваемые правила обнаружения и может масштабироваться.

Во-первых, следует соединить два потока, Платежные события и Правила обнаружения простоев с порогами успеха. Далее следует обеспечить контроль над агрегацией платежных событий, то есть платежами по времени или счету для расчета SR с возможностью вариативной настройки периодов времени, т.к. время существования платежных событий не является постоянным для разных когорт. Apache Flink обеспечивает это с помощью механизма оконных функций. Любое обнаруженное время простоя сохраняется в функции и разрешается только тогда, когда SR превышает пороговые значения. Состояние платежного события в задании по обнаружению простоев очищается через регулярные промежутки времени с помощью настраиваемой стратегии очистки без использования встроенной функции Flink – StateTtl, которая чрезмерно загружает ЦП.

Flink Kafka monitoring
Архитектура сервиса обнаружения простоев платежной системы Razorpay

Чтобы оценить эффективность системы обнаружения простоев и используемых стратегий, необходимо рассчитать точность этого решения, сравнив вычисленный SR с фактическим SR платежей во время реальных простоев. Такая проверка выполняется на огромных объемах данных, а потому была автоматизирована и реализована с обращением в корпоративное озеро данных Razorpay.

После ввода в эксплуатацию новый сервис на базе Apache Flink и Kafka обнаруживает простои более 50 платежных когорт на уровне Razorpay и охватывает более 200 платежных когорт интернет-магазинов. В перспективе разработчики Razorpay планируют снизить время простоя своих платежных сервисов до нуля и создать Canary-процесс для развертывания обновлений в рабочей среде, а также реализовать систему рассылки уведомлений.

Узнайте больше, как использовать Apache Flink и Kafka для разработки распределенных приложений потоковой аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://engineering.razorpay.com/detecting-downtimes-to-improve-payments-experience-3bc2814152c