SlideShare a Scribd company logo
1 of 32
Download to read offline
Postgresql XC

      Что это и с чем его есть.

Maxim.Boguk@PostgreSQL-Consulting.com
Что такое Postgresql-XC
• Решение для кластеризации PostgreSQL с
  возможностью наращивания
  производительности путем добавления
  новых серверов.
• Поддержка автоматического прозрачного
  шардинга данных на несколько серверов.
• Честный ACID и честные транзакции в
  распределенной среде.
Что такое Postgresql-XC
• До разумного количества нод – возможна
  (при определенных условиях) почти
  линейная масштабируемость и по чтению и
  по записи.
• Возможно построение высокодоступных
  (high-available) конфигураций
• Некоторые запросы могут выполнятся
  частично параллельно.
Чем не является PostgreSQL-XC
• Хоть Postgresql-XC и выглядит похожим на
  MultiMaster он им не является. Все сервера
  кластера должны быть соединены сетью с
  минимальными задержками (читай
  воткнуты в один switch), никакое
  географически-распределенное решение с
  разумной производительностью построить
  на нем не возможно (это важный момент).
Масштабируемость
                     Результаты DBT-1
Производительность




                       Количество серверов
Архитектура (упрощенно)
Где взять и какие есть версии?
Официальный сайт:
        http://postgres-xc.sourceforge.net/

Последняя доступная версия:
1.0.1 на основе Postgresql 9.1.5 (выпущена в
сентябре 2012)

Версия в разработке:
1.1 на основе PostgreSQL 9.2 (ожидается в мае 2013)
Минимальная конфигурация:
• Минимальная конфигурация PostgreSQL-XC
  содержит 4 независимых подсистем
  (администрировать это все достаточно
  весело): 2 сервиса с данными, сервис-
  координатор, GTM (global transaction
  manager).
• В принципе это все можно завести на 2
  физических серверах или виртуалках.
Как это выглядит?
Транзакции и ACID
• Приложение присоденившееся к любому из
  координаторов видит одинаковое (между
  всеми координаторами) и целостное
  представление данных.
• Честный ACID без необходимости вносить
  правки в приложение.
• Единые snapshots и видимость транзакций
  обеспечиваются специальным отдельным
  приложением GTM.
А как же печальноизвестная CAP
             теорема?
• PostgreSQL-XC попадает в CA угол этого
  треугольника. Таким образом всегда есть
  согласованность данных и доступность (HA
  требует дополнительной настройки но в
  целом возможен). В общем как и любое
  другое кластерное решение для
  классических баз данных.
Обеспечение транзакционой
    целостности между нодами.
• Для обеспечения транзакционной
  целостности операций затрагивающих
  более одной ноды – используется
  классический механизм 2PC (two-phase
  commit).
• После сбоя для разбора ситуации с 2PC есть
  специальная утилита pgxc_clean для
  приведения кластера в согласованное
  состояние.
Распределение данных в кластере
• Два в общем то стандартных варианта:
  таблица целиком хранися на всех базах
  кластера или шардинг (про это потом
  подробнее)
• Так как PostgreSQL-XC умеет проводить joins
  прямо на нодах с данными таблицы с
  которым часто идут Joins лучше
  реплицировать целиком.
Шардинг. В каких случаях?
• Таблицы логов (завершенные операции,
  посещения)
• Таблицы с временными данными
  (например корзина заказа в интернет
  магазине)
• Пользователи и их данные (шардинг по id
  пользователя).
Синтаксис шардинга:
• CREATE TABLE tab (…) DISTRIBUTE BY
  HASH(col) | MODULO(col) | REPLICATE
Просто и удобно.
На практике – надо очень внимательно
думать о том как делать так как переделывать
большую таблицу на другой режим шардинга
до 1.1 очень неудобно.
Что не надо шардить?
• Таблицы-справочники и прочие глобальные
  данные с которыми постоянно
  производятся Joins (join большого обьема
  данных с таблицей разбитой на нескольких
  нодах будет весьма неэффективен).
• В общем то любые статические или
  редкоизменяемые таблицы с большим
  потоком чтения.
План простого запроса:
CREATE TABLE tab1 (val int, val2 int)
DISTRIBUTE BY REPLICATION TO NODE datanode_1, datanode_2;
-- полная копия данных на обоих нодах

EXPLAIN VERBOSE SELECT * FROM tab1 WHERE val2 = 5;

-- Решаем где выполнять запрос
-> Data Node Scan on tab1
   Output: val, val2
   -- выбрали одну из нод
   Node/s: datanode_1
   Remote query: SELECT val, val2 FROM ONLY tab1 WHERE (val2 = 5)
План простого запроса v2:
CREATE TABLE tab1 (val int, val2 int)
DISTRIBUTE BY HASH(val) TO NODE datanode_1, datanode_2;
-- таблица раскидана на 2 ноды

EXPLAIN VERBOSE SELECT * FROM tab1 WHERE val2 = 5;

-- поиск по всем нодам
-> Data Node Scan on "__REMOTE_FQS_QUERY__«
    Output: tab1.val, tab1.val2
    -- собираем данные со всех нод
    Node/s: datanode_1, datanode_2
    -- операции на всех нодах идут параллельно!
    Remote query: SELECT val, val2 FROM tab1 WHERE (val2 = 5)
Подсчет агрегата sum():
CREATE TABLE tab1 (val int, val2 int)
DISTRIBUTE BY REPLICATION TO NODE datanode_1, datanode_2;
-- полная копия данных на обоих нодах

EXPLAIN VERBOSE SELECT sum(val) FROM tab1 GROUP BY val2;

HashAggregate
--подсчет суммы на ноде-координаторе
Output: sum(val), val2
-> Data Node Scan on tab1
    Output: val, val2
    --вытаскиваем таблицу целиком с одной из нод
    Node/s: datanode_1
    Remote query: SELECT val, val2 FROM ONLY tab1 WHERE true
Подсчет агрегата sum() v2:
CREATE TABLE tab1 (val int, val2 int)
DISTRIBUTE BY HASH(val) TO NODE datanode_1, datanode_2;
-- таблица раскидана на 2 ноды

EXPLAIN VERBOSE SELECT sum(val) FROM tab1 GROUP BY val2;

HashAggregate
Output: pg_catalog.sum((sum(tab1.val))), tab1.val2
    --суммируем подитоги на координаторе
    ->Data Node Scan on "__REMOTE_GROUP_QUERY__"
    Output: sum(tab1.val), tab1.val2
    Node/s: datanode_1, datanode_2
    Remote query: SELECT sum(group_1.val), group_1.val2
          FROM (SELECT val, val2 FROM ONLY tab1
          WHERE true) group_1 GROUP BY 2
     --получаем частичные суммы с каждой из нод
А что на счет JOINS:
• Joins между и с участием реплицированных
  таблиц, а также Joins между
  распределенными по одному и тому же
  полю в таблицах – выполняются на data-
  нодах напрямую.
• Joins с участием распределенных таблиц по
  другим ключам – будут выполнены на ноде-
  координаторе и скорее всего это будет
  медленно.
Известные ограничения.
• не поддерживаются триггеры (обещают
  доделать в 1.1).
• Нет удобной системы
  репартиционирования при добавлении или
  удалении нод (тоже обещают доделать в
  1.1 но даже тогда это будет означать
  downtime)
Известные ограничения часть 2.
• Нет глобальных UNIQUE на распределенных
  таблицах.
• Не поддерживаются курсоры (обещают в
  версии 1.1)
• Не поддерживаются foreign keys между
  нодами (т.е. FK стого должен вести на
  данные расположенные на той же ноде).
Известные ограничения часть 3:
• Не поддерживается INSERT … RETURNING
  (опять же обещается поддержка в 1.1)
• Невозможно удаление и добавление нод в
  кластер без полной реинициализации
  кластера (обещают в 1.1 тоже исправить).
А оно надежно?
• Много подсистем – много потенциальных
  точек отказа. Архитектура PostgreSQL-XC с
  самого начала предусматривает
  возможность дублирования всех
  компонентов.
• Ноды с данными и ноды-координаторы
  представляют из слегка изменнеый
  PostgreSQL и поддерживают streaming
  репликацию для избыточности.
Обеспечение высокой доступности:
• GTM это отдельный процесс и может быть
  точкой отказа, поэтому для него разработан
  отдельный механизм синхроннго standby.
• Все ноды с данными и ноды координаторы
  должны иметь синхронные streaming
  реплики.
• GTM всегда используется в связке с GTM-
  standby.
Backup и восстановление:
• Pg_dump/pg_dumpall работают фактически
  так же как и для обычного PostgreSQL.
• Hot-backup – требует вызова специальной
  команды CREATE BARRIER ‘barrier_id’
  (фактически аналог вызова select
  pg_start_backup(‘label’); ) далее для всех
  нод с данными и координаторов так же как
  для обычного PostgreSQL.
А зачем оно надо?
• При росте проекта может сложится
  ситуация когда обьем данных или нагрузка
  доходит до того уровня когда один сервер
  (или даже мастер + N реплик) не
  справляются с нагрузкой или по причине
  высокого интенсивности записи в базу или
  по причине роста объема данных.
А зачем оно надо?
• Тогда есть вариант или делать
  слабосвязанную систему из многих
  серверов (ручной шардинг) и переписывать
  проект почти заново.
• Или попробовать использовать PostreSQL-
  XC как временное или постоянное решение
  оставив почти 100% совместимость с single-
  database версий на уровне запросов.
А зачем оно надо?
• Вторая целевая группа для PostgreSQL-XC
  это Data Warehousing и системы аналитики:
  параллельное выполнение запросов на
  распределенных таблицах позволяет резко
  ускорить тяжелые аналитических запросы.
• Заодно и обьем данных на каждой из нод
  будет поменьше.
А стоит ли оно того?
• Решать вам. Администрирование PostgreSQL-
  XC заметно сложнее и более трудоемкое чем
  администрирование простого PostgreSQL (но в
  общем не принципиально сложнее чем
  администрирование PostgreSQL в связке с
  Slony или Londiste).
• Далеко не любой проект можно смигрировать
  без переделок. Но их понадобится заметно
  меньше чем при использовании шардинга.
Использованные материалы:
         PostgreSQL-XC tutorial from PGCon2012 by
                       Koichi Suzuki
                     Michael Paquier
                     Ashutosh Bapat
http://www.pgcon.org/2012/schedule/attachments/224_Postgres-XC_tutorial.pdf



Официальная документация продукта:
http://postgres-xc.sourceforge.net/docs/1_0/

More Related Content

What's hot

За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
Ontico
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ontico
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
 
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Ontico
 
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Ontico
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Ontico
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Ontico
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Ontico
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Ontico
 
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Ontico
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
Ontico
 

What's hot (20)

За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDB
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
 
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
 
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
 
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru GroupDennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
 
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
 
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
Эволюция программно-аппаратного обеспечения хранения фотографий в Badoo / Дми...
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
 

Viewers also liked

How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
PostgreSQL-Consulting
 

Viewers also liked (12)

Иван Фролков. Tricky SQL
Иван Фролков. Tricky SQLИван Фролков. Tricky SQL
Иван Фролков. Tricky SQL
 
Илья Космодемьянский. Использование очередей асинхронных сообщений с PostgreSQL
Илья Космодемьянский. Использование очередей асинхронных сообщений с PostgreSQLИлья Космодемьянский. Использование очередей асинхронных сообщений с PostgreSQL
Илья Космодемьянский. Использование очередей асинхронных сообщений с PostgreSQL
 
Kosmodemiansky wr 2013
Kosmodemiansky wr 2013Kosmodemiansky wr 2013
Kosmodemiansky wr 2013
 
Как PostgreSQL работает с диском
Как PostgreSQL работает с дискомКак PostgreSQL работает с диском
Как PostgreSQL работает с диском
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
 
Linux internals for Database administrators at Linux Piter 2016
Linux internals for Database administrators at Linux Piter 2016Linux internals for Database administrators at Linux Piter 2016
Linux internals for Database administrators at Linux Piter 2016
 
PostgreSQL Meetup Berlin at Zalando HQ
PostgreSQL Meetup Berlin at Zalando HQPostgreSQL Meetup Berlin at Zalando HQ
PostgreSQL Meetup Berlin at Zalando HQ
 
10 things, an Oracle DBA should care about when moving to PostgreSQL
10 things, an Oracle DBA should care about when moving to PostgreSQL10 things, an Oracle DBA should care about when moving to PostgreSQL
10 things, an Oracle DBA should care about when moving to PostgreSQL
 
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 ViennaAutovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
 
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
 
Linux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performanceLinux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performance
 
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya Kosmodemiansky
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya KosmodemianskyPostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya Kosmodemiansky
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya Kosmodemiansky
 

Similar to Максим Богук. Postgres-XC

Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
drupalconf
 
hl++ Rubtsov
hl++ Rubtsovhl++ Rubtsov
hl++ Rubtsov
Ontico
 
SAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationSAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentation
Nikolay Samokhvalov
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQL
Alex Chistyakov
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
Nikolay Samokhvalov
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus Ready
HighLoad2009
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Ontico
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Nikolay Samokhvalov
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012
Alex Tutubalin
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Ontico
 

Similar to Максим Богук. Postgres-XC (20)

#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноPostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. Молодёжно
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
hl++ Rubtsov
hl++ Rubtsovhl++ Rubtsov
hl++ Rubtsov
 
SAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationSAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentation
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQL
 
Cassandra db
Cassandra dbCassandra db
Cassandra db
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus Ready
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
 
Hadoop > cascading -> cascalog (short version)
Hadoop  > cascading -> cascalog (short version)Hadoop  > cascading -> cascalog (short version)
Hadoop > cascading -> cascalog (short version)
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 

Максим Богук. Postgres-XC

  • 1. Postgresql XC Что это и с чем его есть. Maxim.Boguk@PostgreSQL-Consulting.com
  • 2. Что такое Postgresql-XC • Решение для кластеризации PostgreSQL с возможностью наращивания производительности путем добавления новых серверов. • Поддержка автоматического прозрачного шардинга данных на несколько серверов. • Честный ACID и честные транзакции в распределенной среде.
  • 3. Что такое Postgresql-XC • До разумного количества нод – возможна (при определенных условиях) почти линейная масштабируемость и по чтению и по записи. • Возможно построение высокодоступных (high-available) конфигураций • Некоторые запросы могут выполнятся частично параллельно.
  • 4. Чем не является PostgreSQL-XC • Хоть Postgresql-XC и выглядит похожим на MultiMaster он им не является. Все сервера кластера должны быть соединены сетью с минимальными задержками (читай воткнуты в один switch), никакое географически-распределенное решение с разумной производительностью построить на нем не возможно (это важный момент).
  • 5. Масштабируемость Результаты DBT-1 Производительность Количество серверов
  • 7. Где взять и какие есть версии? Официальный сайт: http://postgres-xc.sourceforge.net/ Последняя доступная версия: 1.0.1 на основе Postgresql 9.1.5 (выпущена в сентябре 2012) Версия в разработке: 1.1 на основе PostgreSQL 9.2 (ожидается в мае 2013)
  • 8. Минимальная конфигурация: • Минимальная конфигурация PostgreSQL-XC содержит 4 независимых подсистем (администрировать это все достаточно весело): 2 сервиса с данными, сервис- координатор, GTM (global transaction manager). • В принципе это все можно завести на 2 физических серверах или виртуалках.
  • 10. Транзакции и ACID • Приложение присоденившееся к любому из координаторов видит одинаковое (между всеми координаторами) и целостное представление данных. • Честный ACID без необходимости вносить правки в приложение. • Единые snapshots и видимость транзакций обеспечиваются специальным отдельным приложением GTM.
  • 11. А как же печальноизвестная CAP теорема? • PostgreSQL-XC попадает в CA угол этого треугольника. Таким образом всегда есть согласованность данных и доступность (HA требует дополнительной настройки но в целом возможен). В общем как и любое другое кластерное решение для классических баз данных.
  • 12. Обеспечение транзакционой целостности между нодами. • Для обеспечения транзакционной целостности операций затрагивающих более одной ноды – используется классический механизм 2PC (two-phase commit). • После сбоя для разбора ситуации с 2PC есть специальная утилита pgxc_clean для приведения кластера в согласованное состояние.
  • 13. Распределение данных в кластере • Два в общем то стандартных варианта: таблица целиком хранися на всех базах кластера или шардинг (про это потом подробнее) • Так как PostgreSQL-XC умеет проводить joins прямо на нодах с данными таблицы с которым часто идут Joins лучше реплицировать целиком.
  • 14. Шардинг. В каких случаях? • Таблицы логов (завершенные операции, посещения) • Таблицы с временными данными (например корзина заказа в интернет магазине) • Пользователи и их данные (шардинг по id пользователя).
  • 15. Синтаксис шардинга: • CREATE TABLE tab (…) DISTRIBUTE BY HASH(col) | MODULO(col) | REPLICATE Просто и удобно. На практике – надо очень внимательно думать о том как делать так как переделывать большую таблицу на другой режим шардинга до 1.1 очень неудобно.
  • 16. Что не надо шардить? • Таблицы-справочники и прочие глобальные данные с которыми постоянно производятся Joins (join большого обьема данных с таблицей разбитой на нескольких нодах будет весьма неэффективен). • В общем то любые статические или редкоизменяемые таблицы с большим потоком чтения.
  • 17. План простого запроса: CREATE TABLE tab1 (val int, val2 int) DISTRIBUTE BY REPLICATION TO NODE datanode_1, datanode_2; -- полная копия данных на обоих нодах EXPLAIN VERBOSE SELECT * FROM tab1 WHERE val2 = 5; -- Решаем где выполнять запрос -> Data Node Scan on tab1 Output: val, val2 -- выбрали одну из нод Node/s: datanode_1 Remote query: SELECT val, val2 FROM ONLY tab1 WHERE (val2 = 5)
  • 18. План простого запроса v2: CREATE TABLE tab1 (val int, val2 int) DISTRIBUTE BY HASH(val) TO NODE datanode_1, datanode_2; -- таблица раскидана на 2 ноды EXPLAIN VERBOSE SELECT * FROM tab1 WHERE val2 = 5; -- поиск по всем нодам -> Data Node Scan on "__REMOTE_FQS_QUERY__« Output: tab1.val, tab1.val2 -- собираем данные со всех нод Node/s: datanode_1, datanode_2 -- операции на всех нодах идут параллельно! Remote query: SELECT val, val2 FROM tab1 WHERE (val2 = 5)
  • 19. Подсчет агрегата sum(): CREATE TABLE tab1 (val int, val2 int) DISTRIBUTE BY REPLICATION TO NODE datanode_1, datanode_2; -- полная копия данных на обоих нодах EXPLAIN VERBOSE SELECT sum(val) FROM tab1 GROUP BY val2; HashAggregate --подсчет суммы на ноде-координаторе Output: sum(val), val2 -> Data Node Scan on tab1 Output: val, val2 --вытаскиваем таблицу целиком с одной из нод Node/s: datanode_1 Remote query: SELECT val, val2 FROM ONLY tab1 WHERE true
  • 20. Подсчет агрегата sum() v2: CREATE TABLE tab1 (val int, val2 int) DISTRIBUTE BY HASH(val) TO NODE datanode_1, datanode_2; -- таблица раскидана на 2 ноды EXPLAIN VERBOSE SELECT sum(val) FROM tab1 GROUP BY val2; HashAggregate Output: pg_catalog.sum((sum(tab1.val))), tab1.val2 --суммируем подитоги на координаторе ->Data Node Scan on "__REMOTE_GROUP_QUERY__" Output: sum(tab1.val), tab1.val2 Node/s: datanode_1, datanode_2 Remote query: SELECT sum(group_1.val), group_1.val2 FROM (SELECT val, val2 FROM ONLY tab1 WHERE true) group_1 GROUP BY 2 --получаем частичные суммы с каждой из нод
  • 21. А что на счет JOINS: • Joins между и с участием реплицированных таблиц, а также Joins между распределенными по одному и тому же полю в таблицах – выполняются на data- нодах напрямую. • Joins с участием распределенных таблиц по другим ключам – будут выполнены на ноде- координаторе и скорее всего это будет медленно.
  • 22. Известные ограничения. • не поддерживаются триггеры (обещают доделать в 1.1). • Нет удобной системы репартиционирования при добавлении или удалении нод (тоже обещают доделать в 1.1 но даже тогда это будет означать downtime)
  • 23. Известные ограничения часть 2. • Нет глобальных UNIQUE на распределенных таблицах. • Не поддерживаются курсоры (обещают в версии 1.1) • Не поддерживаются foreign keys между нодами (т.е. FK стого должен вести на данные расположенные на той же ноде).
  • 24. Известные ограничения часть 3: • Не поддерживается INSERT … RETURNING (опять же обещается поддержка в 1.1) • Невозможно удаление и добавление нод в кластер без полной реинициализации кластера (обещают в 1.1 тоже исправить).
  • 25. А оно надежно? • Много подсистем – много потенциальных точек отказа. Архитектура PostgreSQL-XC с самого начала предусматривает возможность дублирования всех компонентов. • Ноды с данными и ноды-координаторы представляют из слегка изменнеый PostgreSQL и поддерживают streaming репликацию для избыточности.
  • 26. Обеспечение высокой доступности: • GTM это отдельный процесс и может быть точкой отказа, поэтому для него разработан отдельный механизм синхроннго standby. • Все ноды с данными и ноды координаторы должны иметь синхронные streaming реплики. • GTM всегда используется в связке с GTM- standby.
  • 27. Backup и восстановление: • Pg_dump/pg_dumpall работают фактически так же как и для обычного PostgreSQL. • Hot-backup – требует вызова специальной команды CREATE BARRIER ‘barrier_id’ (фактически аналог вызова select pg_start_backup(‘label’); ) далее для всех нод с данными и координаторов так же как для обычного PostgreSQL.
  • 28. А зачем оно надо? • При росте проекта может сложится ситуация когда обьем данных или нагрузка доходит до того уровня когда один сервер (или даже мастер + N реплик) не справляются с нагрузкой или по причине высокого интенсивности записи в базу или по причине роста объема данных.
  • 29. А зачем оно надо? • Тогда есть вариант или делать слабосвязанную систему из многих серверов (ручной шардинг) и переписывать проект почти заново. • Или попробовать использовать PostreSQL- XC как временное или постоянное решение оставив почти 100% совместимость с single- database версий на уровне запросов.
  • 30. А зачем оно надо? • Вторая целевая группа для PostgreSQL-XC это Data Warehousing и системы аналитики: параллельное выполнение запросов на распределенных таблицах позволяет резко ускорить тяжелые аналитических запросы. • Заодно и обьем данных на каждой из нод будет поменьше.
  • 31. А стоит ли оно того? • Решать вам. Администрирование PostgreSQL- XC заметно сложнее и более трудоемкое чем администрирование простого PostgreSQL (но в общем не принципиально сложнее чем администрирование PostgreSQL в связке с Slony или Londiste). • Далеко не любой проект можно смигрировать без переделок. Но их понадобится заметно меньше чем при использовании шардинга.
  • 32. Использованные материалы: PostgreSQL-XC tutorial from PGCon2012 by Koichi Suzuki Michael Paquier Ashutosh Bapat http://www.pgcon.org/2012/schedule/attachments/224_Postgres-XC_tutorial.pdf Официальная документация продукта: http://postgres-xc.sourceforge.net/docs/1_0/