Использование очередей в высоконагруженных проектах
При большом количестве запросов к приложению (в широком смысле этого слова) иногда целесообразно ``размазать’’ пиковую нагрузку во времени. Для этого удобно использовать очереди. То есть, если какое-то запрос наверняка должен быть выполнен, но не имеет значение произойдет это прямо сейчас или чуть попозже, можно создать событие в очереди. И когда до этого события дойдет очередь —– оно будет выполнено. Таким образом можно развести сложные запросы во времени.
Очереди подходят для таких задач, как, например, рассылка большого количества сообщений и обновление различных счетчиков в БД (если их актуальность не очень критична). Использование такого подхода позволяет контролировать пиковую нагрузку, за счет чего сделать систему более стабильной в работе и отказоустойчивой. Также это позволяет оставить приемлемое время ответа сервиса, потому что он сможет отвечать что-то до фактического завершения длинной операции.
Вот список очередей, про который я слышал упоминания в контексте Ruby:
В нашей компании по причине использования postgresql выбор PgQ было очевиден. PgQ — это транзакционная очередь, написанная разработчиками из Skype с использованием “особой postgres-магии”, что позволяет ей работать очень быстро. Например, на ней реализовано наиболее популярное средство для master-slave репликации для PostgreSql — londiste, о котором я расскажу в ближайшем будущем, как только настроят новые сервера.
В следующий раз я напишу с примерами кода о том, как использовать PgQ в повседневной жизни, об особенностях работы с этой очередью и сложностях, с которыми мы встретились.