В докладе будет рассказано про горизонтальное масштабирование, варианты кластера вокруг Pg, над каким вариантом кластера работает Postgres Professional, архитектурные и технологические задачи и результаты первых тестов
3. Кластер — это непросто
● Write or Read or Both scalability
● HA
● Географическое разнесение
● Функциональное разнесение
● Филиалы или выездные сотрудники
● Требования к консистентности (согласованности)
11. Транзакции в PgSQL
Сессия 1 Сессия 2
# begin;
# select ctid, xmin, xmax, *
from foo;
ctid | xmin | xmax | id | val
-------+------+------+----+-----
(0,1) | 693 | 0 | 1 | 111
# update foo set val=222;
# select ctid, xmin, xmax, *
from foo;
ctid | xmin | xmax | id | val
-------+------+------+----+-----
(0,2) | 694 | 0 | 1 | 222
# select txid_current();
txid_current
--------------
694
# begin;
# select ctid, xmin, xmax, *
from foo;
ctid | xmin | xmax | id | val
-------+------+------+----+-----
(0,1) | 693 | 0 | 1 | 111
# select ctid, xmin, xmax, *
from foo;
ctid | xmin | xmax | id | val
-------+------+------+----+-----
(0,1) | 693 | 694 | 1 | 111
12. Транзакции в PgSQL
Tuple виден, если (Read Commited)
Xmin закоммичен
Xmax == 0 или не закоммичен
Tuple виден, если (Repeatable Read)
Xmin закоммичен
Xmin < Current XID и он закончен до старта нашей транзакции
Xmax == 0 или не закоммичен или Xmax > Current XID или не закончен до
нашего старта
13. Транзакции в PgSQL
Сессия 1 Сессия 2
# begin;
# select ctid, xmin, xmax, * from foo;
ctid | xmin | xmax | id | val
-------+------+------+----+-----
(0,1) | 697 | 0 | 1 | 111
(0,2) | 697 | 0 | 2 | 222
# update foo set val = 333 where id = 1;
# select ctid, xmin, xmax, * from foo;
ctid | xmin | xmax | id | val
-------+------+------+----+-----
(0,2) | 697 | 699 | 2 | 222
(0,3) | 698 | 0 | 1 | 333
# update foo set val = 555 where id = 2;
-- ждем 2-ую сессию
# begin;
# select ctid, xmin, xmax, * from foo;
ctid | xmin | xmax | id | val
-------+------+------+----+-----
(0,1) | 697 | 0 | 1 | 111
(0,2) | 697 | 0 | 2 | 222
# update foo set val = 444 where id = 2;
# select ctid, xmin, xmax, * from foo;
ctid | xmin | xmax | id | val
-------+------+------+----+-----
(0,1) | 697 | 698 | 1 | 111
(0,4) | 699 | 0 | 2 | 444
# update foo set val = 666 where id = 1;
-- DEADLOCK!!
Count(*) быстрым не будет!
19. Что получаем
● Несколько нод имеют одно и тоже
представление о транзакциях/снапшотах
● Уже можно самостоятельно организовывать
распределенную транзакцию с атомарным
(sic!) коммитом
● Если подключить БД с такой же семантикой —
гетерогенная распределенная транзакция!
● Можно сочетать c pg_shard/FDW!
20. Что не получаем
● Есть SPOF
● Оно же узкое место при некоторых нагрузках
● Его ж майнтайнить надо!
23. DTM from client's point of view
Primary server Secondary server
create extension pg_dtm; create extension pg_dtm;
select dtm_begin_transaction();
begin transaction;
update...;
commit;
select dtm_join_transaction(xid);
begin transaction;
update...;
commit;
24. Идея!
● Есть интерфейс — ок
● Есть семантика — ок
● А почему нужка какая-то искусственная
монотонная последовательность?!
32. Postgres Professional
● Обнаружение сдохшего узла
● Его восстановление (в т.ч. полной заливкой)
● Добавление нового узла (реконфигурирование)
● Знание о кластере синхронизируется raft-
протоколом
● MM-HA-NM внутренний резиз прямо сейчас!
33. 33
Postgres Professional
Российский вендор PostgreSQL в России
●
Поддержка, разработка, консалтинг, обучение
●
Тему технологической независимости СУБД пропагандируем с 2011 г.
●
Члены международного сообщества
●
Участники и спонсоры международных конференций (Канада, Австрия,
Бразилия)
●
PgConf.Russia 2015 и 2016 - крупнейшие в мире конференция по
PostgreSQL
В направлениях, где мы ведем разработку, PostgreSQL
является лидером* среди РСУБД
* геоинформационные системы, слабоструктурированные данные,
полнотекстовый поиск, расширяемость
Все российские ключевые международно признанные
разработчики PostgreSQL работают в нашей компании
В нашей команде 4 кандидата наук: 3 – по PostgreSQL и технологиям БД.
Сотрудничаем с МГУ и СПбГУ.