Аттестационный семинар в Сайберс¶

Масштабирование баз данных¶

Подготовил пайтон-разработчик Федоров Вячеслав¶
Проверил тимлид Андрей Харченко¶

План семинара¶

  1. Требования ACID
  2. Механизм MVCC
  3. Теорема CAP
  4. Репликация/Проблема задержки
  5. Шардинг/Принципы разбиения данных на шарды
  6. Партиционирование
  7. Денормализация

ACID, CAP, MVCC?¶

ACID - про транзакционность!¶

Atomicity — Атомарность¶

Если транзакция (А-Б), то либо выполнить А и Б или ничего.

Consistency — Согласованность¶

Нормально завершенная транзакция сохраняет согласованность базы данных.

Isolation — Изолированность¶

Во время выполнения транзакции параллельные транзакции не должны оказывать влияние на ее результат.

Durability — Надёжность¶

Если пользователь получил подтверждение от системы, что транзакция выполнена, он может быть уверен, что сделанные им изменения не будут отменены из-за какого-либо сбоя.

MVCC - Multi Version Concurrency Control¶

Механизм обеспечения одновременного кокурентного доступа к базе данных, заключающийся в предоставлении каждому пользователю "снимка" базы данных, обладающего тем свойством, что вносимые изменения в базе данныъ невидимы другим пользователям до момента фиксации транзакции.

Этот способ управления позволяет добиться того, что пишущие транзакции не блокируют читающих, и читающие транзакции не блокируют пишущих.

CAP - теорема¶

В любой реализации распределенных вычислений возможно обеспечить не более двух из трех следующих свойств:

Consistency - Согласованность¶

Во всех вычислительных узлах в один момент времени данные не противоречат друг другу.

Availability - Доступность¶

Любой запрос к распределнной системе завершается корректным откликом.

Partition Tolerance - Устойчивость к разделению¶

Расщепление распределенной системы на несколько изолированных секций не приводит к некорректности отклика от каждой из секций. Иначе говоря - система работает в расчете на случаи произвольной потери пакетов внутри сети.

Буква P - всегда с нами!¶

Требование Partition tolerance является данностью для распределенных СУБД.

AP¶

ap.png

CP¶

cp.png

Репликация¶

replication.png

Проблема задержки¶

В соответствии с CAP-теоремой мы будем иметь задержку появления информации на слейве.

Толстый клиент¶

Вообще не читаем данные и обновляем с помощью JS.

Читаем с мастера¶

Делаем отдельный тип запросов. После записи читаем с мастера.

Шардинг¶

Базовый принцип: данные, которые в дальнейшем потребуются вместе, так же должны храниться вместе.

Принцип разделения данных на шарды¶

Центральный дистпетчер, знающий, что где лежит¶

"+" легко менять;

"-" сложно;

Хэш-функция, по ключу вычисляющая шард¶

"+" просто;

"-" сложно менять;

Виртуальный шардинг¶

virtual_sharding

Партиционирование¶

Разбиение больших таблиц на логические части по выбранным критериям.

  • Как средствами базы данных.
  • Так и на уровне приложения.

Денормализация¶

В высоконагруженных системах храним данные не как нам удобно хранить, а как нам удобно их отдавать :)

Всем спасибо!¶

  • https://highload.ru/