Обратный звонок заказан!

Небольшой вклад Мегаплана в open source

17 Марта 2009
Хочу немножко похвастаться :) Патч, который я отправил в проект pgBouncer около полугода назад, приняли и недавно выпустили релиз 1.3, в котором присутствует реализованная мной функциональность. Это первый, небольшой, но, думаю, не последний вклад Мегаплана в open-source движение. История такова (внимание, дальнейший текст, скорее всего, будет понятен только IT-специалистам): В Мегаплане для каждого аккаунта создаётся отдельная база данных, и механизм persistent-соединений, который предоставляет PHP, нам не подходит, поскольку при его использовании количество соединений с PostgreSQL-сервером кратно количеству fastcgi-процессов php. Поэтому пришлось использовать внешний "пулер" соединений. Поначалу мы использовали pgpool, однако у него у него есть неприятный изъян: он многопроцессный, и каждый процесс открывает одно соединение с уникальной базой (не больше и не меньше). Таким образом, если его настроить на 4 процесса, то для каждой БД он откроет и будет держать по 4 соединения, даже если единовременно используется только одно из них, а если оставить только один процесс, то при попытке обратиться к БД, соединение которой уже занято, клиенту прийдётся подождать (а то и отлуп получить), что совсем нехорошо. Когда активных баз стало многовато и наблюдать 4x тупо кущающих память postgresql-процессов в top'е стало неприятно, активно начали искать альтернативу. PgBouncer нашёлся быстро, с точки зрения его работы как пулера и возможности тонкой настройки он нам полностью подходил, и вышеописанных недостатков он был лишён. Но халявы не получилось... Почему-то в настройках нужно было настраивать соединение для каждой БД отдельной строкой, что нам совсем не походит, поскольку базы создаются динамически в любое время. Делать костыль, который автоматически редактирует конфиг с тысячами баз данных, совсем не хотелось. Заглянул в исходники одним глазком - "вдруг парой строк делается". Парой строк, конечно же, не делалось, но каким-то образом процесс изучения исходников меня сильно увлёк (может быть из-за ностальгии по старому доброму C, а может из-за очень грамотного и интересного кода) и через пару-тройку дней путём добавления относительно небольшого количества кода получился работающий pgBouncer с возможностью указывать универсальные настройки подключения для всех "неизвестных" БД (для которых нет явной строки настройки). Почти сразу оформил патч и отправил разработчикам, которые приняли его и добавили в новый релиз. Патч, кстати, получился очень стабильным (постучал по дереву) - за полгода работы pgBouncer не падал ни разу и вроде не течёт.

Комментарии
Ваш комментарий
Необходимо заполнить данное поле
Имя должно содержать более 2-х симоволов
адрес не будет опубликован
Заполните, пожалуйста, адрес
Необходимо заполнить данное поле
Ваш комментарий добавлен
Спасибо за участие в дискуссии.