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

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

PgQ и Londiste

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

Хотя я так и не написал толком, как пользоваться PgQ и Londiste, но уже написал плагин, который облегчает его использование вместе с рельсами.

http://github.com/evtuhovich/pgq/tree/master

В README всё написано на плохом английском (с хорошим английским у меня плохо).

Совсем скоро я добавлю туда возможность прогонять миграции на master и slave базах данных одновременно. Тогда при очередной выкатке необходимо будет сделать только rake londiste:update в самом конце, после того, как все миграции прогонятся.

Очень интересно про очереди и асинхронное выполнение рассказал мой бывший коллега по connect.ua Денис Голотюк в статье «Очередь сообщений — что это и зачем?»

В двух словах, очередь — это способ размазать пиковую нагрузку во времени. Если какие-то операции не требуют ответа, то не обязательно делать их прямо в момент, когда это необходимо, можно отложить их выполнение на некоторый срок. При этом необходимо, чтобы они точно когда-нибудь выполнились.

PgQ — это еще одна система очередей, написаная skytools на базе PostgreSql. Если написать руками очередь на БД, то она будет работать медленно и создавать большую нагрузку. В PgQ удалось избежать этого за счет использования «особой PostgreSql магии». PgQ — транзакционная очередь, что гарантирует, что вы увидите каждой событией хотя бы один раз.

Особенностью PgQ является то, что события из нее достаются пачками (batch). Поэтому надо быть внимательным, чтобы не отреагировать на одно и то же событие несколько раз (например, если обработчик собыий аварийно завершился, перед выходом стоит все необработанные события отправить на повтор и закрыть пакет).

О скорости PgQ говорит так же то, что на базе нее написана система асинхронной репликации Londiste, которая считается самой лучшей в Postgres-мире.

UPD: Хотя в 9.0 появилась встроенная репликация, но пока она подходит только для организации hot standby, даже запросы толком выполнять на slave нельзя. К тому же londiste позволяет делать феерические вещи, которые не ясно как сделать с помощью встроенной репликации.

Если в проекте уже используется postgresql, то выбор в качестве системы очередей PgQ явяется разумным и оправданным.

Комментарии