Какой из двух подходов - использование крон задачи или отложенных сообщений через сервер rabbitmq - является более предпочтительным для проведения опроса статусов платежей?

Как можно оптимизировать систему, чтобы предотвратить избыточные проверки статуса платежей со стороны ядра системы?
  • 26 октября 2023 г. 21:08
Ответы на вопрос 2
Оба подхода имеют свои преимущества и могут быть предпочтительны в зависимости от требований и особенностей вашей системы.

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

Использование отложенных сообщений через сервер RabbitMQ предлагает более гибкий и расширяемый подход. Вместо периодической проверки статусов платежей, вы можете настроить систему таким образом, чтобы каждый платеж отправлял сообщение в очередь RabbitMQ, где оно будет обработано асинхронно. Это позволяет реагировать на изменения статусов платежей по мере их появления, а не ждать заданного времени для проверки. Однако использование RabbitMQ требует настройки и обслуживания дополнительной инфраструктуры.

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

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

2. Кэширование статусов: вы можете кэшировать статусы платежей в системе, чтобы избежать повторных запросов к платежному провайдеру. При каждом запросе проверяйте кэш и обращайтесь к провайдеру только при отсутствии актуальной информации.

3. Разумное расписание проверок: если вы все же используете крон задачу, вы можете оптимизировать расписание проверок, учитывая частоту изменения статусов платежей и требования вашей системы. Например, если большинство платежей изменяют свой статус только несколько раз в день, вы можете установить более длительный интервал для проверки.

4. Автоматическое снятие с проверки: если у платежа достигнут окончательный статус (например, "успешный" или "отклоненный"), вы можете автоматически исключить его из дальнейших проверок. Это может быть полезным, если большинство платежей остаются в одном статусе или имеют конечный статус.

Используйте эти рекомендации как отправную точку для оптимизации вашей системы, и учитывайте особенности вашего бизнеса и требования системы при выборе подхода и реализации.
Переходите на архитектуру, основанную на отправке сообщений. Вместо того, чтобы каждый раз делать запрос к сервису по расписанию, лучше опубликуйте событие в RabbitMQ. Например, при выполнении платежа, опубликуйте интеграционное событие "PaymentPaid", в котором содержатся все необходимые данные, включая идентификатор связанных платежей. Затем сервисы, заинтересованные в таких событиях, могут подписаться на них и выполнять необходимые действия. 

При работе с RabbitMQ учтите следующее: 
1. Существует гарантия, что сообщение будет доставлено хотя бы 1 раз. Однако это может привести к дублированию сообщений, поэтому рекомендуется делать обработку сообщений идемпотентной.
2. Сообщение может не быть доставлено из-за недоступности очереди, а также может быть потеряно из-за недоступности сервиса. Поэтому рекомендуется использовать механизм Outbox для гарантированной доставки сообщений.
Похожие вопросы