Сага о кластереСага о кластере
Олег Бартунов, Александр Коротков, Фёдор СигаевОлег Бартунов, Александр Коротков, Фёдор Сигаев
Postgres ProfessionalPostgres Professional
Highload++ 2015, МоскваHighload++ 2015, Москва
Российские разработчики
Олег Бартунов, Федор Сигаев, Александр Коротков
PostgreSQL CORE
● Locale support
● PostgreSQL extendability:
● GiST(KNN), GIN, SP-GiST
● Full Text Search (FTS)
● NoSQL (hstore, jsonb)
● Indexed regexp search
● VODKA access method (WIP)
Расширения:
● Intarray
● Pg_trgm
● Ltree
● Hstore
● plantuner
● JsQuery
● Докладчики PGCon, PGConf: 20+ докладов
● Менторы GSoC
● Коммитеры PostgreSQL (1+1 in progress)
● Организаторы конференций
● 50+ лет экспертизы PostgreSQL: разработка, аудит, консалтинг
● Novartis, Raining Data, Heroku, Engine Yard, WarGaming, Rambler, Avito, 1c
Распределенные несчастия
2PC — не серебряная пуля
Распределенные несчастия: #1
Распределенные несчастия: #1
Решение:
Сделай сам или добавь арбитра
Распределенные несчастия: #2
Распределенные несчастия: #2
Вывод:
Целостный read не имеет решения в 2PC
Политические игры
Мировые тенденции ПО
Gartner's Magic Quadrant
DB-ENGINES.COM
Gartner.Тенденции рынка СУБД
* Gartner, State of Open Source RDBMS, 2015, Donald Feinberg and Merv Adrian, April 21, 2015
будут использовать
реляционные базы данных
с открытым кодом
в 2018 году*
новых приложений существующих приложений
50%70% И
Этапы развития PostgreSQL
Стабилизация работыСтабилизация работы
Совместимость с SQL
стандартами
Совместимость с SQL
стандартами
Возможности уровня
Enterprise / простота
использования
Возможности уровня
Enterprise / простота
использования
1996 1998 2001 2015
Базовая функциональность
JDBC
MVCC
Optimizer Stats
PL/pgSQL
Стабилизация
Исправление сбоев в работе
Очистка кода
Культура совершенства
Стандарты
SQL 92 Joins
Prepared queries
Foreign Keys
Функциональность ядра
Write Ahead Log
Prepared Queries
Info. Schema
Auto Vacuum
Возможности уровня Enterprise
Потоковая репликация
Производительность
Вертикальное масштабирование
PITR
pg_upgrade
NoSQL
BDR
Параллелизм
Простота использования
Портирование на Windows
pg_basebackup
Различные инструменты
Community Todo: No Cluster !
НЕ ТОТ КЛАСТЕР !
https://wiki.postgresql.org/wiki/Todo
Кластер —
важнейшая
фича почти
всех форков !
Политические игры
Энтерпрайз хочет энтерпрайзных решений
• No Cluster in community roadmap !
Кластерные решения сбоку:
• XC→X2, XL — Huawei, 2ndQuadrant, NTT (9.5+)
• MPPDB (XC?) — Huawei (?)
• pg_shard — CitusDB (9.5+)
• FDW — EDB+NTT ( 9.5+)
• Greenplum — Pivotal (8.2)
• DTM — Postgres Professional
Есть ресурсы, а решения нет :(
Cluster Summit 2015, Vienna
Cluster Summit 2015, Vienna
● Community Todo:
• добавить КЛАСТЕР
● Продолжать развивать кластерные решения
• Не мешать друг другу
• Дружественность расширениям (кластерное
решение как расширение ?)
● Решить с DTM для 9.6
Этапы развития PostgreSQL
Совместимость с SQL
стандартами
Совместимость с SQL
стандартами
Возможности уровня
Enterprise / простота
использования
Возможности уровня
Enterprise / простота
использования
1998 2001 31.10.2015
Стандарты
● SQL 92 Joins
● Prepared queries
● Foreign Keys
Функциональность ядра
● Write Ahead Log
● Prepared Queries
● Info. Schema
● Auto Vacuum
Возможности уровня Enterprise
● Потоковая репликация
● Производительность
● Вертикальное масштабирование
● PITR
● pg_upgrade
● NoSQL
● BDR
● Параллелизм
Простота использования
● Портирование на Windows
● pg_basebackup
● Различные инструменты
Цели
● Read-Write scalability
● High availability
Задачи
● Управление распределенными
транзакциями
● Планировщик и исполнитель
распределенных запросов
● Обнаружение распределенных
взаимных блокировок
● Онлайн перераспределение
данных
● Поддержка глобальных
ограничений
● Онлайн добавление и удаление
узлов
● Средства администрирования
Горизонтальное
масштабирование
(Шардинг)
Горизонтальное
масштабирование
(Шардинг)
Приготовление кластера
Postgres Cluster Matrix
WS RS
Parallel
Read
M-M Synchr Recov. HA
Consistency
ACID BASE
Postgres-R + + + + + +
XC/XL/X2 +? + + + + +
PGCluster + +
PgPool + + +
Pl/proxy + + +
pg_shard/CituDB + + + +
Greenplum + + +
Bucardo + + + + +
BDR + + + + +
SR + +? + + +
FDW + + + +
Distributed transaction manager
Pluggable transaction API
UDT
CSP
FDW
AM
TM?
Core
eXtensible Transaction API
● XidStatus (*GetTransactionStatus)(TransactionId xid,
XLogRecPtr *lsn);
● void (*SetTransactionStatus)(TransactionId xid, int
nsubxids, TransactionId *subxids, XidStatus status,
XLogRecPtr lsn);
● Snapshot (*GetSnapshot)(Snapshot snapshot);
● TransactionId (*GetNewTransactionId)(bool isSubXact);
● TransactionId (*GetOldestXmin)(Relation rel, bool
ignoreVacuum);
● bool (*IsInProgress)(TransactionId xid);
● TransactionId (*GetGlobalTransactionId)(void);
● bool (*IsInSnapshot)(TransactionId xid, Snapshot
snapshot);
New commit callback events
● XACT_EVENT_START,
● XACT_EVENT_COMMIT,
● XACT_EVENT_PARALLEL_COMMIT,
● XACT_EVENT_ABORT,
● XACT_EVENT_PARALLEL_ABORT,
● XACT_EVENT_PREPARE,
● XACT_EVENT_PRE_COMMIT,
● XACT_EVENT_PARALLEL_PRE_COMMIT,
● XACT_EVENT_PRE_PREPARE,
● XACT_EVENT_COMMIT_PREPARED,
● XACT_EVENT_ABORT_PREPARED
Transaction Manager before patch
transam/clog.c:
GetTransactionStatus
SetTransactionStatus
transam/varsup.c:
GetNewTransactionId
ipc/procarray.c:
TransactionIdIsInProgress
GetOldestXmin
GetSnapshotData
time/tqual.c:
XidInMVCCSnapshot
Transaction Manager after patch
transam/clog.c:
GetTransactionStatus
SetTransactionStatus
transam/varsup.c:
GetNewTransactionId
ipc/procarray.c:
TransactionIdIsInProgress
GetOldestXmin
GetSnapshotData
time/tqual.c:
XidInMVCCSnapshot
Transaction
Manager
Distributed Transaction Manager
transam/clog.c:
GetTransactionStatus
SetTransactionStatus
transam/varsup.c:
GetNewTransactionId
ipc/procarray.c:
TransactionIdIsInProgress
GetOldestXmin
GetSnapshotData
time/tqual.c:
XidInMVCCSnapshot
Transaction
Manager
pg_dtm.so
Different DTM implementations
Local
transactions
2PC Arbiter Examples
Snapshot
sharing
XL, DTM
Timestamp Spanner,
Cockroach,
tsDTM
Incremental SAP HANA
DTM architecture
PostgreSQL
Instance 1
PostgreSQL
Instance 2
PostgreSQL
Instance 3
Arbiter
master
Arbiter
slave 1
Arbiter
slave 2
synchronous
replication
asynchronous
replication
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;
Arbiter protocol (begin)
dtmd
node a
node b
begin
xid, snaphsot, gxmin
join(xid)
snaphsot, gxmin
Arbiter protocol (end)
dtmd
node a
node b
commit(xid)
ok
commit(xid)
ok
DTM transaction control flow
Node 1
Node 2
Node 3
dtm_begin_
transaction
dtm_join_
transaction
dtm_join_
transaction
XID
begin
transaction
begin
transaction
begin
transaction
commit
transaction
commit
transaction
commit
transaction
Arbiter
Assign XID Vote
tsDTM architecture
PostgreSQL
Instance 1
PostgreSQL
Instance 2
PostgreSQL
Instance 3
tsDTM transaction control flowsnapshot
prepare
transaction
Node 1
Node 2
Node 3
prepare
transaction
prepare
transaction
commit
prepared
commit
prepared
commit
prepared
max
CSN
Lightweight two-phase commit
XactLogCommitRecord
(flush changes in WAL)
ProcArrayEndTransaction
(mark transaction as
completed)
ResourceOwnerRelease
(release transaction locks)
TransactionTreeSetCommitTsData
(set transaction status
in CLOG)
Arbiter
Transaction status
Multiplexing
Unix domain
sockets
Arbiter
Unix domain
sockets
TCP sockets
sockhub
backends
backends
Node 1
Node 2
Example of interaction with DTM
xid := execQuery(con1, "select dtm_begin_transaction()")
exec(con2, "select dtm_join_transaction($1)", xid)
exec(con1, "begin transaction")
exec(con2, "begin transaction")
exec(con1, "update t set v = v + $1 where u=$2", amount,
account1)
exec(con2, "update t set v = v - $1 where u=$2", amount,
account2)
var wg sync.WaitGroup
wg.Add(2)
asyncExec(con1, “commit”, &wg)
asyncExec(cnn2, “commit”, &wg)
wg.Wait()
Example of interaction with tsDTM
exec(con1, "begin transaction")
exec(con2, "begin transaction")
snapshot = execQuery(con1, "select dtm_extend($1)", gtid)
snapshot = execQuery(con2, "select dtm_access($1, $2)", snapshot, gtid)
exec(con1, "update t set v = v + $1 where u=$2", amount, account1)
exec(con2, "update t set v = v - $1 where u=$2", amount, account2)
exec(con1, "prepare transaction '" + gtid + "'")
exec(con2, "prepare transaction '" + gtid + "'")
exec(con1, "select dtm_begin_prepare($1)", gtid)
exec(con2, "select dtm_begin_prepare($1)", gtid)
csn = execQuery(con1, "select dtm_prepare($1, 0)", gtid)
csn = execQuery(con2, "select dtm_prepare($1, $2)", gtid, csn)
exec(con1, "select dtm_end_prepare($1, $2)", gtid, csn)
exec(con2, "select dtm_end_prepare($1, $2)", gtid, csn)
exec(con1, "commit prepared '" + gtid + "'")
exec(con2, "commit prepared '" + gtid + "'")
Example of using FDW
exec(con, "select dtm_begin_transaction()")
exec(con, "begin transaction")
exec(con, "update t set v = v + $1 where u=$2",
amount, account1)
exec(con, "update t set v = v - $1 where u=$2",
amount, account2)
exec(con, “commit”)
Example of using pg_shard
exec(con, "begin transaction")
exec(con, "update t set v = v + $1 where u=$2",
amount, account1)
exec(con, "update t set v = v - $1 where u=$2",
amount, account2)
exec(con, “commit”)
Test configuration
Client 1 Client 2
Worker 2
Client 2Client 2Client 2
Worker 1 Worker 1 Worker 1
Arbiter
Performance measurement
1 2 3 4
0
10
20
30
40
50
60
70
80
90
100
pg_shard
fdw
w/o DTM
with DTM
Simple bank debit/credit benchmark (a-la TPC-A)
Two clients with 60 writers
kTPS
Nodes
Multimaster performance
1 2 3 4
0
50
100
150
200
250
300
350
400
450
no writers
8 writers
Simple update/select queries
Three clients with 140 readers
kTPS
Nodes
Roadmap
● Add XTM patch to PostgreSQL 9.6
● Experiment with different DTM implementations
● Provide integration of DTM with different cluster
solutions (pg_shard, FDW, XL,...)
● Implement multimaster on top of DTM
Postgres Cluster Matrix
WS RS
Parallel
Read
M-M Synchr Recov. HA
Consistency
ACID BASE
Postgres-R + + + + + +
XC/XL/X2 +? + + + + +
PGCluster + +
PgPool + + +
Pl/proxy + + +
pg_shard/Citus + + + + + +
Greenplum + + +
Bucardo + + + + +
BDR + + + + +
SR + +? + + +
FDW + + + + +
Спасибо за внимание!

More Related Content

PDF
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
PDF
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
PPTX
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
PDF
Обзор перспективных баз данных для highload / Юрий Насретдинов
PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
PDF
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Обзор перспективных баз данных для highload / Юрий Насретдинов
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...

What's hot (20)

PPTX
Поиск наизнанку
PDF
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
PDF
Дмитрий Новиков - Tarantool в Badoo
PDF
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
PPTX
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
PDF
pgconf.ru 2015 avito postgresql
PPTX
Jinba - frontendconf.ru/2015
PDF
Современная операционная система: что надо знать разработчику / Александр Кри...
PDF
Чему мы научились разрабатывая микросервисы?
PDF
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
PDF
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
PDF
Борис Каплуновский, Aviasales.ru
PDF
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
PPTX
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
PDF
Нагруженный поиск на Sphinx
PDF
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
PDF
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
PDF
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
PPTX
обзор архитектуры и подсистем деплоя и мониторинга
PPTX
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Поиск наизнанку
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Дмитрий Новиков - Tarantool в Badoo
Доменно специфичные базы данных и рассылка Aviasales, Борис Каплуновский (Avi...
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
pgconf.ru 2015 avito postgresql
Jinba - frontendconf.ru/2015
Современная операционная система: что надо знать разработчику / Александр Кри...
Чему мы научились разрабатывая микросервисы?
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Борис Каплуновский, Aviasales.ru
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
Нагруженный поиск на Sphinx
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
обзор архитектуры и подсистем деплоя и мониторинга
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Ad

Viewers also liked (20)

PDF
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
PDF
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
PDF
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
PDF
NoSQL - неспроста ли это ЖЖЖ / Даниил Подольский (inCaller.org)
PDF
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...
PPTX
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
PPTX
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
PDF
Как мы сделали ровную балансировку нагрузки на фронтенд-кластере / Насретдино...
PPTX
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
PDF
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
PPTX
Как устроен поиск / Андрей Аксенов (Sphinx)
PDF
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
PDF
PostgreSQL в высоконагруженных проектах
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
PDF
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
PPTX
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
PPTX
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
PDF
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
PPT
Tarantool: как сэкономить миллион долларов на базе данных на высоконагруженно...
PDF
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
NoSQL - неспроста ли это ЖЖЖ / Даниил Подольский (inCaller.org)
Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепели...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Как мы сделали ровную балансировку нагрузки на фронтенд-кластере / Насретдино...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как устроен поиск / Андрей Аксенов (Sphinx)
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
PostgreSQL в высоконагруженных проектах
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
Tarantool: как сэкономить миллион долларов на базе данных на высоконагруженно...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Ad

Similar to Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в постгресе / О.Бартунов, А.Коротков, Ф.Сигаев (20)

ODP
SECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследования
PPTX
PPT
SAMag2007 Conference: PostgreSQL 8.3 presentation
PPTX
DirectX12 Graphics and Performance
PDF
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
PDF
GAE - плюсы/минусы/подводные камни
PDF
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
PPTX
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
PPTX
GRANIT — Global Russian Advanced Network Initiative
PDF
Место Postgres/PostGIS в экосистеме открытого ПО
PDF
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
PPTX
OpenACC short review
PDF
Internationalization and localization of the python applications with gettext...
PPTX
Когда в C# не хватает C++ . Часть 3.
PDF
Как приручить дракона: введение в LLVM
PDF
Tech Talks @NSU: Как приручить дракона: введение в LLVM
PDF
Сверхоптимизация кода на Python
PDF
Сверхоптимизация кода на Python
PPTX
Применение фреймворка GStreamer в системе видеонаблюдения
PPTX
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
SECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследования
SAMag2007 Conference: PostgreSQL 8.3 presentation
DirectX12 Graphics and Performance
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
GAE - плюсы/минусы/подводные камни
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
GRANIT — Global Russian Advanced Network Initiative
Место Postgres/PostGIS в экосистеме открытого ПО
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
OpenACC short review
Internationalization and localization of the python applications with gettext...
Когда в C# не хватает C++ . Часть 3.
Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Сверхоптимизация кода на Python
Сверхоптимизация кода на Python
Применение фреймворка GStreamer в системе видеонаблюдения
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...

Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в постгресе / О.Бартунов, А.Коротков, Ф.Сигаев

  • 1. Сага о кластереСага о кластере Олег Бартунов, Александр Коротков, Фёдор СигаевОлег Бартунов, Александр Коротков, Фёдор Сигаев Postgres ProfessionalPostgres Professional Highload++ 2015, МоскваHighload++ 2015, Москва
  • 2. Российские разработчики Олег Бартунов, Федор Сигаев, Александр Коротков PostgreSQL CORE ● Locale support ● PostgreSQL extendability: ● GiST(KNN), GIN, SP-GiST ● Full Text Search (FTS) ● NoSQL (hstore, jsonb) ● Indexed regexp search ● VODKA access method (WIP) Расширения: ● Intarray ● Pg_trgm ● Ltree ● Hstore ● plantuner ● JsQuery ● Докладчики PGCon, PGConf: 20+ докладов ● Менторы GSoC ● Коммитеры PostgreSQL (1+1 in progress) ● Организаторы конференций ● 50+ лет экспертизы PostgreSQL: разработка, аудит, консалтинг ● Novartis, Raining Data, Heroku, Engine Yard, WarGaming, Rambler, Avito, 1c
  • 3. Распределенные несчастия 2PC — не серебряная пуля
  • 11. Gartner.Тенденции рынка СУБД * Gartner, State of Open Source RDBMS, 2015, Donald Feinberg and Merv Adrian, April 21, 2015 будут использовать реляционные базы данных с открытым кодом в 2018 году* новых приложений существующих приложений 50%70% И
  • 12. Этапы развития PostgreSQL Стабилизация работыСтабилизация работы Совместимость с SQL стандартами Совместимость с SQL стандартами Возможности уровня Enterprise / простота использования Возможности уровня Enterprise / простота использования 1996 1998 2001 2015 Базовая функциональность JDBC MVCC Optimizer Stats PL/pgSQL Стабилизация Исправление сбоев в работе Очистка кода Культура совершенства Стандарты SQL 92 Joins Prepared queries Foreign Keys Функциональность ядра Write Ahead Log Prepared Queries Info. Schema Auto Vacuum Возможности уровня Enterprise Потоковая репликация Производительность Вертикальное масштабирование PITR pg_upgrade NoSQL BDR Параллелизм Простота использования Портирование на Windows pg_basebackup Различные инструменты
  • 13. Community Todo: No Cluster ! НЕ ТОТ КЛАСТЕР ! https://wiki.postgresql.org/wiki/Todo
  • 15. Политические игры Энтерпрайз хочет энтерпрайзных решений • No Cluster in community roadmap ! Кластерные решения сбоку: • XC→X2, XL — Huawei, 2ndQuadrant, NTT (9.5+) • MPPDB (XC?) — Huawei (?) • pg_shard — CitusDB (9.5+) • FDW — EDB+NTT ( 9.5+) • Greenplum — Pivotal (8.2) • DTM — Postgres Professional Есть ресурсы, а решения нет :(
  • 17. Cluster Summit 2015, Vienna ● Community Todo: • добавить КЛАСТЕР ● Продолжать развивать кластерные решения • Не мешать друг другу • Дружественность расширениям (кластерное решение как расширение ?) ● Решить с DTM для 9.6
  • 18. Этапы развития PostgreSQL Совместимость с SQL стандартами Совместимость с SQL стандартами Возможности уровня Enterprise / простота использования Возможности уровня Enterprise / простота использования 1998 2001 31.10.2015 Стандарты ● SQL 92 Joins ● Prepared queries ● Foreign Keys Функциональность ядра ● Write Ahead Log ● Prepared Queries ● Info. Schema ● Auto Vacuum Возможности уровня Enterprise ● Потоковая репликация ● Производительность ● Вертикальное масштабирование ● PITR ● pg_upgrade ● NoSQL ● BDR ● Параллелизм Простота использования ● Портирование на Windows ● pg_basebackup ● Различные инструменты Цели ● Read-Write scalability ● High availability Задачи ● Управление распределенными транзакциями ● Планировщик и исполнитель распределенных запросов ● Обнаружение распределенных взаимных блокировок ● Онлайн перераспределение данных ● Поддержка глобальных ограничений ● Онлайн добавление и удаление узлов ● Средства администрирования Горизонтальное масштабирование (Шардинг) Горизонтальное масштабирование (Шардинг)
  • 20. Postgres Cluster Matrix WS RS Parallel Read M-M Synchr Recov. HA Consistency ACID BASE Postgres-R + + + + + + XC/XL/X2 +? + + + + + PGCluster + + PgPool + + + Pl/proxy + + + pg_shard/CituDB + + + + Greenplum + + + Bucardo + + + + + BDR + + + + + SR + +? + + + FDW + + + +
  • 23. eXtensible Transaction API ● XidStatus (*GetTransactionStatus)(TransactionId xid, XLogRecPtr *lsn); ● void (*SetTransactionStatus)(TransactionId xid, int nsubxids, TransactionId *subxids, XidStatus status, XLogRecPtr lsn); ● Snapshot (*GetSnapshot)(Snapshot snapshot); ● TransactionId (*GetNewTransactionId)(bool isSubXact); ● TransactionId (*GetOldestXmin)(Relation rel, bool ignoreVacuum); ● bool (*IsInProgress)(TransactionId xid); ● TransactionId (*GetGlobalTransactionId)(void); ● bool (*IsInSnapshot)(TransactionId xid, Snapshot snapshot);
  • 24. New commit callback events ● XACT_EVENT_START, ● XACT_EVENT_COMMIT, ● XACT_EVENT_PARALLEL_COMMIT, ● XACT_EVENT_ABORT, ● XACT_EVENT_PARALLEL_ABORT, ● XACT_EVENT_PREPARE, ● XACT_EVENT_PRE_COMMIT, ● XACT_EVENT_PARALLEL_PRE_COMMIT, ● XACT_EVENT_PRE_PREPARE, ● XACT_EVENT_COMMIT_PREPARED, ● XACT_EVENT_ABORT_PREPARED
  • 25. Transaction Manager before patch transam/clog.c: GetTransactionStatus SetTransactionStatus transam/varsup.c: GetNewTransactionId ipc/procarray.c: TransactionIdIsInProgress GetOldestXmin GetSnapshotData time/tqual.c: XidInMVCCSnapshot
  • 26. Transaction Manager after patch transam/clog.c: GetTransactionStatus SetTransactionStatus transam/varsup.c: GetNewTransactionId ipc/procarray.c: TransactionIdIsInProgress GetOldestXmin GetSnapshotData time/tqual.c: XidInMVCCSnapshot Transaction Manager
  • 28. Different DTM implementations Local transactions 2PC Arbiter Examples Snapshot sharing XL, DTM Timestamp Spanner, Cockroach, tsDTM Incremental SAP HANA
  • 29. DTM architecture PostgreSQL Instance 1 PostgreSQL Instance 2 PostgreSQL Instance 3 Arbiter master Arbiter slave 1 Arbiter slave 2 synchronous replication asynchronous replication
  • 30. 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;
  • 31. Arbiter protocol (begin) dtmd node a node b begin xid, snaphsot, gxmin join(xid) snaphsot, gxmin
  • 32. Arbiter protocol (end) dtmd node a node b commit(xid) ok commit(xid) ok
  • 33. DTM transaction control flow Node 1 Node 2 Node 3 dtm_begin_ transaction dtm_join_ transaction dtm_join_ transaction XID begin transaction begin transaction begin transaction commit transaction commit transaction commit transaction Arbiter Assign XID Vote
  • 35. tsDTM transaction control flowsnapshot prepare transaction Node 1 Node 2 Node 3 prepare transaction prepare transaction commit prepared commit prepared commit prepared max CSN
  • 36. Lightweight two-phase commit XactLogCommitRecord (flush changes in WAL) ProcArrayEndTransaction (mark transaction as completed) ResourceOwnerRelease (release transaction locks) TransactionTreeSetCommitTsData (set transaction status in CLOG) Arbiter Transaction status
  • 37. Multiplexing Unix domain sockets Arbiter Unix domain sockets TCP sockets sockhub backends backends Node 1 Node 2
  • 38. Example of interaction with DTM xid := execQuery(con1, "select dtm_begin_transaction()") exec(con2, "select dtm_join_transaction($1)", xid) exec(con1, "begin transaction") exec(con2, "begin transaction") exec(con1, "update t set v = v + $1 where u=$2", amount, account1) exec(con2, "update t set v = v - $1 where u=$2", amount, account2) var wg sync.WaitGroup wg.Add(2) asyncExec(con1, “commit”, &wg) asyncExec(cnn2, “commit”, &wg) wg.Wait()
  • 39. Example of interaction with tsDTM exec(con1, "begin transaction") exec(con2, "begin transaction") snapshot = execQuery(con1, "select dtm_extend($1)", gtid) snapshot = execQuery(con2, "select dtm_access($1, $2)", snapshot, gtid) exec(con1, "update t set v = v + $1 where u=$2", amount, account1) exec(con2, "update t set v = v - $1 where u=$2", amount, account2) exec(con1, "prepare transaction '" + gtid + "'") exec(con2, "prepare transaction '" + gtid + "'") exec(con1, "select dtm_begin_prepare($1)", gtid) exec(con2, "select dtm_begin_prepare($1)", gtid) csn = execQuery(con1, "select dtm_prepare($1, 0)", gtid) csn = execQuery(con2, "select dtm_prepare($1, $2)", gtid, csn) exec(con1, "select dtm_end_prepare($1, $2)", gtid, csn) exec(con2, "select dtm_end_prepare($1, $2)", gtid, csn) exec(con1, "commit prepared '" + gtid + "'") exec(con2, "commit prepared '" + gtid + "'")
  • 40. Example of using FDW exec(con, "select dtm_begin_transaction()") exec(con, "begin transaction") exec(con, "update t set v = v + $1 where u=$2", amount, account1) exec(con, "update t set v = v - $1 where u=$2", amount, account2) exec(con, “commit”)
  • 41. Example of using pg_shard exec(con, "begin transaction") exec(con, "update t set v = v + $1 where u=$2", amount, account1) exec(con, "update t set v = v - $1 where u=$2", amount, account2) exec(con, “commit”)
  • 42. Test configuration Client 1 Client 2 Worker 2 Client 2Client 2Client 2 Worker 1 Worker 1 Worker 1 Arbiter
  • 43. Performance measurement 1 2 3 4 0 10 20 30 40 50 60 70 80 90 100 pg_shard fdw w/o DTM with DTM Simple bank debit/credit benchmark (a-la TPC-A) Two clients with 60 writers kTPS Nodes
  • 44. Multimaster performance 1 2 3 4 0 50 100 150 200 250 300 350 400 450 no writers 8 writers Simple update/select queries Three clients with 140 readers kTPS Nodes
  • 45. Roadmap ● Add XTM patch to PostgreSQL 9.6 ● Experiment with different DTM implementations ● Provide integration of DTM with different cluster solutions (pg_shard, FDW, XL,...) ● Implement multimaster on top of DTM
  • 46. Postgres Cluster Matrix WS RS Parallel Read M-M Synchr Recov. HA Consistency ACID BASE Postgres-R + + + + + + XC/XL/X2 +? + + + + + PGCluster + + PgPool + + + Pl/proxy + + + pg_shard/Citus + + + + + + Greenplum + + + Bucardo + + + + + BDR + + + + + SR + +? + + + FDW + + + + +