SlideShare a Scribd company logo
1 of 73
Download to read offline
Асинхронная 
репликация 
MySQL без 
цензуры 
Олег Царёв
Знакомимся 
• Писал OLAP, OLTP и NoSQL базы данных (QD, MySQL, SciDB) 
• Помогаю с эксплуатацией MySQL в Mail.Ru Target 
• Занимаюсь вопросами производительности софта 
• Подслушиваю в курилке, что говорят умные люди 
• Борюсь с гномиками в базах данных 
• Если коллеги видят гномика — я его убиваю и провожу 
вскрытие 
• Писал репликацию, настраивал репликацию, объяснял 
репликацию
О чём речь, товарищ? 
Что такое репликация и зачем она нужна 
• Как базы гарантируют целостность данных 
• Тесная связь репликации и журнала 
• Как это сделано в PostgreSQL и MySQL 
• Плюсы и минусы обоих подходов 
• Архитектурные проблемы репликаций в MySQL. Можно ли было 
их избежать? 
• Что нового в MySQL 5.6 / 5.7
Disclaimer 
...одно из положений теории систем гласит: 
систему невозможно оптимизировать по 
двум независимым параметрам 
одновременно; в частности, добиваясь 
целостности рисуемой картины, неизбежно 
приходится жертвовать ее детальностью, 
или наоборот. 
Кирилл Еськов, «История земли и жизни на ней»
Как видит базу инженер 
● Внутри происходит магия
Две базы лучше чем одна
Репликация, это... 
• Репликация — распространение изменений между базами 
• Асинхронная репликация — отложенное распространение 
изменений 
• В MySQL, строго говоря, существует лишь асинхронная 
репликация 
• Однако есть ещё semisync, galera, NDB Cluster, MMM, Tungsten 
• Но широко используется лишь асинхронная 
• В PostgreSQL есть асинхронная (из коробки) и Trigger-based 
(внешняя)
Репликация это не бекапы 
• Репликация не является резервной копией 
• Репликация никогда не является резервной копией 
• Даже если сильно хочется — репликация не является резервной 
копией
Репликация это не бекапы 
• Репликация не является резервной копией 
• Репликация никогда не является резервной копией 
• Даже если сильно хочется — репликация не является резервной 
копией 
• Резервная копия — состояние в прошлом, на которое можно 
вернуться 
• DROP DATABASE very_important_database; <== и что делать? 
• Помнить: «репликация не является резервной копией»
Пусть master упал 
У нас остался slave!
Резервные копии 
• Репликация — не резервная копия (вы запомнили?) 
• Как делать резервные копии не мешая приложению?
Если мастер задыхается 
• Можно делать долгие запросы (отчёты? статистика?) на slave
Я тоже хочу быть slave'ом! 
• Приложение хочет получать изменения в базе 
• http://habrahabr.ru/company/mailru/blog/219015/ 
• У нас таких серверов много десятков
Собираем всё вместе 
*Структура проекта Mail.Ru Target
Mail.Ru Target 
• Размер базы около полутора терабайт 
• ~6000 запросов в секунду на master 
• ~15000 запросов в секунду на репликах 
• Более ста различных серверов приложений работающих с базой 
• За 4 года года работы не лежали ни разу (100% HA #irony) 
• Авторы libslave, Федор Сигаев, Костя Осипов по соседству 
• Ещё у нас есть печеньки и спортзал 
• В общем, без репликации нам никак
А что у неё внутри?
Залезем в шкуру автора 
• Как именно база гарантирует принцип «всё или ничего»? 
• Как избежать коллизий и гонок? <= за пределами доклада 
• Как пережить падение питания?
Внутре у ней неонка
Проблемы 
• Принцип «всё или ничего» не выполняется при записи диска 
• Даже с оперативной памятью научились буквально только что 
• Питание у сервера может упасть в любой момент 
• Сеть тоже — против бульдозера оптике нечем возразить 
• Нужно найти способ надёжно писать данные в ненадёжной 
среде 
• Как ни странно, ответ подсказали бухгалтеры
Учтите 
• Это называется Point In Time Recovery или PITR 
• Научная работа на эту тему зовётся ARIES 
http://en.wikipedia.org/wiki/Algorithms_for_Recovery_and_Isolation_E 
xploiting_Semantics 
• Есть умная книжка Transactional Information Systems 
http://www.amazon.com/Transactional-Information-Systems-Algorit 
hms-Concurrency/dp/1558605088 
• Про MySQL читайте: http://www.percona.com/blog/ 
• Про PostgreSQL можно проштудировать: 
http://www.pgcon.org/2012/schedule/track/Hacking/408.en.html 
• Всё сложней чем я описал (упростил для наглядности)
Ключевые вопросы 
• Как организовать журнал? 
• Как уменьшить объём записи на диск? 
• Как уменьшить количество fsync? 
• Причём тут репликация? 
Copyright http://svpsychology.ru/ulibka-do-ushey/
Репликация: прямой путь
PostgreSQL: WAL
MySQL 
• Как вы думаете, сколько журналов в MySQL?
Архитектура MySQL
История 
• В MySQL придумали Storage Engine (основным был MyISAM) 
• В MyISAM не сделали журнал (так тоже можно! но не нужно) 
• MySQL сделали репликацию 
• Для репликации сделали имитацию журнала — binary log 
• MySQL подарили InnoDB 
• У InnoDB свой журнал 
• Какой журнал передавать с master на slave? 
• Настало время офигительных историй
Архитектурная ошибка 
• MySQL реализовал отдельный тип журнала: binary log 
• Binary log не используется для Point In Time Recovery 
• InnoDB Undo/Redo Log не используется в репликации
Так что там с журналом? 
• InnoDB Undo/Redo Log похож на PostgreSQL WAL 
• Binary log — отдельный журнал с шахматами и феями 
• Форматы binary log: 
– SBR — Statement-based replication 
– RBS — Row-based replication 
– Mixed format logging 
• Но раз уже его сделали, давайте разбираться
Statement-based 
• Журнал — файл с последовательно записанными событиями 
• Каждой событие — одна транзакция 
• Транзакция — SQL запросы, от BEGIN; до COMMIT; 
• В начале события идут два поля 
– use dbname; <== ведь у нас может быть несколько баз 
– timestamp времени завершения транзакции на master 
• Давайте нарисуем (я вообще люблю картинки)
Statement-based
Row-based 
• Журнал — последовательно записанные события 
• Событие содержит BEFORE и AFTER образы 
• Из каждой изменённой таблицы в образ попадает набор строк 
• Как именно: 
– DELETE — строка есть в BEFORE image 
– INSERT — строка есть в AFTER image 
– UPDATE — строка есть в обоих 
– ALTER — это такой UPDATE 
• Если на пальцах: это такие бинарные патчи
Mixed-based 
• Это такая statement-based которая иногда row-based 
• Таким образом хотели решить отдельные проблемы 
• С версии 5.1.12 по 5.1.29 это даже был формат по умолчанию 
• Часть проблем решили, но в основном взяли проблемы из обоих 
форматов 
• Например, триггеры на slave работают лишь иногда (если 
событие пришло в statement-формате) 
• Лучше не трогать (или нужно очень хорошо понимать что ты 
делаешь)
В чём правда, брат?
Беспредел SQL 
• Часто думают, что реляционная таблица — это массив 
• Некоторые даже думают, что это двумерный массив 
• Но таблица — гомогенное мультимножество кортежей 
• Кортеж — набор упорядоченных типизированных значений 
• Гомогенное — они одинакового типа 
• Мультимножество — могут быть дубликаты 
• Мультимножество — порядок элементов не задан 
• Строка — кортеж, таблица — их гомогенное мультимножество
Хаос порождает порядок 
• Порядок выдачи строчек в запросе не определён 
• Окей, можно написать ORDER BY 
• Даже с ORDER BY для повторяющихся ключей порядок не задан 
• Понимание таблицы как «массива» не помогает, а мешает 
• Таблица - «гомогенное мультимножество» 
• Запомните и никогда не забывайте
Statement based replication 
ALTER TABLE t DROP COLUMN 
old_key; 
ALTER TABLE t ADD COLUMN key 
INT PRIMARY KEY 
AUTO_INCREMENT;
Проблема в том, что... 
• Запросы на master и slave выполняются по-разному 
• Точнее, в разном порядке 
• Физический порядок строчек на master и slave будет разный 
• Значения в колонке key на master и slave будут различными 
• Мы на это тоже наступили 
• DBA! Приглядывайте за админами и особенно разработчиками 
• Мы на это тоже наступали 
• Но у нас на master и slave было разное число строк 
• Но это совсем другая история...
Statement based replication 
CREATE TABLE t2 LIKE t1; 
ALTER TABLE t2 ADD id INT 
AUTO_INCREMENT PRIMARY KEY; 
INSERT INTO t2 SELECT * FROM t1 
ORDER BY col1, col2; 
• http://dev.mysql.com/doc/refman/5.5/en/replication-features-auto-in 
crement.html
Логическая и физическая 
• Физическая репликация работает со страницами 
• Логическая репликация работает с кортежами 
• PostgreSQL WAL, InnoDB Undo/Redo Log — физическая 
• Row-based binary log — логическая 
• Statement-based binary log — недоразумение 
• Statement-based binary log — это даже не журнал 
• Всё так по историческим причинам
Репликация и индексы 
• Логическая репликация (row-based) «не знает», 
как хранятся данные на диске 
• При примении событий из row-based binlog нужно 
найти в таблице и индексах строчки, которые мы 
обновляем 
• Производительность логической репликации 
зависит от индексов на slave 
• Физическая репликация обычно IO-bound 
• Логическая репликация обычно CPU-bound
Statement-based и CPU 
• Statement-based репликация так же 
плоха, как row-based 
• Точнее она хуже (с точки зрения 
потребления процессора) 
• Выполнение запроса на slave также 
трудоёмко, как выполнение запроса на 
master
Репликация и диск 
• PostgreSQL пишет в два места: хранилище данных 
и журнал 
• MySQL InnoDB master пишет в три места: 
– Хранилище (tablespace) 
– Журнал (undo/redo log) 
– Binary log 
• MySQL row-based репликация в полтора раза 
хуже PostgreSQL
Репликация тормозит... 
• Как найти причину?
Мы делаем так
Диагностика 
• В 5.6 / 5.7 есть SLAVE PERFORMANCE SCHEMA 
• В 5.5 приходится поднимать лог коммитов в puppet 
• Иногда это не помогает 
• Тогда я беру approve на пытки у технического директора 
(спасибо, Дима!) 
• Но даже пытки не всегда помогают 
• Можно посмотреть slow query log (но это если statement based) 
• В общем, всё грустно
Но и это ещё не все
Параллелизм 
• Master выполняет запросы параллельно 
• В журнал и/или лог запросы пишутся 
последовательно 
• Можно ли выполнять запросы 
параллельно?
Параллелизм 
• Есть крутая теорема о сериализации транзакций 
• Читаем про неё у Вани: 
http://plumqqz.livejournal.com/387380.html 
• Коротко говоря: можно, но есть нюансы (в них дьявол) 
• PostgreSQL — IO-bound, диск не параллелится, хорошо 
• MySQL — CPU-bound, параллелить нельзя, плохо 
• Мощный сервер о 12 ядрах, занято одно ядро 
• Лимитирует скорость MySQL репликация тактовая 
частота ядра, а не количество ядер
Репликация и master 
• Сильная сторона асинхронной репликации — отсутствие 
отрицательной обратной связи 
• http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar_inno 
db_locks_unsafe_for_binlog 
• sysvar_innodb_locks_unsafe_for_binlog=0 
• Чтобы statement-based корректно работала, нам нужно 
запретить параллельную вставку новых записей на master 
• Абстракции протекли: InnoDB (storage engine layer) вынужден 
знать про репликацию (MySQL-layer)
Давай сгруппируем 
• Транзакции можно группировать 
• PostgreSQL: synchronous_commit=0, commit_delay=X 
• MySQL: innodb_flush_log_at_trx_commit = 0 либо 
innodb_flush_log_at_trx_commit = 1 
• Однако, MySQL нужно писать в два журнала 
• Group Binary Log Commit — 5.6 / 5.7 
• Два журнала — нужен two-phase-commit 
http://en.wikipedia.org/wiki/Two-phase_commit_protocol
Group Binary Log Commit 
http://www.percona.com/blog/2011/07/13/testing-the-group-commit-fix/
Группы и параллелизм 
• Сгруппированные коммиты можно применять параллельно 
• MySQL 5.6: DB, MySQL 5.7: DB и LOGICAL_CLOCK 
• Если на master много взаимонепересекающихся коммитов, они 
попадут в одну группу 
• Ниже опции которые нужно крутить 
• Master: binlog_order_commits, binlog_max_flush_queue_time, 
innodb_flush_log_at_trx_commit 
• Slave: slave_parallel_type, slave_parallel_workers
Давайте померяем
Анализ результатов 
• https://github.com/zamotivator/2014-highload-mysql 
• Настройки master и slave, скрипты ищите по ссылке 
• Нагрузка: Sysbench, 16 потоков, oltp-complex 
• Один поток 5.7 работает хуже 5.5 
• Четыре потока 5.7 работают примерно как 5.5 
• Для параллелизма нужен group binary log commit на master (5.7) 
• Миграция без downtime master 5.5, slave 5.7 будет отставать
Выводы
Выводы 
• PostgreSQL репликация как правило IO-bound 
• MySQL репликация CPU-bound
Выводы 
• PostgreSQL репликация как правило IO-bound 
• MySQL репликация CPU-bound 
• PostgreSQL репликация генерирует много* бинарных логов 
• MySQL row-based сравнимо, statement-based — сильно меньше
Выводы 
• PostgreSQL репликация как правило IO-bound 
• MySQL репликация CPU-bound 
• PostgreSQL репликация генерирует много* бинарных логов 
• MysQL row-based сравнимо, statement-based — сильно меньше 
• PostgreSQL и MySQL row-based корректно работают всегда 
• MySQL statement-based может работать некорректно
Выводы 
• PostgreSQL репликация как правило IO-bound 
• MySQL репликация CPU-bound 
• PostgreSQL репликация генерирует много* бинарных логов 
• MysQL row-based сравнимо, statement-based — сильно меньше 
• PostgreSQL и MySQL row-based корректно работают всегда 
• MySQL statement-based может работать некорректно 
• PostrgreSQL репликация не позволяет иметь разные индексы на 
master и slave 
• MySQL репликация зависима от индексов
Благодарности 
• Константин Осипов, Mail.Ru, MySQL, Tarantool — критика 
• Дмитрий Ленев, Oracle — критика и помощь 
• Александр Горный, Mail.Ru — критика 
• Александр Чистяков, Git in Sky — бенчмарки 
• Максим Оранский, http://шанти-шанти.рф/ — вычитка и советы 
• Федор Сигаев, Mail.Ru, PostgreSQL — советы 
• Дмитрий Кирноценский, Mail.Ru — разрешение опубличить 
данные 
• Дмитрий Школьников, Mail.Ru — оформление
Контакты 
• Личный: oleg@oleg.sh 
• Рабочий: o.tsarev@corp.mail.ru 
• Facebook: https://www.facebook.com/oleg.i.tsarev 
• Github: https://github.com/zamotivator

More Related Content

What's hot

PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)Ontico
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Ontico
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)Ontico
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахAlexey Vasiliev
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Ontico
 
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)Ontico
 
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)Ontico
 
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)Ontico
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014Alex Chistyakov
 
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)Ontico
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Ontico
 
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Ontico
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XCPostgreSQL-Consulting
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхSveta Smirnova
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)Ontico
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
Масштабирование баз данных. (Database Scalability)
Масштабирование баз данных. (Database Scalability)Масштабирование баз данных. (Database Scalability)
Масштабирование баз данных. (Database Scalability)Andrew Avdeev
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...Ontico
 
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в ОдноклассникахБалансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в ОдноклассникахOntico
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBSergey Petrunya
 

What's hot (20)

PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектах
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
 
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
 
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
 
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
 
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
 
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
 
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Масштабирование баз данных. (Database Scalability)
Масштабирование баз данных. (Database Scalability)Масштабирование баз данных. (Database Scalability)
Масштабирование баз данных. (Database Scalability)
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
 
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в ОдноклассникахБалансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в Одноклассниках
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDB
 

Viewers also liked

MySQL/InnoDB изнутри: узкие места / Александр Крижановский (NatSys Lab)
MySQL/InnoDB изнутри: узкие места / Александр Крижановский (NatSys Lab)MySQL/InnoDB изнутри: узкие места / Александр Крижановский (NatSys Lab)
MySQL/InnoDB изнутри: узкие места / Александр Крижановский (NatSys Lab)Ontico
 
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)Ontico
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Ontico
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"Badoo Development
 
"Геолокация в Badoo", Андрей Воликов (Badoo)
"Геолокация в Badoo", Андрей Воликов (Badoo)"Геолокация в Badoo", Андрей Воликов (Badoo)
"Геолокация в Badoo", Андрей Воликов (Badoo)Badoo Development
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Ontico
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Ontico
 
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио..."PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...Badoo Development
 
"Производительность MySQL: что нового?"
"Производительность MySQL: что нового?""Производительность MySQL: что нового?"
"Производительность MySQL: что нового?"Badoo Development
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
 
"Великолепный API без Rest", Констатин Якушев (Badoo)
 "Великолепный API без Rest", Констатин Якушев (Badoo) "Великолепный API без Rest", Констатин Якушев (Badoo)
"Великолепный API без Rest", Констатин Якушев (Badoo)Badoo Development
 
"Развитие ветки PHP-7"
"Развитие ветки PHP-7""Развитие ветки PHP-7"
"Развитие ветки PHP-7"Badoo Development
 

Viewers also liked (13)

MySQL/InnoDB изнутри: узкие места / Александр Крижановский (NatSys Lab)
MySQL/InnoDB изнутри: узкие места / Александр Крижановский (NatSys Lab)MySQL/InnoDB изнутри: узкие места / Александр Крижановский (NatSys Lab)
MySQL/InnoDB изнутри: узкие места / Александр Крижановский (NatSys Lab)
 
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"
 
"Геолокация в Badoo", Андрей Воликов (Badoo)
"Геолокация в Badoo", Андрей Воликов (Badoo)"Геолокация в Badoo", Андрей Воликов (Badoo)
"Геолокация в Badoo", Андрей Воликов (Badoo)
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
 
"Обзор Tarantool DB"
"Обзор Tarantool DB""Обзор Tarantool DB"
"Обзор Tarantool DB"
 
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио..."PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
 
"Производительность MySQL: что нового?"
"Производительность MySQL: что нового?""Производительность MySQL: что нового?"
"Производительность MySQL: что нового?"
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 
"Великолепный API без Rest", Констатин Якушев (Badoo)
 "Великолепный API без Rest", Констатин Якушев (Badoo) "Великолепный API без Rest", Констатин Якушев (Badoo)
"Великолепный API без Rest", Констатин Якушев (Badoo)
 
"Развитие ветки PHP-7"
"Развитие ветки PHP-7""Развитие ветки PHP-7"
"Развитие ветки PHP-7"
 

Similar to Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)

Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLAlex Chistyakov
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012Alex Chistyakov
 
Oracle NoSQL Database
Oracle NoSQL DatabaseOracle NoSQL Database
Oracle NoSQL DatabaseAndrey Akulov
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Как мы готовим MySQL
Как мы готовим MySQLКак мы готовим MySQL
Как мы готовим MySQLBadoo Development
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
Диагностика postgresql для системного администратора
Диагностика postgresql для системного администратораДиагностика postgresql для системного администратора
Диагностика postgresql для системного администратораNikolay Sivko
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL Badoo Development
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Ontico
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программистаSlach
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Ontico
 
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10  популярных вопросов администраторам баз данных или почему я против св...Top-10  популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...Ilya Kosmodemiansky
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ontico
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Unigine Corp.
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned Alexander Syrotenko
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на productionNikolay Sivko
 

Similar to Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group) (20)

Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQL
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012
 
Pgconfru 2015 kosmodemiansky
Pgconfru 2015 kosmodemianskyPgconfru 2015 kosmodemiansky
Pgconfru 2015 kosmodemiansky
 
Oracle NoSQL Database
Oracle NoSQL DatabaseOracle NoSQL Database
Oracle NoSQL Database
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Как мы готовим MySQL
Как мы готовим MySQLКак мы готовим MySQL
Как мы готовим MySQL
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Диагностика postgresql для системного администратора
Диагностика postgresql для системного администратораДиагностика postgresql для системного администратора
Диагностика postgresql для системного администратора
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программиста
 
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
Cравнительный анализ хранилищ данных (Олег Царев, Кирилл Коринский)
 
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10  популярных вопросов администраторам баз данных или почему я против св...Top-10  популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на production
 

More from Ontico

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

More from Ontico (20)

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

Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)

  • 1. Асинхронная репликация MySQL без цензуры Олег Царёв
  • 2. Знакомимся • Писал OLAP, OLTP и NoSQL базы данных (QD, MySQL, SciDB) • Помогаю с эксплуатацией MySQL в Mail.Ru Target • Занимаюсь вопросами производительности софта • Подслушиваю в курилке, что говорят умные люди • Борюсь с гномиками в базах данных • Если коллеги видят гномика — я его убиваю и провожу вскрытие • Писал репликацию, настраивал репликацию, объяснял репликацию
  • 3. О чём речь, товарищ? Что такое репликация и зачем она нужна • Как базы гарантируют целостность данных • Тесная связь репликации и журнала • Как это сделано в PostgreSQL и MySQL • Плюсы и минусы обоих подходов • Архитектурные проблемы репликаций в MySQL. Можно ли было их избежать? • Что нового в MySQL 5.6 / 5.7
  • 4. Disclaimer ...одно из положений теории систем гласит: систему невозможно оптимизировать по двум независимым параметрам одновременно; в частности, добиваясь целостности рисуемой картины, неизбежно приходится жертвовать ее детальностью, или наоборот. Кирилл Еськов, «История земли и жизни на ней»
  • 5. Как видит базу инженер ● Внутри происходит магия
  • 6. Две базы лучше чем одна
  • 7. Репликация, это... • Репликация — распространение изменений между базами • Асинхронная репликация — отложенное распространение изменений • В MySQL, строго говоря, существует лишь асинхронная репликация • Однако есть ещё semisync, galera, NDB Cluster, MMM, Tungsten • Но широко используется лишь асинхронная • В PostgreSQL есть асинхронная (из коробки) и Trigger-based (внешняя)
  • 8. Репликация это не бекапы • Репликация не является резервной копией • Репликация никогда не является резервной копией • Даже если сильно хочется — репликация не является резервной копией
  • 9. Репликация это не бекапы • Репликация не является резервной копией • Репликация никогда не является резервной копией • Даже если сильно хочется — репликация не является резервной копией • Резервная копия — состояние в прошлом, на которое можно вернуться • DROP DATABASE very_important_database; <== и что делать? • Помнить: «репликация не является резервной копией»
  • 10. Пусть master упал У нас остался slave!
  • 11. Резервные копии • Репликация — не резервная копия (вы запомнили?) • Как делать резервные копии не мешая приложению?
  • 12. Если мастер задыхается • Можно делать долгие запросы (отчёты? статистика?) на slave
  • 13. Я тоже хочу быть slave'ом! • Приложение хочет получать изменения в базе • http://habrahabr.ru/company/mailru/blog/219015/ • У нас таких серверов много десятков
  • 14. Собираем всё вместе *Структура проекта Mail.Ru Target
  • 15. Mail.Ru Target • Размер базы около полутора терабайт • ~6000 запросов в секунду на master • ~15000 запросов в секунду на репликах • Более ста различных серверов приложений работающих с базой • За 4 года года работы не лежали ни разу (100% HA #irony) • Авторы libslave, Федор Сигаев, Костя Осипов по соседству • Ещё у нас есть печеньки и спортзал • В общем, без репликации нам никак
  • 16. А что у неё внутри?
  • 17. Залезем в шкуру автора • Как именно база гарантирует принцип «всё или ничего»? • Как избежать коллизий и гонок? <= за пределами доклада • Как пережить падение питания?
  • 18. Внутре у ней неонка
  • 19.
  • 20.
  • 21. Проблемы • Принцип «всё или ничего» не выполняется при записи диска • Даже с оперативной памятью научились буквально только что • Питание у сервера может упасть в любой момент • Сеть тоже — против бульдозера оптике нечем возразить • Нужно найти способ надёжно писать данные в ненадёжной среде • Как ни странно, ответ подсказали бухгалтеры
  • 22.
  • 23.
  • 24.
  • 25.
  • 26. Учтите • Это называется Point In Time Recovery или PITR • Научная работа на эту тему зовётся ARIES http://en.wikipedia.org/wiki/Algorithms_for_Recovery_and_Isolation_E xploiting_Semantics • Есть умная книжка Transactional Information Systems http://www.amazon.com/Transactional-Information-Systems-Algorit hms-Concurrency/dp/1558605088 • Про MySQL читайте: http://www.percona.com/blog/ • Про PostgreSQL можно проштудировать: http://www.pgcon.org/2012/schedule/track/Hacking/408.en.html • Всё сложней чем я описал (упростил для наглядности)
  • 27. Ключевые вопросы • Как организовать журнал? • Как уменьшить объём записи на диск? • Как уменьшить количество fsync? • Причём тут репликация? Copyright http://svpsychology.ru/ulibka-do-ushey/
  • 30. MySQL • Как вы думаете, сколько журналов в MySQL?
  • 32. История • В MySQL придумали Storage Engine (основным был MyISAM) • В MyISAM не сделали журнал (так тоже можно! но не нужно) • MySQL сделали репликацию • Для репликации сделали имитацию журнала — binary log • MySQL подарили InnoDB • У InnoDB свой журнал • Какой журнал передавать с master на slave? • Настало время офигительных историй
  • 33. Архитектурная ошибка • MySQL реализовал отдельный тип журнала: binary log • Binary log не используется для Point In Time Recovery • InnoDB Undo/Redo Log не используется в репликации
  • 34. Так что там с журналом? • InnoDB Undo/Redo Log похож на PostgreSQL WAL • Binary log — отдельный журнал с шахматами и феями • Форматы binary log: – SBR — Statement-based replication – RBS — Row-based replication – Mixed format logging • Но раз уже его сделали, давайте разбираться
  • 35. Statement-based • Журнал — файл с последовательно записанными событиями • Каждой событие — одна транзакция • Транзакция — SQL запросы, от BEGIN; до COMMIT; • В начале события идут два поля – use dbname; <== ведь у нас может быть несколько баз – timestamp времени завершения транзакции на master • Давайте нарисуем (я вообще люблю картинки)
  • 37. Row-based • Журнал — последовательно записанные события • Событие содержит BEFORE и AFTER образы • Из каждой изменённой таблицы в образ попадает набор строк • Как именно: – DELETE — строка есть в BEFORE image – INSERT — строка есть в AFTER image – UPDATE — строка есть в обоих – ALTER — это такой UPDATE • Если на пальцах: это такие бинарные патчи
  • 38.
  • 39.
  • 40.
  • 41.
  • 42. Mixed-based • Это такая statement-based которая иногда row-based • Таким образом хотели решить отдельные проблемы • С версии 5.1.12 по 5.1.29 это даже был формат по умолчанию • Часть проблем решили, но в основном взяли проблемы из обоих форматов • Например, триггеры на slave работают лишь иногда (если событие пришло в statement-формате) • Лучше не трогать (или нужно очень хорошо понимать что ты делаешь)
  • 44. Беспредел SQL • Часто думают, что реляционная таблица — это массив • Некоторые даже думают, что это двумерный массив • Но таблица — гомогенное мультимножество кортежей • Кортеж — набор упорядоченных типизированных значений • Гомогенное — они одинакового типа • Мультимножество — могут быть дубликаты • Мультимножество — порядок элементов не задан • Строка — кортеж, таблица — их гомогенное мультимножество
  • 45. Хаос порождает порядок • Порядок выдачи строчек в запросе не определён • Окей, можно написать ORDER BY • Даже с ORDER BY для повторяющихся ключей порядок не задан • Понимание таблицы как «массива» не помогает, а мешает • Таблица - «гомогенное мультимножество» • Запомните и никогда не забывайте
  • 46. Statement based replication ALTER TABLE t DROP COLUMN old_key; ALTER TABLE t ADD COLUMN key INT PRIMARY KEY AUTO_INCREMENT;
  • 47. Проблема в том, что... • Запросы на master и slave выполняются по-разному • Точнее, в разном порядке • Физический порядок строчек на master и slave будет разный • Значения в колонке key на master и slave будут различными • Мы на это тоже наступили • DBA! Приглядывайте за админами и особенно разработчиками • Мы на это тоже наступали • Но у нас на master и slave было разное число строк • Но это совсем другая история...
  • 48. Statement based replication CREATE TABLE t2 LIKE t1; ALTER TABLE t2 ADD id INT AUTO_INCREMENT PRIMARY KEY; INSERT INTO t2 SELECT * FROM t1 ORDER BY col1, col2; • http://dev.mysql.com/doc/refman/5.5/en/replication-features-auto-in crement.html
  • 49. Логическая и физическая • Физическая репликация работает со страницами • Логическая репликация работает с кортежами • PostgreSQL WAL, InnoDB Undo/Redo Log — физическая • Row-based binary log — логическая • Statement-based binary log — недоразумение • Statement-based binary log — это даже не журнал • Всё так по историческим причинам
  • 50. Репликация и индексы • Логическая репликация (row-based) «не знает», как хранятся данные на диске • При примении событий из row-based binlog нужно найти в таблице и индексах строчки, которые мы обновляем • Производительность логической репликации зависит от индексов на slave • Физическая репликация обычно IO-bound • Логическая репликация обычно CPU-bound
  • 51. Statement-based и CPU • Statement-based репликация так же плоха, как row-based • Точнее она хуже (с точки зрения потребления процессора) • Выполнение запроса на slave также трудоёмко, как выполнение запроса на master
  • 52. Репликация и диск • PostgreSQL пишет в два места: хранилище данных и журнал • MySQL InnoDB master пишет в три места: – Хранилище (tablespace) – Журнал (undo/redo log) – Binary log • MySQL row-based репликация в полтора раза хуже PostgreSQL
  • 53.
  • 54. Репликация тормозит... • Как найти причину?
  • 56. Диагностика • В 5.6 / 5.7 есть SLAVE PERFORMANCE SCHEMA • В 5.5 приходится поднимать лог коммитов в puppet • Иногда это не помогает • Тогда я беру approve на пытки у технического директора (спасибо, Дима!) • Но даже пытки не всегда помогают • Можно посмотреть slow query log (но это если statement based) • В общем, всё грустно
  • 57. Но и это ещё не все
  • 58. Параллелизм • Master выполняет запросы параллельно • В журнал и/или лог запросы пишутся последовательно • Можно ли выполнять запросы параллельно?
  • 59. Параллелизм • Есть крутая теорема о сериализации транзакций • Читаем про неё у Вани: http://plumqqz.livejournal.com/387380.html • Коротко говоря: можно, но есть нюансы (в них дьявол) • PostgreSQL — IO-bound, диск не параллелится, хорошо • MySQL — CPU-bound, параллелить нельзя, плохо • Мощный сервер о 12 ядрах, занято одно ядро • Лимитирует скорость MySQL репликация тактовая частота ядра, а не количество ядер
  • 60. Репликация и master • Сильная сторона асинхронной репликации — отсутствие отрицательной обратной связи • http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar_inno db_locks_unsafe_for_binlog • sysvar_innodb_locks_unsafe_for_binlog=0 • Чтобы statement-based корректно работала, нам нужно запретить параллельную вставку новых записей на master • Абстракции протекли: InnoDB (storage engine layer) вынужден знать про репликацию (MySQL-layer)
  • 61. Давай сгруппируем • Транзакции можно группировать • PostgreSQL: synchronous_commit=0, commit_delay=X • MySQL: innodb_flush_log_at_trx_commit = 0 либо innodb_flush_log_at_trx_commit = 1 • Однако, MySQL нужно писать в два журнала • Group Binary Log Commit — 5.6 / 5.7 • Два журнала — нужен two-phase-commit http://en.wikipedia.org/wiki/Two-phase_commit_protocol
  • 62. Group Binary Log Commit http://www.percona.com/blog/2011/07/13/testing-the-group-commit-fix/
  • 63. Группы и параллелизм • Сгруппированные коммиты можно применять параллельно • MySQL 5.6: DB, MySQL 5.7: DB и LOGICAL_CLOCK • Если на master много взаимонепересекающихся коммитов, они попадут в одну группу • Ниже опции которые нужно крутить • Master: binlog_order_commits, binlog_max_flush_queue_time, innodb_flush_log_at_trx_commit • Slave: slave_parallel_type, slave_parallel_workers
  • 65. Анализ результатов • https://github.com/zamotivator/2014-highload-mysql • Настройки master и slave, скрипты ищите по ссылке • Нагрузка: Sysbench, 16 потоков, oltp-complex • Один поток 5.7 работает хуже 5.5 • Четыре потока 5.7 работают примерно как 5.5 • Для параллелизма нужен group binary log commit на master (5.7) • Миграция без downtime master 5.5, slave 5.7 будет отставать
  • 66.
  • 68. Выводы • PostgreSQL репликация как правило IO-bound • MySQL репликация CPU-bound
  • 69. Выводы • PostgreSQL репликация как правило IO-bound • MySQL репликация CPU-bound • PostgreSQL репликация генерирует много* бинарных логов • MySQL row-based сравнимо, statement-based — сильно меньше
  • 70. Выводы • PostgreSQL репликация как правило IO-bound • MySQL репликация CPU-bound • PostgreSQL репликация генерирует много* бинарных логов • MysQL row-based сравнимо, statement-based — сильно меньше • PostgreSQL и MySQL row-based корректно работают всегда • MySQL statement-based может работать некорректно
  • 71. Выводы • PostgreSQL репликация как правило IO-bound • MySQL репликация CPU-bound • PostgreSQL репликация генерирует много* бинарных логов • MysQL row-based сравнимо, statement-based — сильно меньше • PostgreSQL и MySQL row-based корректно работают всегда • MySQL statement-based может работать некорректно • PostrgreSQL репликация не позволяет иметь разные индексы на master и slave • MySQL репликация зависима от индексов
  • 72. Благодарности • Константин Осипов, Mail.Ru, MySQL, Tarantool — критика • Дмитрий Ленев, Oracle — критика и помощь • Александр Горный, Mail.Ru — критика • Александр Чистяков, Git in Sky — бенчмарки • Максим Оранский, http://шанти-шанти.рф/ — вычитка и советы • Федор Сигаев, Mail.Ru, PostgreSQL — советы • Дмитрий Кирноценский, Mail.Ru — разрешение опубличить данные • Дмитрий Школьников, Mail.Ru — оформление
  • 73. Контакты • Личный: oleg@oleg.sh • Рабочий: o.tsarev@corp.mail.ru • Facebook: https://www.facebook.com/oleg.i.tsarev • Github: https://github.com/zamotivator