$30 off During Our Annual Pro Sale. View Details »

Дмитрий Логовский – «Как заставить вашу базу-данных держать 20K RPS, варианты масштабирования и их минусы»

Ozon Tech
September 22, 2023

Дмитрий Логовский – «Как заставить вашу базу-данных держать 20K RPS, варианты масштабирования и их минусы»

Ozon Tech

September 22, 2023
Tweet

More Decks by Ozon Tech

Other Decks in Technology

Transcript

  1. Как заставить вашу БД
    держать 20K RPS: варианты
    масштабирования и их минусы
    Дмитрий Логовский, руководитель группы
    разработки «Оформление заказа»

    View Slide

  2. 2
    Предыстория
    Мы столкнулись с проблемой
    роста нагрузки из-за роста
    продаж по схеме доставки rFBS
    2

    View Slide

  3. 3
    rFBS
    (Real Fulfillment by Seller)
    RFBS
    Схема работы,


    при которой продавец


    сам отвечает за хранение


    и доставку товара

    View Slide

  4. 4
    Когда Ozon строит свой
    фулфилмент, мы можем
    легко прогнозировать
    примерный объём
    товаров и доставок
    В случае rFBS прогнозы делать
    сложнее, здесь возможен кратный
    рост товаров и доставок за короткий
    промежуток (что и произошло)
    Слабым местом оказалась
    БД, и нам в срочном
    порядке пришлось думать,
    как держать такую нагрузку

    View Slide

  5. 5
    Репликация
    Этап 1

    View Slide

  6. 6
    Что такое репликация данных и как это работает?
    Репликация —
    это дублирование данных, когда
    данные с одного сервера полностью
    повторяются на других

    View Slide

  7. Что такое репликация данных и как это работает?
    7
    Приложения пишут
    данные в одну базу
    данных, а изменения
    автоматически
    синхронизируются


    на другие базы
    Репликация используется для
    достижения двух целей :
    Повышение отказоустойчивости


    Если один из серверов выйдет из строя, то
    остальные продолжат работу
    Повышение производительности


    Распределение данных по серверам в разных
    частях страны или мира повышает скорость
    доступа к данным для местных пользователей

    View Slide

  8. 8
    Что такое репликация данных и как это работает?
    Write-Ahead Log
    (WAL)

    View Slide

  9. Потоковая репликация
    9
    • Работает из коробки


    • Годами обкатанная технология


    • Низкое потребление ресурсов, так как никакой логики
    при репликации нет, изменения выполняются в том же
    порядке, что и на мастере


    • Простота конфигурации, настроил и забыл, простое
    побайтовое копирование через WAL
    Плюсы

    View Slide

  10. Потоковая репликация
    10
    • Работает из коробки


    • Годами обкатанная технология


    • Низкое потребление ресурсов, так как никакой логики
    при репликации нет, изменения выполняются в том же
    порядке, что и на мастере


    • Простота конфигурации, настроил и забыл, простое
    побайтовое копирование через WAL
    Плюсы

    View Slide

  11. Потоковая репликация
    11
    • Работает из коробки


    • Годами обкатанная технология


    • Низкое потребление ресурсов, так как никакой логики
    при репликации нет, изменения выполняются в том же
    порядке, что и на мастере


    • Простота конфигурации, настроил и забыл, простое
    побайтовое копирование через WAL
    Плюсы

    View Slide

  12. Потоковая репликация
    12
    • Работает из коробки


    • Годами обкатанная технология


    • Низкое потребление ресурсов, так как никакой логики
    при репликации нет, изменения выполняются в том же
    порядке, что и на мастере


    • Простота конфигурации, настроил и забыл, простое
    побайтовое копирование через WAL
    Плюсы

    View Slide

  13. Потоковая репликация
    13
    • Реплицируется весь кластер целиком


    • Реплицируются все операции, включая ошибки


    • Изменения применяются в один поток


    • Работа только в рамках одной мажорной версии


    • Слейвы read only
    Минусы

    View Slide

  14. Потоковая репликация
    14
    • Реплицируется весь кластер целиком


    • Реплицируются все операции, включая ошибки


    • Изменения применяются в один поток


    • Работа только в рамках одной мажорной версии


    • Слейвы read only
    Минусы

    View Slide

  15. Потоковая репликация
    15
    • Реплицируется весь кластер целиком


    • Реплицируются все операции, включая ошибки


    • Изменения применяются в один поток


    • Работа только в рамках одной мажорной версии


    • Слейвы read only
    Минусы

    View Slide

  16. Потоковая репликация
    16
    • Реплицируется весь кластер целиком


    • Реплицируются все операции, включая ошибки


    • Изменения применяются в один поток


    • Работа только в рамках одной мажорной версии


    • Слейвы read only
    Минусы

    View Slide

  17. Потоковая репликация
    17
    • Реплицируется весь кластер целиком


    • Реплицируются все операции, включая ошибки


    • Изменения применяются в один поток


    • Работа только в рамках одной мажорной версии


    • Слейвы read only
    Минусы

    View Slide

  18. Логическая репликация
    18
    • Тоже основана на WAL


    • Мастер и слейв могут иметь разные представления
    данных на диске, разные архитектуры процессора,
    разные структуры таблиц (при условии совместимости
    схем), разные конфигурации и расположение файлов
    данных


    • Частичная репликация, можно реплицировать только
    необходимые данные
    Плюсы

    View Slide

  19. Логическая репликация
    19
    • Тоже основана на WAL


    • Мастер и слейв могут иметь разные представления
    данных на диске, разные архитектуры процессора,
    разные структуры таблиц (при условии совместимости
    схем), разные конфигурации и расположение файлов
    данных


    • Частичная репликация, можно реплицировать только
    необходимые данные
    Плюсы

    View Slide

  20. Логическая репликация
    20
    • Тоже основана на WAL


    • Мастер и слейв могут иметь разные представления
    данных на диске, разные архитектуры процессора,
    разные структуры таблиц (при условии совместимости
    схем), разные конфигурации и расположение файлов
    данных


    • Частичная репликация, можно реплицировать только
    необходимые данные
    Плюсы

    View Slide

  21. Логическая репликация
    21
    • Необходимо повысить уровень логирования, гораздо
    больше информации необходимо писать в
    транзакционный лог


    • Только DML


    • Нельзя менять объекты (схему, название)


    • Работает только с версии PostgreSQL 10+
    Минусы

    View Slide

  22. Логическая репликация
    22
    • Необходимо повысить уровень логирования, гораздо
    больше информации необходимо писать в
    транзакционный лог


    • Только DML


    • Нельзя менять объекты (схему, название)


    • Работает только с версии PostgreSQL 10+
    Минусы

    View Slide

  23. Логическая репликация
    23
    • Необходимо повысить уровень логирования, гораздо
    больше информации необходимо писать в
    транзакционный лог


    • Только DML


    • Нельзя менять объекты (схему, название)


    • Работает только с версии PostgreSQL 10+
    Минусы

    View Slide

  24. Логическая репликация
    24
    • Необходимо повысить уровень логирования, гораздо
    больше информации необходимо писать в
    транзакционный лог


    • Только DML


    • Нельзя менять объекты (схему, название)


    • Работает только с версии PostgreSQL 10+
    Минусы

    View Slide

  25. 25
    Синхронная
    репликация
    Асинхронная
    репликация
    VS

    View Slide

  26. Идеальный набор репликации
    26
    Master
    Асинхронная
    репликация
    Асинхронная
    репликация
    Асинхронная
    репликация
    Cинхронная
    репликация

    View Slide

  27. Какие подводные камни?
    27
    Нужно избегать обильного чтения


    с мастера и по возможности с синхронной реплики
    !
    Базовое правило — в мастер пишем,
    читаем только из слейвов
    !

    View Slide

  28. 28
    Партиционирование
    Этап 2

    View Slide

  29. 29
    Что такое партиционирование и как это работает?
    Партиционирование —
    это метод разделения больших
    (исходя из количества записей, а не
    столбцов) таблиц на много маленьких

    View Slide

  30. Что такое партиционирование и как это работает?
    30

    View Slide

  31. Что такое партиционирование и как это работает?
    31
    • На каждый insert/update перестраиваем индексы, чем
    больше таблица, тем дороже перестройка индекса


    • Если много удаляем/апдейтим записи в базе, то
    vacuum может быть проблемой, update=delete+insert


    • Селекты делать только по индексам, чем больше
    индексов, тем больнее каждый insert/update
    Проблемы больших таблиц

    View Slide

  32. Что такое партиционирование и как это работает?
    32
    • На каждый insert/update перестраиваем индексы, чем
    больше таблица, тем дороже перестройка индекса


    • Если много удаляем/апдейтим записи в базе, то
    vacuum может быть проблемой, update=delete+insert


    • Селекты делать только по индексам, чем больше
    индексов, тем больнее каждый insert/update
    Проблемы больших таблиц

    View Slide

  33. Что такое партиционирование и как это работает?
    33
    • На каждый insert/update перестраиваем индексы, чем
    больше таблица, тем дороже перестройка индекса


    • Если много удаляем/апдейтим записи в базе, то
    vacuum может быть проблемой, update=delete+insert


    • Селекты делать только по индексам, чем больше
    индексов, тем больнее каждый insert/update
    Проблемы больших таблиц

    View Slide

  34. Что такое репликация данных и как это работает?
    34
    Один из вариантов,
    как избежать
    проблем больших
    таблиц — это
    партиционировать
    их на несколько
    более мелких
    Таким образом индексы будут
    намного меньше, и все наши
    проблемы больших таблиц
    будут в N раз меньше

    View Slide

  35. Какой эффект можно получить
    от партиционирования таблиц?
    35

    View Slide

  36. 36
    Предыстория
    Какие подводные камни?
    36

    View Slide

  37. Что такое партиционирование и как это работает?
    37
    • Очень внимательно относиться к количеству
    партиций, идеально не больше 100-200


    • Не нагружать БД проверками, которые можем
    сделать на клиентах


    • Не использовать встроенные системы
    автовычисления партиций на БД


    • Не использовать триггеры для автоматического
    создания партиций

    View Slide

  38. Что такое партиционирование и как это работает?
    38
    • Очень внимательно относиться к количеству
    партиций, идеально не больше 100-200


    • Не нагружать БД проверками, которые можем
    сделать на клиентах


    • Не использовать встроенные системы
    автовычисления партиций на БД


    • Не использовать триггеры для автоматического
    создания партиций

    View Slide

  39. Что такое партиционирование и как это работает?
    39
    • Очень внимательно относиться к количеству
    партиций, идеально не больше 100-200


    • Не нагружать БД проверками, которые можем
    сделать на клиентах


    • Не использовать встроенные системы
    автовычисления партиций на БД


    • Не использовать триггеры для автоматического
    создания партиций

    View Slide

  40. Что такое партиционирование и как это работает?
    40
    • Очень внимательно относиться к количеству
    партиций, идеально не больше 100-200


    • Не нагружать БД проверками, которые можем
    сделать на клиентах


    • Не использовать встроенные системы
    автовычисления партиций на БД


    • Не использовать триггеры для автоматического
    создания партиций

    View Slide

  41. 41
    Шардирование
    Этап 3

    View Slide

  42. 42
    Шардинг
    Шардирование —
    это стратегия горизонтального
    масштабирования кластера, при которой
    части одной базы данных размещаются
    на разных шардах

    View Slide

  43. 43
    Шардинг
    Мы выбираем одно или несколько свойств
    атомарного объекта в наборе и называем
    его ключом шардирования shard key.


    От него зависит физический


    адрес данных

    View Slide

  44. Шардинг
    44
    Master
    master_shard_0 master_shard_1 master_shard_2 master_shard_3

    View Slide

  45. Шардинг
    45
    Существуют готовые инструменты
    для шардинга. Например:

    Citus Greenplum

    View Slide

  46. Шардинг
    46
    Шардирование не сложно сделать самостоятельно,


    при условии, что вы можете полностью разделить данные
    между физическими серверами. То есть вам не нужны:
    • Multi shard join


    • Распределенные транзакции


    • Автоматический решардинг

    View Slide

  47. 47
    Предыстория
    О чем нужно обязательно
    подумать при шардинге ?
    47

    View Slide

  48. Логическая репликация
    48
    • Система кратно усложняется в обслуживании, вместо 1
    сервера у вас становится много точек отказа


    • Нужно заранее продумать логику будущего решардинга,
    даже если сейчас вам кажется, что шардов вам хватит


    • Нужно оборачивать запросы в доп логику, высчитывать
    нужный шард, держать множество коннектов
    Проблемы, которые возникают после шардирования

    View Slide

  49. Логическая репликация
    49
    • Система кратно усложняется в обслуживании, вместо 1
    сервера у вас становится много точек отказа


    • Нужно заранее продумать логику будущего решардинга,
    даже если сейчас вам кажется, что шардов вам хватит


    • Нужно оборачивать запросы в доп логику, высчитывать
    нужный шард, держать множество коннектов
    Проблемы, которые возникают после шардирования

    View Slide

  50. Логическая репликация
    50
    • Система кратно усложняется в обслуживании, вместо 1
    сервера у вас становится много точек отказа


    • Нужно заранее продумать логику будущего решардинга,
    даже если сейчас вам кажется, что шардов вам хватит


    • Нужно оборачивать запросы в доп логику, высчитывать
    нужный шард, держать множество коннектов
    Проблемы, которые возникают после шардирования

    View Slide

  51. Идеальный набор репликации
    51
    Master
    Асинхронная
    репликация
    Асинхронная
    репликация
    Асинхронная
    репликация
    Cинхронная
    репликация

    View Slide

  52. Идеальный набор репликации и шардирования
    52
    Maste_shard_0
    Асинхронная
    репликация
    Асинхронная
    репликация
    Асинхронная
    репликация
    Cинхронная
    репликация
    Maste_shard_1
    Асинхронная
    репликация
    Асинхронная
    репликация
    Асинхронная
    репликация
    Cинхронная
    репликация
    Maste_shard_2
    Асинхронная
    репликация
    Асинхронная
    репликация
    Асинхронная
    репликация
    Cинхронная
    репликация
    Maste_shard_3
    Асинхронная
    репликация
    Асинхронная
    репликация
    Асинхронная
    репликация
    Cинхронная
    репликация
    Maste_shard_4
    Асинхронная
    репликация
    Асинхронная
    репликация
    Асинхронная
    репликация
    Cинхронная
    репликация
    Maste_shard_5
    Асинхронная
    репликация
    Асинхронная
    репликация
    Асинхронная
    репликация
    Cинхронная
    репликация

    View Slide

  53. [email protected]
    Спасибо за внимание
    Дмитрий Логовский, руководитель
    группы разработки


    «Оформление заказа»

    View Slide