Как управлять приоритетом заданий в очереди, используя горизонт laravel? - PullRequest
0 голосов
/ 05 мая 2020

Это теоретический вопрос, просьба не сообщать о спаме.

Я работаю над веб-приложением обмена криптовалюты P2P. Есть возможность поменять одну криптовалюту на другую. Допустим, у меня есть BT C, и мне нужно преобразовать его в эквивалентную сумму ETH.

Как только пользователь заходит на страницу обмена, мой код получает курсы обмена с 7 сторонних бирж, как показано на изображении ниже.

Crypto swapping page

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

Он отлично работает, когда я и моя команда из 5-6 человек тестируем эту функциональность. Я очень быстро вижу, что задания обрабатываются на панели инструментов laravel horizon.

Затем я разместил свое приложение на реальном сервере с доменным именем, я попробовал blazemeter, инструмент для тестирования производительности. Где я бы дал URL-адрес API этой страницы (я использую vuejs) и выделил бы 50 пользователей для выполнения запроса к этому API. Здесь я узнал, что около 40 тыс. Заданий помещены в очередь на панели мониторинга горизонта, и ее производительность резко упала, и время до sh этих заданий отображалось как 4 часа. Обычный пользователь не может ждать ответа.

Итак, мой вопрос заключается в том, как лучше всего решить эту проблему в производственной среде. Как установить приоритет заданий в очереди.

Я использую redis и драйвер очереди.

1 Ответ

0 голосов
/ 05 мая 2020

Только не создавайте задание каждый раз для каждого пользователя. Сделайте задание cron, чтобы регулярно получать данные для всех валют и где-нибудь их хранить. Вы можете разделить задания для каждой службы на разных работников, если их слишком много. Затем, когда пользователь нажимает кнопку «Купить», вы можете еще раз проверить цену, если она изменилась.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...