Высоконагруженный WEB сервис (Saas), как правильно организоваться очередь выполнения задач?
У нас сервис автоматизации торговли в интернете.
Сервис работает на PHP (Yii2 Rest API), NodeJS, база данных MySQL и индексация в ElasticSearch для полнотекстового поиска и фасетных фильтров.
Столкнулись с проблемой:
Организация очереди - в фоновом режиме выполняется в районе 10000 задач в секунду, идёт постоянная запись/обновление в MySQL. Бывает, что MySQL не справляется с таким потоком.
Интересуют следующие вопросы:
1. Где и как хранить очередь и на чём лучше её реализовать? (Это отправка email, обновление цен у товаров, позиций и т.д)
2. Возможно, какая-то БД подойдёт лучше, если да, то какая? (Требование для БД: постоянное обновление записей и запись. Огромное количество данных, быстрое чтение).
Андрей Рудаков, можно попробовать Tarantool - у них в доке вроде как раз есть пример, как можно использовать его для горячей записи/чтения с периодическим батчингом в более долговременное хранилище.
Андрей Рудаков, про БД подробнее бы уточнить использование. Часто читают редко пишут? Читают/пишут примерно одинаково? Что за данные — точно ли нужна реляционная база, может key-value лучше подойдёт.