Технические заметки одного Евтуховича

Рассказ о серых трудовых буднях инженера программных систем

Использование очередей в высоконагруженных проектах

| Комментарии

При большом количестве запросов к приложению (в широком смысле этого слова) иногда целесообразно “размазать” пиковую нагрузку во времени. Для этого удобно использовать очереди. То есть, если какое-то запрос наверняка должен быть выполнен, но не имеет значение произойдет это прямо сейчас или чуть попозже, можно создать событие в очереди. И когда до этого события дойдет очередь —– оно будет выполнено. Таким образом можно развести сложные запросы во времени.

Очереди подходят для таких задач, как, например, рассылка большого количества сообщений и обновление различных счетчиков в БД (если их актуальность не очень критична). Использование такого подхода позволяет контролировать пиковую нагрузку, за счет чего сделать систему более стабильной в работе и отказоустойчивой. Также это позволяет оставить приемлемое время ответа сервиса, потому что он сможет отвечать что-то до фактического завершения длинной операции.

Вот список очередей, про который я слышал упоминания в контексте Ruby:

В нашей компании по причине использования postgresql выбор PgQ было очевиден. PgQ — это транзакционная очередь, написанная разработчиками из Skype с использованием “особой postgres-магии”, что позволяет ей работать очень быстро. Например, на ней реализовано наиболее популярное средство для master-slave репликации для PostgreSql — londiste, о котором я расскажу в ближайшем будущем, как только настроят новые сервера.

В следующий раз я напишу с примерами кода о том, как использовать PgQ в повседневной жизни, об особенностях работы с этой очередью и сложностях, с которыми мы встретились.

Комментарии