pg day'14 russia, postgresql в avito.ru, Михаил Тюрин

31
PostgreSQL avito.ru Михаил Тюрин DBA, руководитель группы pgday.ru 2014

Upload: pgdayrussia

Post on 14-Dec-2014

244 views

Category:

Software


3 download

DESCRIPTION

Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL. С момента старта проекта на PostgreSQL были возложены серьёзные задачи. Это во многом предопределило успешное развитие всего продукта. Вокруг СУБД выстроены основные компоненты архитектуры, при этом сами базы берут на себя львиную долю обработки пользовательских запросов. Набор фич и расширений, легендарная надёжность PostgreSQL, наличие встроенной репликации, средств резервирования и архивирования — весь потенциал нашел своё воплощение, а наличие открытого профессионального комьюнити не оставляет шансов к неэффективной реализации. В докладе будет дан обзор развития подсистем, сосредоточенных вокруг PostgreSQL, представлены параметры и режимы функционирования. Будут описаны успешные решения в рамках отдельного PostgreSQL-кластера и при распределенной обработке данных, приведены текущие вызовы, связанные с продолжающимся активным ростом проекта.

TRANSCRIPT

Page 1: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

PostgreSQL avito.ruМихаил Тюрин DBA, руководитель группы !!pgday.ru 2014

Page 2: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

avito.ru• самая большая доска объявлений в России

(Европе)

• не только ru и не только сайт

• быстрый рост: до 250М hits/day за 5 лет

• до 1M новых объявлений в день

• ежемесячная аудитории 50M (5M/day)

Page 3: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

0

30 000 000

60 000 000

90 000 000

120 000 000

150 000 000

180 000 000

Дек 11 Апр 12 Авг 12 Дек 12 Апр 13 Авг 13 Дек 13 Апр 14

pageviews

Page 4: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

о чем доклад• ретроспектива

• место в архитектуре

• параметры эксплуатации

• ключевые решения

• команда разработки

• текущие вызовы

Page 5: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

начало

• сайт ru

• web backoffice

• ~10 человек вся компания // включая всех

Page 6: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

а сейчас

• сайты: Россия, Украина, Марокко, Египет

• backoffice: support, moderation, bi, …

• ! mobile: web, iOS, android, WP

• api: mobile apps, partners, …

• 500+ человек // кто все эти люди?!

Page 7: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

как было

nginx

php (не fpm)

postgres memcached

Page 8: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

как получилось

balancers app-nodes

static-nodes

postgresql

sphinx

redis

memcached

mongodbfluentd

pgbouncer

haproxytwemproxy

twemproxy

vertica

postfix

sys-node

Page 9: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

еще раз• app

• sys

• sphinx

• vertica

• postgres

• redis — дампится в базу

Page 10: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

php• pgbouncer в транзакшин режиме

• pdo с патчем

• свой класс

• ленивые коннекты и транзакция

• управление транзакциями

• OnCommit

Page 11: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

как такое получилосьCAP

ПоддержкаСообщество

Порогвхождения

СкоростьвнедренияПроизводительность

Возможностьрасширения

Удобствов работе

Page 12: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

хайлоад 1!

• IUD мастера 1+K/s

!

• transactions master 2K/s

Page 13: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

хайлоад 2• transactions repca 5K/s

• cpu - 6-ядер

Page 14: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

хайлоад 3• размер мастер 1+TB

• латенси мастера - ОК

• запись на мастер - avg 40MB/s

• iops - 2-20K

Page 15: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

среда• ( php + pdo => pgbouncer ) ==> ( pgbouncer => postgres )

• ! postgres 92 // pg_upgrade: 83 > 84 > 90 >> 92 >> …

• >> ? 94/95: fdw/json

• modules: hstore, intarray, pg_buffercahce, dblink, auto_explaine, plproxy, pg_stat_statements, pgstattuple

• plpgsql/sql: бизнес логика

• plperlu: csv, files; plpythonu: json, zip

Page 16: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

далее• python + psycopg2; perl + DBI; bash + psql

• skytools2: londiste, pgq, php/python consumer, php deamon

• munin + собственные плагины («системные» / «продуктовые»)

• собственные скрипты

• архив: pitr + pbzip2 (4 потока)

• myvac, truncator, optimazer, rotator

Page 17: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

подсистемы• сайт

• мастер базы — синхронная запись (+очереди)

• wal реплика основного мастера — чтение

• pgq реплика «активных айтимов» — чтение + индексация

• pgq платежная реплика — чтение

• хранилище (архив внутри) — 8 нод по 2 базы

Page 18: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

далее

• индексация сайта / индексация админки

• експорт в dwh

• xrpcd: денормализация, геокодер, …

• ! архив и резервирование ВСЕГО

Page 19: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

repca• реплика активных айтимов

• матвью — активные айтимы

• londiste с мастера на реплику // PGQ!

• реплика в шаред буферах — ОК

• резервирование — ! два коснумера на одну очредь (knowhow)

Page 20: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

repca — indexer• sphinx

• ! pause replication

• 10 indexers

• uftp + rsync

• monitoring

• тоже два

Page 21: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

archive + (!hot)standby• pitr

• в nfs по ssh через standby

• сжатие валов

• pg_basebackup

• 4 дня глубина

• pg_archivecleanup

Page 22: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

linux + hardware• linux debian 2.6.32 - 3.2. …

• raid10 + bbu

• numa off + interleaving on

• swap off

• ext4: noatime, wo barriers

• small read ahead

• noop планировщик io

Page 23: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

postgresql.conf• shared buffers / work men / effective cache size

• max connections

• checkpoint / bgwriter

• autovacuum !!! on

• sync commit off

• log collector to tmpfs / what to log

• stat direcory to tmpfs

• ! fsync / tablespace => tmpfs — во дают ребята

Page 24: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

VACUUM• ON

• наша новая мерилка

Page 25: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

команда• 7+ разработчиков + 0,5 админа

• тимлид

• dba + sql

• system adm + monitoring

• php

• python

• bash + perl

• pappet

Page 26: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

вызовы: архив

• база растет просто от времени

• это поражает воображение

• надо иметь архив

• есть варианты

• вопрос согласованности

Page 27: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

вызовы: вызов приложения из базы

• движок «асинхронной» обработки

• примеры: инвалидация кеша / апдейт счетчиков / продуктовые логи

• очереди-транспорт

• pgq php consumer

• можно «оживить web»

Page 28: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

вызовы: dev db• текущая схема

• бекап на дев сервере

• ежедневные дампы схем и справочников

• выкатка на живой базе — опасно

• но очень просто

• растет и команда

• контроль изменений

• цель: выкатка базы тоже по кнопке

• сложно: нужен второй авито

Page 29: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

SSD• уже не дорого

• много места и

• x20 к read iops (вау!) // запись точно не хуже

Sergey Burladyan added a comment - 10/июн/14 20:59

сравнение с HDD, random read:

HDD: 54 000 блоков: 76 секунд++ 0.00141+

SDD: 100 000 блоков: 8 секунд+ + 0.00008+

• внедряем — уже пол года проигрывает валы и гоняет запросы

• trim — не трогать дефолты

Page 30: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

• сделали на postgres топ5 сайт

• после яндекс-вк-ок-мейл

• суп из топора

«Набор фич и расширений, легендарная надёжность PostgreSQL, наличие встроенной репликации, средств резервирования и архивирования — весь потенциал нашел своё воплощение, а наличие открытого профессионального комьюнити не оставляет шансов к неэффективной реализации.»

вместо заключения

Page 31: PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин

Спасибо!

Вопросы'

!

[email protected]