Slide 1

Slide 1 text

2 5 + Y E A R S O F E N G I N E E R I N G L E A D E R S H I P Осторожно PGPOOL ОКТЯБРЬ 2017 Игорь Буренков 2 5 + Y E A R S O F E N G I N E E R I N G L E A D E R S H I P

Slide 2

Slide 2 text

Требования › Производительность XX млн. запросов в сутки latency в пределах 100мс › Масштабирование и отказоустойчивость на уровне сервиса на уровне источника данных › PostgreSQL + PGPOOL

Slide 3

Slide 3 text

PGPOOL-II это › Пул подключений › Ограничение количества подключений › Репликация › Балансировка

Slide 4

Slide 4 text

Архитектура › Горизонтальное масштабирование › Дублирование › Балансировка › Сервис управления PGPOOL

Slide 5

Slide 5 text

Тестирование Что делали: › Jmeter 10threads › Отключение серверов › VM, docker pause › Сетевые проблемы › Миграция VM между хостами Что мерили: ›время обработки запроса ›время на обработку в базе ›время на обработку запроса в коде

Slide 6

Slide 6 text

Fail › Время на запрос в пределах 200..600мс › Ошибки в приложении при attach/detach PG в пуле › “Зависания” при attach/detach PG в пуле › Самопроизвольное “Выключение” PG из пула (failover) › Рассинхронизация состояний PGPOOL › Какой PGPOOL активен?

Slide 7

Slide 7 text

Рассинхронизация и “Выключение” PG из пула Источник › Проблемы с подключением к PG › PGPOOL-II Failover Решение › Внешний сервис failback

Slide 8

Slide 8 text

Ошибки и зависания при attach/detach PG Источник › Настройки PGPOOL Решение › Зависания при вводе/выводе › Ошибки при вводе › Ошибки при выводе

Slide 9

Slide 9 text

Время обработки запроса

Slide 10

Slide 10 text

Время обработки запроса Источник › Напрямую к базе в разы быстрее!!! › Настройки PG и пула ? Решение › Уменьшить количество запросов › Работать напрямую с PG

Slide 11

Slide 11 text

PGPOOL II Итог › Медленно при большом количестве SQL запросов › Ошибки в приложении при выводе PG из пула Повтор запроса из приложения › Самопроизвольное “Выключение” PG из пула (failover) Внешний сервис › Рассинхронизация состояний PGPOOL-II Внешний сервис

Slide 12

Slide 12 text

Альтернатива › HAProxy › PgBouncer › HA-JDBC

Slide 13

Slide 13 text

Proxy DataSource › Обращение напрямую к базе › Пул коннектов HikariCP › Полный контроль failover/failback › Управление пулом PG › Удаление и добавление PG ”на ходу”

Slide 14

Slide 14 text

DataSource pool

Slide 15

Slide 15 text

DataSource Failover/Failback › Random балансировка › Ловим ошибки java.sql.*Statement, java.sql.Connection › Реагируем только на SQLException с кодами кодами 08* HZ* или IOException › База отключается сразу, только при возникновении ошибки › Отключенные базы постоянно мониторятся на доступность

Slide 16

Slide 16 text

Архитектура (было)

Slide 17

Slide 17 text

Архитектура (стало)

Slide 18

Slide 18 text

Итог › Прямое обращение к PG без “прокладки” › Полный контроль над Failover/Failback › Экономия “железа” › Поддерживает любую базу если есть jdbc драйвер

Slide 19

Slide 19 text

2 5 + Y E A R S O F E N G I N E E R I N G L E A D E R S H I P Спасибо за внимание! Задавайте вопросы. Игорь Буренков [email protected]

Slide 20

Slide 20 text

2 5 + Y E A R S O F E N G I N E E R I N G L E A D E R S H I P АУРИГА ОФИС В БОСТОНЕ 400 TradeCenter Ste 5900 Woburn, MA 01801, USA Тел: +1 (866) 645-1119 Факс: + 1 (603) 386-6097 ОФИС В ЕВРОПЕ Ukmergės g. 322, LT- 12106, Vilnius, Lithuania Тел: +370 (5) 203-1571 Факс: +370 (5) 203-1573 [email protected] www.auriga.ru ОФИС В РОССИИ 117587, Россия, г. Москва, Варшавское ш., д. 125, стр. 16А Тел: +7 (495) 713-9900 Факс: +7 (495) 939-0300