SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
История успеха
Яндекс.Почты
Владимир Бородин
Запущена в 2000
10+ миллионов пользователей в сутки
200.000 RPS в бэкенды web/mobile/imap
150+ миллионов писем покладки в сутки
20+ ПБ данных
3
О Яндекс.Почте
Миграция из Oracle в PostgreSQL
300+ ТБ метаданных без избыточности
250k запросов в секунду
OLTP: 80% чтений, 20% записи
Предыдущие попытки
MySQL
Самописное решение
4
Об этом рассказе
5
О почтовых метаданных
6
Назад в 2012
Всё хранилось в Oracle
Очень много PL/SQL логики
Эффективная утилизация аппаратного обеспечения
10+ ТБ данных на шард
Рабочий LA 100
Много ручных операций
Тёплые (SSD) и холодные (SATA) базы для разных пользователей
75% SSD, 25% SATA
8
Метаданные Яндекс.Почты
9
Шардирование и отказоустойчивость
10
Внутри приложения
11
Реальность
PL/SQL deploy
Library cache
Множество ручных операций
Переключение мастера, наливка новой базы, переносы данных
Только синхронный интерфейс в OCCI
Проблемы с разработческими окружениями
Не очень отзывчивая поддержка
12
Наиболее популярные проблемы
Главная причина
shop.oracle.com
Хронология
Октябрь 2012 — политическое решение
Избавиться от Oracle за 3 года
Апрель 2013 — первые эксперименты с разными СУБД
PostgreSQL
Множество NoSQL решений
Самописное решение на основе поискового бэкенды
Июль 2013 — июнь 2014 — эксперимент со сборщиками
https://simply.name/ru/video-pg-meetup-yandex.html
15
Эксперименты
Август 2014 — декабрь 2014
Прокладка всего боевого потока писем в PostgreSQL
Асинхронно
Первоначальные решения со схемой данных
Важно для слоя абстракции
Нагрузочное тестирование под живой нагрузкой
Выбор аппаратного обеспечения
Множество другого опыта работы с PostgreSQL
https://simply.name/ru/postgresql-and-systemtap.html
16
Прототип всей почты
Январь 2015 — январь 2016 — разработка
Июнь 2015 — dog fooding
Ускорение разработки
Сентябрь 2015 — начало миграции неактивных пользователей
Исправление ошибок в коде переноса
Обратный перенос (план Б)
Январь 2016 — апрель 2016 — миграция
17
Основная работа
Переписывание всего кода для работы с Oracle и PostgreSQL
10 человеколет
19
Миграция
20
Завершение
Основные изменения
22
macs
23
Шардирование и отказоустойчивость
24
Аппаратное обеспечение
Тёплые базы (SSD) для большинства активных пользователей
Холодные базы (SATA) для всех неактивных пользователей
Горячие базы для очень активных пользователей
2% пользователей создают 50% нагрузки
Автоматизация переноса пользователей между типами шардов
TBD: перемещение старых писем активных пользователей с SSD на
SATA
25
Аппаратное обеспечение
В Oracle все идентификаторы (mid, fid, lid, tid) глобально уникальны
Диапазоны для sequence’ов каждого шарда в отдельной БД
NUMBER(20, 0) — 20 байт
В PostgreSQL идентификаторы уникальны в пределах одного логина
Вместо уникального mid уникальная пара (uid, mid)
Bigint + bigint — 16 байт
26
Идентификаторы
Меньше конкуренция за одну страницу индекса
Обычный B-Tree вместо реверсивных индексов
Ревизии для всех объектов
Возможность читать с реплик только актуальные данные
Инкрементальные обновления для IMAP и мобильных
Денормализация части данных
Массивы и GIN
Композитные типы
27
Изменения схемы
xdb01g/maildb M # dS mail.box
Table "mail.box"
Column | Type | Modifiers
---------------+--------------------------+------------------------
uid | bigint | not null
mid | bigint | not null
lids | integer[] | not null
<...>
Indexes:
"pk_box" PRIMARY KEY, btree (uid, mid)
"i_box_uid_lids" gin (mail.ulids(uid, lids)) WITH (fastupdate=off)
<...>
xdb01g/maildb M #
28
Пример
PL/pgSQL прекрасен
Сильно сократили количество логики
Только для гарантии логической целостности данных
Сильно увеличили покрытие тестами
Цена ошибки очень высока
Простой deploy
29
Хранимая логика
SaltStack
Детальный diff между текущим и ожидаемым состоянием
Все изменения схемы и кода через миграции
Все частые операции автоматизированы
Репрезентативные тестовые окружения
30
Подход к обслуживанию
Проблемы
Problem with ExclusiveLock on inserts
Checkpoint distribution
ExclusiveLock on extension of relation with huge shared_buffers
Hanging startup process on the replica after vacuuming on master
Replication slots and isolation levels
Segfault in BackendIdGetTransactionIds
Значительно больше решено без помощи сообщества
32
До начала основного переноса
Oracle DBA
В любой непонятной
ситуации виноват
autovacuum
https://simply.name/ru/pg-stat-wait.html
Wait_event in pg_stat_activity (9.6)
https://simply.name/ru/slides-pgday2015.html
34
Диагностика
В Oracle бэкапы (inc0 + 6 * inc1) и archive логи ≈ размер БД
В PostgreSQL с barman’ом ≈ N * размер БД, где N > 5
WAL’ы сжимаются, а бэкапы нет
File-level increment’ы толком не работают
Все операции однопоточные и очень медленные
Для 300 ТБ данных понадобилось бы ≈ 2 ПБ под бэкапы
https://github.com/2ndquadrant-it/barman/issues/21
http://pgday.ru/ru/2016/papers/80
35
Резервные копии
Проблемы не с PostgreSQL
Проблемы с данными
Очень много legacy за 10+ лет
Ошибки в коде переноса
36
Во время основного переноса
Завершение
Declarative partitioning
Хороший recovery manager
Параллелизм/сжатие/page-level increment’ы
Частичное восстановление (например, одной таблицы) в online
Дальнейшее развитие интерфейса ожиданий
Большой разделяемый кэш, O_DIRECT и асинхронное I/O
Quorum commit
38
Нам не хватает в PostgreSQL
1 PB с отказоустойчивостью (100+ миллиардов строк)
250k TPS
Три календарных года / 10+ человеколет
Быстрее deploy / эффективнее использование времени DBA
Рефакторинг кода всего бэкенда
В 3 раза больше аппаратного обеспечения
Ни одной крупной аварии пока :)
Linux, nginx, postfix, PostgreSQL
39
Итоги
Владимир Бородин
Системный администратор
Вопросы?
@man_brain
https://simply.name
+7 (495) 739 70 00, доб. 7255
d0uble@yandex-team.ru

Weitere ähnliche Inhalte

Was ist angesagt?

Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
 
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в ОдноклассникахБалансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в ОдноклассникахOntico
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksRoman Pavlushko
 
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...Nikolay Samokhvalov
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Ontico
 
Реактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicРеактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicVadim Tsesko
 
Базы данных. MongoDB
Базы данных. MongoDBБазы данных. MongoDB
Базы данных. MongoDBVadim Tsesko
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)Nikolay Samokhvalov
 
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Ontico
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Ontico
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Ontico
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Ontico
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеAlexandr Krasheninnikov
 
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Ontico
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013Roman Pavlushko
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)Ontico
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). Badoo Development
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Ontico
 

Was ist angesagt? (20)

Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в ОдноклассникахБалансировка нагрузки и отказоустойчивость в Одноклассниках
Балансировка нагрузки и отказоустойчивость в Одноклассниках
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
 
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
 
Реактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/musicРеактивный раздатчик ok.ru/music
Реактивный раздатчик ok.ru/music
 
Базы данных. MongoDB
Базы данных. MongoDBБазы данных. MongoDB
Базы данных. MongoDB
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
Avito Stachka 2012
Avito Stachka 2012Avito Stachka 2012
Avito Stachka 2012
 
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
 

Ähnlich wie История успеха Яндекс.Почты

КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов
КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей ФроловКРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов
КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей ФроловАндрей Фролов
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...Nikolay Samokhvalov
 
Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..webhostingguy
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
как из трех стоек сделать две.
как из трех стоек сделать две.как из трех стоек сделать две.
как из трех стоек сделать две.Serguei Gitinsky
 
MongoDB basics in Russian
MongoDB basics in RussianMongoDB basics in Russian
MongoDB basics in RussianOleg Kachan
 
hl++ Rubtsov
hl++ Rubtsovhl++ Rubtsov
hl++ RubtsovOntico
 
Технологические решения для импортозамещения в программной инфраструктуре
Технологические решения для импортозамещения  в программной инфраструктуреТехнологические решения для импортозамещения  в программной инфраструктуре
Технологические решения для импортозамещения в программной инфраструктуреКРОК
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программистаSlach
 
Scaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusScaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusOntico
 
Innodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 RusInnodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 RusOntico
 
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...Ontico
 
Oracle Timesten
Oracle TimestenOracle Timesten
Oracle TimestenOntico
 
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...Tanya Denisyuk
 
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)Ontico
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераСпасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераDaniel Podolsky
 
Android Telegram S Optimizations
Android Telegram S OptimizationsAndroid Telegram S Optimizations
Android Telegram S OptimizationsStepan Korshakov
 
СУБД Firebird: Краткий обзор, Дмитрий Еманов (in Russian)
СУБД Firebird: Краткий обзор, Дмитрий Еманов (in Russian)СУБД Firebird: Краткий обзор, Дмитрий Еманов (in Russian)
СУБД Firebird: Краткий обзор, Дмитрий Еманов (in Russian)Alexey Kovyazin
 

Ähnlich wie История успеха Яндекс.Почты (20)

КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов
КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей ФроловКРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов
КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 
2056
20562056
2056
 
Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
как из трех стоек сделать две.
как из трех стоек сделать две.как из трех стоек сделать две.
как из трех стоек сделать две.
 
MongoDB basics in Russian
MongoDB basics in RussianMongoDB basics in Russian
MongoDB basics in Russian
 
hl++ Rubtsov
hl++ Rubtsovhl++ Rubtsov
hl++ Rubtsov
 
Технологические решения для импортозамещения в программной инфраструктуре
Технологические решения для импортозамещения  в программной инфраструктуреТехнологические решения для импортозамещения  в программной инфраструктуре
Технологические решения для импортозамещения в программной инфраструктуре
 
Open source субд глазами обычного программиста
Open source субд глазами обычного программистаOpen source субд глазами обычного программиста
Open source субд глазами обычного программиста
 
Scaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusScaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 Rus
 
Innodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 RusInnodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 Rus
 
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
Пишем свою платформу для управления данными. Это очень просто / Суханов Васил...
 
Cassandra db
Cassandra dbCassandra db
Cassandra db
 
Oracle Timesten
Oracle TimestenOracle Timesten
Oracle Timesten
 
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
 
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
Ускорение веб-аналитики с использованием Column-oriented СУБД (Иван Авсеянко)
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераСпасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного Хецнера
 
Android Telegram S Optimizations
Android Telegram S OptimizationsAndroid Telegram S Optimizations
Android Telegram S Optimizations
 
СУБД Firebird: Краткий обзор, Дмитрий Еманов (in Russian)
СУБД Firebird: Краткий обзор, Дмитрий Еманов (in Russian)СУБД Firebird: Краткий обзор, Дмитрий Еманов (in Russian)
СУБД Firebird: Краткий обзор, Дмитрий Еманов (in Russian)
 

Mehr von dev1ant

Yandex.Mail success story
Yandex.Mail success storyYandex.Mail success story
Yandex.Mail success storydev1ant
 
2015.10.14 Как спать спокойно
2015.10.14 Как спать спокойно2015.10.14 Как спать спокойно
2015.10.14 Как спать спокойноdev1ant
 
2015.07.16 Способы диагностики PostgreSQL
2015.07.16 Способы диагностики PostgreSQL2015.07.16 Способы диагностики PostgreSQL
2015.07.16 Способы диагностики PostgreSQLdev1ant
 
2015.02.06 PostgreSQL в Яндексе: история успеха №2
2015.02.06 PostgreSQL в Яндексе: история успеха №22015.02.06 PostgreSQL в Яндексе: история успеха №2
2015.02.06 PostgreSQL в Яндексе: история успеха №2dev1ant
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQLdev1ant
 
История небольшого успеха с PostgreSQL
История небольшого успеха с PostgreSQLИстория небольшого успеха с PostgreSQL
История небольшого успеха с PostgreSQLdev1ant
 

Mehr von dev1ant (6)

Yandex.Mail success story
Yandex.Mail success storyYandex.Mail success story
Yandex.Mail success story
 
2015.10.14 Как спать спокойно
2015.10.14 Как спать спокойно2015.10.14 Как спать спокойно
2015.10.14 Как спать спокойно
 
2015.07.16 Способы диагностики PostgreSQL
2015.07.16 Способы диагностики PostgreSQL2015.07.16 Способы диагностики PostgreSQL
2015.07.16 Способы диагностики PostgreSQL
 
2015.02.06 PostgreSQL в Яндексе: история успеха №2
2015.02.06 PostgreSQL в Яндексе: история успеха №22015.02.06 PostgreSQL в Яндексе: история успеха №2
2015.02.06 PostgreSQL в Яндексе: история успеха №2
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
История небольшого успеха с PostgreSQL
История небольшого успеха с PostgreSQLИстория небольшого успеха с PostgreSQL
История небольшого успеха с PostgreSQL
 

История успеха Яндекс.Почты

  • 1.
  • 3. Запущена в 2000 10+ миллионов пользователей в сутки 200.000 RPS в бэкенды web/mobile/imap 150+ миллионов писем покладки в сутки 20+ ПБ данных 3 О Яндекс.Почте
  • 4. Миграция из Oracle в PostgreSQL 300+ ТБ метаданных без избыточности 250k запросов в секунду OLTP: 80% чтений, 20% записи Предыдущие попытки MySQL Самописное решение 4 Об этом рассказе
  • 6. 6
  • 8. Всё хранилось в Oracle Очень много PL/SQL логики Эффективная утилизация аппаратного обеспечения 10+ ТБ данных на шард Рабочий LA 100 Много ручных операций Тёплые (SSD) и холодные (SATA) базы для разных пользователей 75% SSD, 25% SATA 8 Метаданные Яндекс.Почты
  • 12. PL/SQL deploy Library cache Множество ручных операций Переключение мастера, наливка новой базы, переносы данных Только синхронный интерфейс в OCCI Проблемы с разработческими окружениями Не очень отзывчивая поддержка 12 Наиболее популярные проблемы
  • 15. Октябрь 2012 — политическое решение Избавиться от Oracle за 3 года Апрель 2013 — первые эксперименты с разными СУБД PostgreSQL Множество NoSQL решений Самописное решение на основе поискового бэкенды Июль 2013 — июнь 2014 — эксперимент со сборщиками https://simply.name/ru/video-pg-meetup-yandex.html 15 Эксперименты
  • 16. Август 2014 — декабрь 2014 Прокладка всего боевого потока писем в PostgreSQL Асинхронно Первоначальные решения со схемой данных Важно для слоя абстракции Нагрузочное тестирование под живой нагрузкой Выбор аппаратного обеспечения Множество другого опыта работы с PostgreSQL https://simply.name/ru/postgresql-and-systemtap.html 16 Прототип всей почты
  • 17. Январь 2015 — январь 2016 — разработка Июнь 2015 — dog fooding Ускорение разработки Сентябрь 2015 — начало миграции неактивных пользователей Исправление ошибок в коде переноса Обратный перенос (план Б) Январь 2016 — апрель 2016 — миграция 17 Основная работа
  • 18. Переписывание всего кода для работы с Oracle и PostgreSQL 10 человеколет
  • 25. Тёплые базы (SSD) для большинства активных пользователей Холодные базы (SATA) для всех неактивных пользователей Горячие базы для очень активных пользователей 2% пользователей создают 50% нагрузки Автоматизация переноса пользователей между типами шардов TBD: перемещение старых писем активных пользователей с SSD на SATA 25 Аппаратное обеспечение
  • 26. В Oracle все идентификаторы (mid, fid, lid, tid) глобально уникальны Диапазоны для sequence’ов каждого шарда в отдельной БД NUMBER(20, 0) — 20 байт В PostgreSQL идентификаторы уникальны в пределах одного логина Вместо уникального mid уникальная пара (uid, mid) Bigint + bigint — 16 байт 26 Идентификаторы
  • 27. Меньше конкуренция за одну страницу индекса Обычный B-Tree вместо реверсивных индексов Ревизии для всех объектов Возможность читать с реплик только актуальные данные Инкрементальные обновления для IMAP и мобильных Денормализация части данных Массивы и GIN Композитные типы 27 Изменения схемы
  • 28. xdb01g/maildb M # dS mail.box Table "mail.box" Column | Type | Modifiers ---------------+--------------------------+------------------------ uid | bigint | not null mid | bigint | not null lids | integer[] | not null <...> Indexes: "pk_box" PRIMARY KEY, btree (uid, mid) "i_box_uid_lids" gin (mail.ulids(uid, lids)) WITH (fastupdate=off) <...> xdb01g/maildb M # 28 Пример
  • 29. PL/pgSQL прекрасен Сильно сократили количество логики Только для гарантии логической целостности данных Сильно увеличили покрытие тестами Цена ошибки очень высока Простой deploy 29 Хранимая логика
  • 30. SaltStack Детальный diff между текущим и ожидаемым состоянием Все изменения схемы и кода через миграции Все частые операции автоматизированы Репрезентативные тестовые окружения 30 Подход к обслуживанию
  • 32. Problem with ExclusiveLock on inserts Checkpoint distribution ExclusiveLock on extension of relation with huge shared_buffers Hanging startup process on the replica after vacuuming on master Replication slots and isolation levels Segfault in BackendIdGetTransactionIds Значительно больше решено без помощи сообщества 32 До начала основного переноса
  • 33. Oracle DBA В любой непонятной ситуации виноват autovacuum
  • 34. https://simply.name/ru/pg-stat-wait.html Wait_event in pg_stat_activity (9.6) https://simply.name/ru/slides-pgday2015.html 34 Диагностика
  • 35. В Oracle бэкапы (inc0 + 6 * inc1) и archive логи ≈ размер БД В PostgreSQL с barman’ом ≈ N * размер БД, где N > 5 WAL’ы сжимаются, а бэкапы нет File-level increment’ы толком не работают Все операции однопоточные и очень медленные Для 300 ТБ данных понадобилось бы ≈ 2 ПБ под бэкапы https://github.com/2ndquadrant-it/barman/issues/21 http://pgday.ru/ru/2016/papers/80 35 Резервные копии
  • 36. Проблемы не с PostgreSQL Проблемы с данными Очень много legacy за 10+ лет Ошибки в коде переноса 36 Во время основного переноса
  • 38. Declarative partitioning Хороший recovery manager Параллелизм/сжатие/page-level increment’ы Частичное восстановление (например, одной таблицы) в online Дальнейшее развитие интерфейса ожиданий Большой разделяемый кэш, O_DIRECT и асинхронное I/O Quorum commit 38 Нам не хватает в PostgreSQL
  • 39. 1 PB с отказоустойчивостью (100+ миллиардов строк) 250k TPS Три календарных года / 10+ человеколет Быстрее deploy / эффективнее использование времени DBA Рефакторинг кода всего бэкенда В 3 раза больше аппаратного обеспечения Ни одной крупной аварии пока :) Linux, nginx, postfix, PostgreSQL 39 Итоги