#multithreading #parallel-processing #scalability #crontab
#многопоточность #параллельная обработка #масштабируемость #crontab
Вопрос:
У меня есть веб-приложение на основе symfony, которое работает на серверной части mongodb и mysql. Принцип приложения заключается в том, что для каждого пользователя существует скрипт python, который запускается 4-12 раз в день на cronjobs и заполняет базы данных mysql и mongodb. Выполнение скрипта занимает от 1,5 до 2 минут. На данный момент cronjob выполняется последовательно. Это означает, что скрипт выполняет задание и ожидает завершения задания перед выполнением следующего. В тот момент, когда в моем веб-приложении появляется новый пользователь, cronjobs автоматически создаются на некоторое время. За 24 часа в сутки я могу запускать ограниченное количество cronjobs, таким образом, ограниченное количество пользователей (около 250-300)
Что мне нужно было бы сделать, если бы я хотел разместить от 1000 до миллиона пользователей в своем веб-приложении? Могу ли я запустить свой скрипт на многопоточной основе? Это означает, что вместо ожидания завершения задания, запускайте сотни заданий одновременно. Таким образом, я могу экспоненциально увеличивать свою пользовательскую базу.
Но какой параллелизм смогут поддерживать mongodb и mysql? сколько заданий я могу выполнять параллельно? Какие системные факторы мне нужно учитывать, чтобы расширить свою пользовательскую базу? Нужно ли мне добавлять больше машин в мое приложение?
Комментарии:
1. Было бы трудно много советовать, не видя / не понимая вашего скрипта, но взгляните на GNU Parallel, чтобы легко контролировать степень параллелизма.
2. @MarkSetchell спасибо за ваш комментарий. скрипт вызывает внешний rest api и обрабатывает данные, а затем сохраняет их в базе данных. Не намного больше. Это помогает?
3. конечно, обработка включает в себя чтение и запись mongodb, а затем применение алгоритма, следовательно, время выполнения 2 минуты