Я хотел что-то сделать, ребята. Я начинаю новый проект, примерно следующий:
Важная информация: я использую PHP и MySQL
Каждую минуту я получаю список транзакций из API от разных пользователей.
Пример:
user1 send $1 to user2
userx send $2 to usera
userw send $0.50 to user2
etc..
Допустим, пользователь user1 хочет отправить $ 1 пользователю user2. Есть две возможности: успешное или неудачное, потому что недостаточно средств или пользователь неправильно ввел имя пользователя. Если это не удается, я отправляю сообщение пользователю.
У меня сейчас несколько вариантов - пожалуйста, пройдите со мной через мой мыслительный процесс.
Вариант 1
Создайте таблицу базы данных с транзакциями, которые необходимо обработать, и используйте cronjob, который обрабатывает их каждую минуту. Риск здесь заключается в том, что сценарий может работать в случае ошибки или тайм-аута, а другие транзакции все равно будут отображаться в процессе в таблице базы данных. Поэтому мне понадобится второй скрипт, чтобы проверить это по отметке времени.
Вариант 2
Создайте API или функцию, которая вызывается для каждой транзакции после их получения и приносит мне ответ. После чего я могу вызвать другой API или функцию для обработки этого ответа или перейти к следующей транзакции. Однако мне все равно придется поместить их в таблицу базы данных, поскольку я не могу рискнуть их потерять, если скрипт прекратит выполнение. Таким образом, это будет работать следующим образом: поместить все транзакции в таблицу базы данных - начать транзакцию - когда завершить транзакцию удалить из таблицы - запустить транзакцию 2.
Оба варианта ошибочны, потому что вы не знаете, как долго будет длиться список транзакций. Если он длинный, PHP определенно не оптимален для запуска в течение длительного времени - использование тайм-аута в ноль рискованно. Я ищу, чтобы создать решение, которое будет масштабироваться с помощью PHP. Поэтому я думал о варианте 3.
Вариант 3 (Оптимальное решение?)
Используйте API для возврата 10 транзакций.
В базе данных установите флажок, чтобы сообщить, что они отправлены сценарию, и отметку времени, чтобы сообщить, когда они были отправлены.
PHP-скрипт получает 10 транзакций из API - обрабатывает 10 транзакций.
После завершения транзакции - удалите ее из этой таблицы и скопируйте в таблицу завершенных транзакций.
Сценарий cronjob проверяет каждые 3 минуты, если timesent больше, чем X минут (на основе верхней границы времени выполнения 10 транзакций). Если оно больше - установите их как не отправленные, чтобы их можно было снова отправить.
Как видите, я записал весь свой мыслительный процесс по этому вопросу и ищу информацию. Там наверняка будут вещи, которые я пропустил. Также, пожалуйста, поймите, что это не настоящие финансовые транзакции - это просто лучший метафор, который я мог бы использовать, чтобы прояснить ситуацию.
Большое спасибо,
Ice