Сага о кластере. Все что вы хотели знать про...

47
Сага о кластере Сага о кластере Олег Бартунов, Александр Коротков, Фёдор Сигаев Олег Бартунов, Александр Коротков, Фёдор Сигаев Postgres Professional Postgres Professional Highload++ 2015, Москва Highload++ 2015, Москва

Upload: ontico

Post on 16-Apr-2017

1.456 views

Category:

Engineering


2 download

TRANSCRIPT

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

Сага о кластереСага о кластере

Олег Бартунов, Александр Коротков, Фёдор СигаевОлег Бартунов, Александр Коротков, Фёдор СигаевPostgres ProfessionalPostgres Professional

Highload++ 2015, МоскваHighload++ 2015, Москва

Page 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

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

Распределенные несчастия

2PC — не серебряная пуля

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

Распределенные несчастия: #1

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

Распределенные несчастия: #1

Решение:

Сделай сам или добавь арбитра

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

Распределенные несчастия: #2

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

Распределенные несчастия: #2

Вывод:Целостный read не имеет решения в 2PC

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

Политические игры

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

Мировые тенденции ПО

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

Gartner's Magic Quadrant

DB-ENGINES.COM

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

Gartner.Тенденции рынка СУБД

* Gartner, State of Open Source RDBMS, 2015, Donald Feinberg and Merv Adrian, April 21, 2015

будут использовать реляционные базы данных

с открытым кодом в 2018 году*

новых приложений существующих приложений

50%70% И

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

Этапы развития PostgreSQL

Стабилизация работыСтабилизация работы Совместимость с SQLстандартами

Совместимость с SQLстандартами

Возможности уровняEnterprise / простота

использования

Возможности уровняEnterprise / простота

использования

1996 1998 2001 2015Базовая функциональность

JDBCMVCCOptimizer StatsPL/pgSQL

СтабилизацияИсправление сбоев в работеОчистка кодаКультура совершенства

СтандартыSQL 92 JoinsPrepared queriesForeign Keys

Функциональность ядраWrite Ahead LogPrepared QueriesInfo. SchemaAuto Vacuum

Возможности уровня Enterprise Потоковая репликацияПроизводительностьВертикальное масштабированиеPITRpg_upgradeNoSQLBDRПараллелизм

Простота использованияПортирование на Windows pg_basebackupРазличные инструменты

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

Community Todo: No Cluster !

НЕ ТОТ КЛАСТЕР !

https://wiki.postgresql.org/wiki/Todo

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

Кластер — важнейшаяфича почти всех форков !

Page 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

Есть ресурсы, а решения нет :(

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

Cluster Summit 2015, Vienna

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

Cluster Summit 2015, Vienna

● Community Todo: • добавить КЛАСТЕР

● Продолжать развивать кластерные решения• Не мешать друг другу• Дружественность расширениям (кластерное

решение как расширение ?)● Решить с DTM для 9.6

Page 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

Задачи● Управление распределенными

транзакциями● Планировщик и исполнитель

распределенных запросов● Обнаружение распределенных

взаимных блокировок● Онлайн перераспределение

данных● Поддержка глобальных

ограничений● Онлайн добавление и удаление

узлов● Средства администрирования

Горизонтальноемасштабирование

(Шардинг)

Горизонтальноемасштабирование

(Шардинг)

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

Приготовление кластера

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

Postgres Cluster Matrix

WS RS ParallelRead

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 + + + +

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

Distributed transaction manager

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

Pluggable transaction API

UDT

CSP

FDW

AMTM?

Core

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

eXtensible Transaction API

● XidStatus (*GetTransactionStatus)(TransactionId xid,XLogRecPtr *lsn);

● void (*SetTransactionStatus)(TransactionId xid, intnsubxids, 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);

Page 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

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

Transaction Manager before patch

transam/clog.c: GetTransactionStatus SetTransactionStatus transam/varsup.c: GetNewTransactionId ipc/procarray.c: TransactionIdIsInProgress GetOldestXmin GetSnapshotData time/tqual.c: XidInMVCCSnapshot

Page 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

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

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

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

Different DTM implementations

Localtransactions

2PC Arbiter Examples

Snapshotsharing

XL, DTM

Timestamp Spanner,Cockroach,tsDTM

Incremental SAP HANA

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

DTM architecture

PostgreSQLInstance 1

PostgreSQLInstance 2

PostgreSQLInstance 3

Arbitermaster

Arbiterslave 1

Arbiterslave 2

synchronousreplication

asynchronousreplication

Page 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;

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

Arbiter protocol (begin)

dtmd

node a

node b

begin

xid, snaphsot, gxmin

join(xid)

snaphsot, gxmin

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

Arbiter protocol (end)

dtmd

node a

node b

commit(xid)

ok

commit(xid)

ok

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

DTM transaction control flow

Node 1

Node 2

Node 3

dtm_begin_transaction

dtm_join_transaction

dtm_join_transaction

XID

begintransaction

begintransaction

begintransaction

committransaction

committransaction

committransaction

Arbiter

Assign XID Vote

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

tsDTM architecture

PostgreSQLInstance 1

PostgreSQLInstance 2

PostgreSQLInstance 3

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

tsDTM transaction control flowsn

a psh

ot

prepare transaction

Node 1

Node 2

Node 3

prepare transaction

prepare transaction

commit prepared

commit prepared

commit prepared

max

CSN

Page 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

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

Multiplexing

Unix domainsockets

Arbiter

Unix domainsockets

TCP sockets

sockhub

backends

backends

Node 1

Node 2

Page 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.WaitGroupwg.Add(2)asyncExec(con1, “commit”, &wg)asyncExec(cnn2, “commit”, &wg)wg.Wait()

Page 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 + "'")

Page 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”)

Page 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”)

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

Test configuration

Client 1 Client 2

Worker 2

Client 2Client 2Client 2

Worker 1 Worker 1 Worker 1

Arbiter

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

Performance measurement

1 2 3 40

10

20

30

40

50

60

70

80

90

100

pg_shardfdww/o DTMwith DTM

Simple bank debit/credit benchmark (a-la TPC-A) Two clients with 60 writers

kTPS

Nodes

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

Multimaster performance

1 2 3 40

50

100

150

200

250

300

350

400

450

no writers8 writers

Simple update/select queries Three clients with 140 readers

kTPS

Nodes

Page 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

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

Postgres Cluster Matrix

WS RS ParallelRead

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 + + + + +

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

Спасибо за внимание!