Я разрабатываю веб сайт на Yii фреймворке, планируется что сайт будет высоко нагруженный (до 200,000 в день). Мне нужно будет обрабатывать картинки, отправлять почту и т.п. ну и нужно делать это асинхронно. Раньше я с таким не сталкивался и не знаю что выбрать. Посоветуйте что-нибудь.
UPD: всем спасибо, я склоняюсь к Gearman, но еще почитаю о RabbitMQ
Есть сервер заданий — gearman — про него недавно статья как раз была. PHP с ним вполне работает — может как посылать задачи на него, так и получать и выполнять.
3 человека в секунду это очень даже не высокие нагрузки
Для рассинхронизации можете себе завести в бд (или где-то еще) табличку с заданиями и потом кроном выбирать по 10-20 заданий и обрабатывать их.
Поддерживаю. 200 кхитов на высокую нагрузку как-то не тянут. На PHP вполне реально уложившись в 200МБ ОЗУ отрабатывать этак миллионов 20 хитов, т.е. в сотня раз больше.
Если выбор ваш падет все же на Gearman, советую обратить внимание на менеджер воркеров github.com/brianlmoon/GearmanManager. Мы его используем на своем проекте, с небольшими модификациями (кстати, тоже с Yii):
новый класс приложения, который содержит в себе и запускает менеджер;
новый механизм парсинга конфига, такой, что бы менеджер понимал свои же опции из конфига Yii;
Заодно еще пару советов по работе воркеров с менеджером:
не пользуйтесь опцией max_worker_lifetime отличной от 0. Лучше в конце работы делать: $this->sendComplete($result);
exit(0);
Так можно освободить ресурсы без боязни, что менеджер перезапустит воркер в середине его активной работы.
В первом случае воркеры могли завершаться по таймеру, даже если они были с заданием. Во втором — это лишние обращения к диску, от которых мы предпочли избавиться и при деплое перезапускать все воркеры скопом.
Если у тебя очереди только FIFO планируются, то можно юзать Gearman, если планируется LIFO, то он уже не подойдет. Вообще для очередей отлично подойдет Redis, например.