SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
Большая база объявлений
Тюрин Михаил
mtyurin@avito.ru
pgconf.ru
2015
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
2
Всем привет!
Михаил Тюрин, Avito.ru
– главный системный архитектор, базы данных
– с PostgreSQL с 2004-ого, с версий 7.4/8.0, региональный web-стартап!
– в Авито с 2009-ого:
● один из четырех первых разработчиков; DBA / sql / plpgsql / php / skytools / linux
● DBA и DB-team lead, развитие смежных компонент
● архитектура, хранение и обработка данных в целом
● работа с базами данных PostgreSQL – основное хранилище:
– директор по разработке и девопс-директор, отдел «аналитиков»
– DB-team: DBA и sql-девелоперы; – 7 человек // есть 2 (две) вакансии
– DevOps/SysAdm – 0.5 человека «на базе» // есть вакансии
– отдельные серверсайд разработчики
– отдельные DWH разработчики («аналитики»)
● отвечаю в том числе за то, чтобы данные «лежали» как надо и где надо
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
3
Avito в цифрах
● Авито – доска N1 в России (Европе)
– «большой» и мобильный сайты; api – приложения и смежные проекты
– топ 10 сайт в России
● 250M просмотров и
● 7M посетителей в сутки
– 25M активных объявлений,
– 700K новых объявлений ежедневно
● ~ 500 человек штат (кто все эти люди?!)
– 80 человек «отдел» разработки
– DB-team: 7 человек, + несколько выделенных серверсайд девелоперов
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
4
Еще цифры
● 200+ серверов на основной платформе
– ~ 100 web app серверов – основные клиенты баз
– ~ 30 серверов с pg
● ~ 10 одновременно под нагрузкой
● 4 – под высокой
● postgres под нагрузкой
– «мастер» база – db, «m1»
● 1.5TB; 3KTPS и 1.5K IUD/sec в среднем
– 8K iops (5–12К) (w/r 2/6К), w/r 25/80 MB/s – 60% utilization SSD raid
– 20-50 active pg connections (intel 20(40ht) CPU, 376GB DDR)
– «стендбай» – db-sb: 600TPS
– «мастер2» – db2, «m2»: HDD raid, 2.5TPS (amd 16CPU, 80GB DDR) // ! uptime: 500d
– «repca» – db-re: 7КTPS, «in-memory» pg (16 CPU)
web
pg1
pg2
pg3
etc
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
5
Как мы к этому шли
● начало: php + memcached и postgres – PostgreSQL
● первые шаги: + pgpool – fail
● postgresql + tsearch – ok
● skype: pgbouncer – OK OK OK !!! *
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
6
Продолжаем идти
● skytools: walmgr – fail
● частичный индекс WHERE ACTIVE – ok
● sphinx – OK
● skytools: php-deamon – OK
● upgrade на 9.0 – bug
https://wiki.postgresql.org/wiki/20110408pg_upgrade_fix
ERROR: could not access status of transaction ######
DETAIL: could not open file "pg_clog/####": No such file or directory=20
● split: m1/m2 – OK *
● mat-view на deffered triggers – OK *
● skytools: londiste – «repca» – PGQ – OK OK !! *
● pitr: pg_basebackup, pg_archivecleanup – OK *
● skytools: plproxy – хранилище «xdb» – OK *
● pgq consumer – «xrpc» – OK *
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
7
PgBouncer
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
8
PgBouncer
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
9
PgBouncer
● pool коннектов
● мультиплексор: transaction pooling
● очередь запросов на одном процессе
– два пула: на клиенте и на сервере
● защита от «съедания» центрального ресурса одним клиентом
● распределение обработки очереди между двумя процессами
● дополнительный удобный прокси уровень
– nice -10 при нагрузке и высоксом la при cpu-bound
– поднятие более одного pgbouncer на сервере базы под высоким трафиком/нагрузкой
● connect query: select x_init()
● proxy
– маршрутизация трафика
– смена юзера: [ app --> pgbouncer ] == > [ pgbouncer – client_usr --> db ]
– смена параметров коннектов: x_init() / x_init('log = on')
● http://pgbouncer.projects.pgfoundry.org/doc/usage.html#_admin_console
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
10
db split
← split start
1) init standby
2.1) promote standby
2.2) switch connections m2
to new host-m2
← split finish
3) drop database:
– m2 on host-m1
– m1 on host-m2
NO tx && NO joins
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
11
«repca»! – londiste: trigger based logical replication
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
12
repca! – londiste: trigger based logical replication
● «матвью» активных айтимов
select item_id as id, get_hstore_pararms(category_id, item_id) as params from items where active
http://www.pgcon.org/2008/schedule/attachments/63_BSDCan2008-MaterializedViews.pdf
http://www.pgcon.org/2008/schedule/attachments/64_BSDCan2008-MaterializedViews-paper.pdf
+ deffered trigger: refresh_function()
● hstore!!! // привет Олегу и Федору
– не правим «матвью» при изменении полей таблиц объявления
● pgq: londiste «матвью» => repca
● repca в шаред буфферах – 7 К TPS
● восстановление:
– резервирование — ! два коснумера на одну очередь (knowhow)
– UNDO log (супер knowhow) и REDO фича londiste
– !!! см. доклад Сергея Бурладяна «Восстановление и другие подходы к авариям»
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
13
Архив
PITR:
pg_basebackup, pg_archivecleanup
!!! см. доклад Сергея Бурладяна
«Восстановление и другие подходы к авариям»
wal
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
14
«XDB» – распределенное хранилище: логическая схема
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
15
«XDB» – физическая схема
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
16
«XDB»: пулы и размер
● pgbouncer.ini_xdb-node_server
;; для внешних клиентов
xcluster = host=localhost user=xuser pool_size=30 datestyle='ISO,DMY'
;; для внутреннего обратного подключения из plproxy
db_01 = host=localhost user=xuser pool_size=10 datestyle='ISO,DMY'
db_02 = host=localhost user=xuser pool_size=10 datestyle='ISO,DMY'
● pgbouncer.ini_xdb-node_client // ROUTER
xdb_01 = host=xdb-node01 port=6432 dbname=db_01 pool_size=10 datestyle='ISO,DMY'
xdb_02 = host=xdb-node01 port=6432 dbname=db_02 pool_size=10 datestyle='ISO,DMY'
xdb_03 = host=xdb-node02 port=6432 dbname=db_01 pool_size=10 datestyle='ISO,DMY'
...
xdb_15 = host=xdb-node08 port=6432 dbname=db_01 pool_size=10 datestyle='ISO,DMY'
xdb_16 = host=xdb-node08 port=6432 dbname=db_02 pool_size=10 datestyle='ISO,DMY'
● CREATE FUNCTION public.xdb_name() RETURNS text LANGUAGE sql AS
$_$ select format('%s %s', current_setting('xdb.server'), current_database()); $_$;
● 7 TB: отправленные письма (7 месяцев по закону), логи, дампы
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
17
«XDB»: архив
ноды резервируют сами себя – отложенный стендбай как архив:
!! см. доклад Сергея Бурладяна «Восстановление и другие подходы к авариям»
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
18
«xrpc»
● «базы» вызывают друг друга асинхронно и получают асинхронный коллбек
● FUNCTION xrpc._call( queue text, _dbconn text, _func text, args hstore ) RETURNS bigint
return pgq.insert_event( queue, -- queue_name
DEFAULT_CALL_TYPE, -- ev_type
'1.1', -- ev_data -- rpc version
_dbconn, -- ev_extra1
_func, -- ev_extra2
args::text, -- ev_extra3
now()::timestamp::text -- ev_extra4
) ; -- call_id: event_id;
● xrpcd – consumer, для каждой базы собирает свои вызовы xrpc.do_call( func, args )
execute 'select "' || replace(func, '.', '"."') || '"( $1 )' using args;
● xrpcd обрабатывает аварии через трекание batch_id // xrpc.set_batch_done
● примеры:
– «геокодер» – где-то по дороге ходит в Яндекс
– асинхронная «транзакционная» обработка больших групп объектов пачками
– очередь модерации
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
19
PGQ
«+»
● ! транзакционность
● минималный оверхед на выборку событий
● отсутствие блокировок
● удобный maintenance очередей
«-»
● нет отложенных событий – by design // отправь письмо через 5 минут
● текстовый формат
● консумер переспрашивает источник по таймауту (1s), нет
подписки на событие на сокете
КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ
БЦ «Белые сады», ул. Лесная, 7, Москва, 125047
Спасибо за внимание!
Михаил Тюрин
mtyurin@avito.ru

Contenu connexe

Tendances

Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Ontico
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Ontico
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Ontico
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). Badoo Development
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Ontico
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)Nikolay Samokhvalov
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеAlexandr Krasheninnikov
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Ontico
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Ontico
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...Ontico
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Ontico
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Ontico
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхSveta Smirnova
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Ontico
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...Ontico
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Ontico
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Ontico
 

Tendances (19)

Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
 

En vedette

Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)Ontico
 
Golang в avito
Golang в avitoGolang в avito
Golang в avitoAvitoTech
 
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)AvitoTech
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Ontico
 
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)AvitoTech
 
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)Ontico
 
Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2Ilyas Salikhov
 
Илья Космодемьянский, PostgreSQL-Consulting.com. «Pragma autonomous transaction»
Илья Космодемьянский, PostgreSQL-Consulting.com. «Pragma autonomous transaction»Илья Космодемьянский, PostgreSQL-Consulting.com. «Pragma autonomous transaction»
Илья Космодемьянский, PostgreSQL-Consulting.com. «Pragma autonomous transaction»Mail.ru Group
 
Идеальный питч
Идеальный питчИдеальный питч
Идеальный питчbufferbay
 
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...Mail.ru Group
 
Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)
Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)
Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)Ontico
 
Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"
Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"
Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"iProspect Russia
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныCodeFest
 
Аналитика приложений конкурентов
Аналитика приложений конкурентовАналитика приложений конкурентов
Аналитика приложений конкурентовAnatoly Sharifulin
 
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудниковОнлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудниковDiana Dymolazova
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Mail.ru Group
 
Олеся Кащеева, Ostrovok.ru
Олеся Кащеева, Ostrovok.ruОлеся Кащеева, Ostrovok.ru
Олеся Кащеева, Ostrovok.ruDiana Dymolazova
 
От больших к очень большим данным — зачем нужна нормализация в Big Data / Гол...
От больших к очень большим данным — зачем нужна нормализация в Big Data / Гол...От больших к очень большим данным — зачем нужна нормализация в Big Data / Гол...
От больших к очень большим данным — зачем нужна нормализация в Big Data / Гол...Ontico
 
«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...
«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...
«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...it-people
 

En vedette (20)

Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)
 
Golang в avito
Golang в avitoGolang в avito
Golang в avito
 
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
 
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
 
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
 
Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2
 
Илья Космодемьянский, PostgreSQL-Consulting.com. «Pragma autonomous transaction»
Илья Космодемьянский, PostgreSQL-Consulting.com. «Pragma autonomous transaction»Илья Космодемьянский, PostgreSQL-Consulting.com. «Pragma autonomous transaction»
Илья Космодемьянский, PostgreSQL-Consulting.com. «Pragma autonomous transaction»
 
Идеальный питч
Идеальный питчИдеальный питч
Идеальный питч
 
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
 
Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)
Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)
Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)
 
Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"
Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"
Виктор Яковлев, "Yandex": "О дивный новый-старый мир контекстной рекламы"
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
Аналитика приложений конкурентов
Аналитика приложений конкурентовАналитика приложений конкурентов
Аналитика приложений конкурентов
 
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудниковОнлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
Онлайн-взаимодействие: вовлечение, исследование и обучение сотрудников
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
 
Олеся Кащеева, Ostrovok.ru
Олеся Кащеева, Ostrovok.ruОлеся Кащеева, Ostrovok.ru
Олеся Кащеева, Ostrovok.ru
 
От больших к очень большим данным — зачем нужна нормализация в Big Data / Гол...
От больших к очень большим данным — зачем нужна нормализация в Big Data / Гол...От больших к очень большим данным — зачем нужна нормализация в Big Data / Гол...
От больших к очень большим данным — зачем нужна нормализация в Big Data / Гол...
 
«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...
«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...
«Как перейти от веб-аналитики к аналитике мобильных приложений» Д. Школьник...
 
Yandex market shops overview
Yandex market shops overviewYandex market shops overview
Yandex market shops overview
 

Similaire à pgconf.ru 2015 avito postgresql

Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...Dev_Party
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаAnastasia Lubennikova
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...PavelKonotopov
 
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDBCodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDBCodeFest
 
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBСерверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBStepan Stolyarov
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к AnsibleIvan Grishaev
 
Devconf2013 new-features-in-mysql-and-mariadb
Devconf2013 new-features-in-mysql-and-mariadbDevconf2013 new-features-in-mysql-and-mariadb
Devconf2013 new-features-in-mysql-and-mariadbSergey Petrunya
 
Ice Php Framework Preview Release
Ice Php Framework Preview ReleaseIce Php Framework Preview Release
Ice Php Framework Preview ReleaseDenis Shestakov
 
Опыт внедрения OpenStack
Опыт внедрения OpenStackОпыт внедрения OpenStack
Опыт внедрения OpenStackYandex
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...phpdevby
 
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Ontico
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Ontico
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow Vadim Nesterov
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Ontico
 
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5DevDay
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XCPostgreSQL-Consulting
 
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»Tanya Denisyuk
 
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)Александр Сигачев
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Ontico
 

Similaire à pgconf.ru 2015 avito postgresql (20)

Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
 
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDBCodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
CodeFest 2010. Столяров С. — Серверный JavaScript: NodeJS и CouchDB
 
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBСерверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDB
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
Devconf2013 new-features-in-mysql-and-mariadb
Devconf2013 new-features-in-mysql-and-mariadbDevconf2013 new-features-in-mysql-and-mariadb
Devconf2013 new-features-in-mysql-and-mariadb
 
Ice Php Framework Preview Release
Ice Php Framework Preview ReleaseIce Php Framework Preview Release
Ice Php Framework Preview Release
 
Опыт внедрения OpenStack
Опыт внедрения OpenStackОпыт внедрения OpenStack
Опыт внедрения OpenStack
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
 
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
 
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
 
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
 
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)
 

pgconf.ru 2015 avito postgresql

  • 2. КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ 2 Всем привет! Михаил Тюрин, Avito.ru – главный системный архитектор, базы данных – с PostgreSQL с 2004-ого, с версий 7.4/8.0, региональный web-стартап! – в Авито с 2009-ого: ● один из четырех первых разработчиков; DBA / sql / plpgsql / php / skytools / linux ● DBA и DB-team lead, развитие смежных компонент ● архитектура, хранение и обработка данных в целом ● работа с базами данных PostgreSQL – основное хранилище: – директор по разработке и девопс-директор, отдел «аналитиков» – DB-team: DBA и sql-девелоперы; – 7 человек // есть 2 (две) вакансии – DevOps/SysAdm – 0.5 человека «на базе» // есть вакансии – отдельные серверсайд разработчики – отдельные DWH разработчики («аналитики») ● отвечаю в том числе за то, чтобы данные «лежали» как надо и где надо
  • 3. КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ 3 Avito в цифрах ● Авито – доска N1 в России (Европе) – «большой» и мобильный сайты; api – приложения и смежные проекты – топ 10 сайт в России ● 250M просмотров и ● 7M посетителей в сутки – 25M активных объявлений, – 700K новых объявлений ежедневно ● ~ 500 человек штат (кто все эти люди?!) – 80 человек «отдел» разработки – DB-team: 7 человек, + несколько выделенных серверсайд девелоперов
  • 4. КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ 4 Еще цифры ● 200+ серверов на основной платформе – ~ 100 web app серверов – основные клиенты баз – ~ 30 серверов с pg ● ~ 10 одновременно под нагрузкой ● 4 – под высокой ● postgres под нагрузкой – «мастер» база – db, «m1» ● 1.5TB; 3KTPS и 1.5K IUD/sec в среднем – 8K iops (5–12К) (w/r 2/6К), w/r 25/80 MB/s – 60% utilization SSD raid – 20-50 active pg connections (intel 20(40ht) CPU, 376GB DDR) – «стендбай» – db-sb: 600TPS – «мастер2» – db2, «m2»: HDD raid, 2.5TPS (amd 16CPU, 80GB DDR) // ! uptime: 500d – «repca» – db-re: 7КTPS, «in-memory» pg (16 CPU) web pg1 pg2 pg3 etc
  • 5. КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ 5 Как мы к этому шли ● начало: php + memcached и postgres – PostgreSQL ● первые шаги: + pgpool – fail ● postgresql + tsearch – ok ● skype: pgbouncer – OK OK OK !!! *
  • 6. КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ 6 Продолжаем идти ● skytools: walmgr – fail ● частичный индекс WHERE ACTIVE – ok ● sphinx – OK ● skytools: php-deamon – OK ● upgrade на 9.0 – bug https://wiki.postgresql.org/wiki/20110408pg_upgrade_fix ERROR: could not access status of transaction ###### DETAIL: could not open file "pg_clog/####": No such file or directory=20 ● split: m1/m2 – OK * ● mat-view на deffered triggers – OK * ● skytools: londiste – «repca» – PGQ – OK OK !! * ● pitr: pg_basebackup, pg_archivecleanup – OK * ● skytools: plproxy – хранилище «xdb» – OK * ● pgq consumer – «xrpc» – OK *
  • 9. КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ 9 PgBouncer ● pool коннектов ● мультиплексор: transaction pooling ● очередь запросов на одном процессе – два пула: на клиенте и на сервере ● защита от «съедания» центрального ресурса одним клиентом ● распределение обработки очереди между двумя процессами ● дополнительный удобный прокси уровень – nice -10 при нагрузке и высоксом la при cpu-bound – поднятие более одного pgbouncer на сервере базы под высоким трафиком/нагрузкой ● connect query: select x_init() ● proxy – маршрутизация трафика – смена юзера: [ app --> pgbouncer ] == > [ pgbouncer – client_usr --> db ] – смена параметров коннектов: x_init() / x_init('log = on') ● http://pgbouncer.projects.pgfoundry.org/doc/usage.html#_admin_console
  • 10. КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ 10 db split ← split start 1) init standby 2.1) promote standby 2.2) switch connections m2 to new host-m2 ← split finish 3) drop database: – m2 on host-m1 – m1 on host-m2 NO tx && NO joins
  • 12. КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ 12 repca! – londiste: trigger based logical replication ● «матвью» активных айтимов select item_id as id, get_hstore_pararms(category_id, item_id) as params from items where active http://www.pgcon.org/2008/schedule/attachments/63_BSDCan2008-MaterializedViews.pdf http://www.pgcon.org/2008/schedule/attachments/64_BSDCan2008-MaterializedViews-paper.pdf + deffered trigger: refresh_function() ● hstore!!! // привет Олегу и Федору – не правим «матвью» при изменении полей таблиц объявления ● pgq: londiste «матвью» => repca ● repca в шаред буфферах – 7 К TPS ● восстановление: – резервирование — ! два коснумера на одну очередь (knowhow) – UNDO log (супер knowhow) и REDO фича londiste – !!! см. доклад Сергея Бурладяна «Восстановление и другие подходы к авариям»
  • 13. КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ 13 Архив PITR: pg_basebackup, pg_archivecleanup !!! см. доклад Сергея Бурладяна «Восстановление и другие подходы к авариям» wal
  • 16. КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ 16 «XDB»: пулы и размер ● pgbouncer.ini_xdb-node_server ;; для внешних клиентов xcluster = host=localhost user=xuser pool_size=30 datestyle='ISO,DMY' ;; для внутреннего обратного подключения из plproxy db_01 = host=localhost user=xuser pool_size=10 datestyle='ISO,DMY' db_02 = host=localhost user=xuser pool_size=10 datestyle='ISO,DMY' ● pgbouncer.ini_xdb-node_client // ROUTER xdb_01 = host=xdb-node01 port=6432 dbname=db_01 pool_size=10 datestyle='ISO,DMY' xdb_02 = host=xdb-node01 port=6432 dbname=db_02 pool_size=10 datestyle='ISO,DMY' xdb_03 = host=xdb-node02 port=6432 dbname=db_01 pool_size=10 datestyle='ISO,DMY' ... xdb_15 = host=xdb-node08 port=6432 dbname=db_01 pool_size=10 datestyle='ISO,DMY' xdb_16 = host=xdb-node08 port=6432 dbname=db_02 pool_size=10 datestyle='ISO,DMY' ● CREATE FUNCTION public.xdb_name() RETURNS text LANGUAGE sql AS $_$ select format('%s %s', current_setting('xdb.server'), current_database()); $_$; ● 7 TB: отправленные письма (7 месяцев по закону), логи, дампы
  • 17. КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ 17 «XDB»: архив ноды резервируют сами себя – отложенный стендбай как архив: !! см. доклад Сергея Бурладяна «Восстановление и другие подходы к авариям»
  • 18. КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ 18 «xrpc» ● «базы» вызывают друг друга асинхронно и получают асинхронный коллбек ● FUNCTION xrpc._call( queue text, _dbconn text, _func text, args hstore ) RETURNS bigint return pgq.insert_event( queue, -- queue_name DEFAULT_CALL_TYPE, -- ev_type '1.1', -- ev_data -- rpc version _dbconn, -- ev_extra1 _func, -- ev_extra2 args::text, -- ev_extra3 now()::timestamp::text -- ev_extra4 ) ; -- call_id: event_id; ● xrpcd – consumer, для каждой базы собирает свои вызовы xrpc.do_call( func, args ) execute 'select "' || replace(func, '.', '"."') || '"( $1 )' using args; ● xrpcd обрабатывает аварии через трекание batch_id // xrpc.set_batch_done ● примеры: – «геокодер» – где-то по дороге ходит в Яндекс – асинхронная «транзакционная» обработка больших групп объектов пачками – очередь модерации
  • 19. КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ 19 PGQ «+» ● ! транзакционность ● минималный оверхед на выборку событий ● отсутствие блокировок ● удобный maintenance очередей «-» ● нет отложенных событий – by design // отправь письмо через 5 минут ● текстовый формат ● консумер переспрашивает источник по таймауту (1s), нет подписки на событие на сокете
  • 20. КОЛОНТИТУЛ:ТЕМАПРЕЗЕНТАЦИИ БЦ «Белые сады», ул. Лесная, 7, Москва, 125047 Спасибо за внимание! Михаил Тюрин mtyurin@avito.ru