Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Дмитрий Логовский – «Как заставить вашу базу-да...

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: варианты масштабирования и

    их минусы Дмитрий Логовский, руководитель группы разработки «Оформление заказа»
  2. 3 rFBS (Real Fulfillment by Seller) RFBS Схема работы, при

    которой продавец сам отвечает за хранение и доставку товара
  3. 4 Когда Ozon строит свой фулфилмент, мы можем легко прогнозировать

    примерный объём товаров и доставок В случае rFBS прогнозы делать сложнее, здесь возможен кратный рост товаров и доставок за короткий промежуток (что и произошло) Слабым местом оказалась БД, и нам в срочном порядке пришлось думать, как держать такую нагрузку
  4. 6 Что такое репликация данных и как это работает? Репликация

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

    пишут данные в одну базу данных, а изменения автоматически синхронизируются на другие базы Репликация используется для достижения двух целей : Повышение отказоустойчивости Если один из серверов выйдет из строя, то остальные продолжат работу Повышение производительности Распределение данных по серверам в разных частях страны или мира повышает скорость доступа к данным для местных пользователей
  6. Потоковая репликация 9 • Работает из коробки • Годами обкатанная

    технология • Низкое потребление ресурсов, так как никакой логики при репликации нет, изменения выполняются в том же порядке, что и на мастере • Простота конфигурации, настроил и забыл, простое побайтовое копирование через WAL Плюсы
  7. Потоковая репликация 10 • Работает из коробки • Годами обкатанная

    технология • Низкое потребление ресурсов, так как никакой логики при репликации нет, изменения выполняются в том же порядке, что и на мастере • Простота конфигурации, настроил и забыл, простое побайтовое копирование через WAL Плюсы
  8. Потоковая репликация 11 • Работает из коробки • Годами обкатанная

    технология • Низкое потребление ресурсов, так как никакой логики при репликации нет, изменения выполняются в том же порядке, что и на мастере • Простота конфигурации, настроил и забыл, простое побайтовое копирование через WAL Плюсы
  9. Потоковая репликация 12 • Работает из коробки • Годами обкатанная

    технология • Низкое потребление ресурсов, так как никакой логики при репликации нет, изменения выполняются в том же порядке, что и на мастере • Простота конфигурации, настроил и забыл, простое побайтовое копирование через WAL Плюсы
  10. Потоковая репликация 13 • Реплицируется весь кластер целиком • Реплицируются

    все операции, включая ошибки • Изменения применяются в один поток • Работа только в рамках одной мажорной версии • Слейвы read only Минусы
  11. Потоковая репликация 14 • Реплицируется весь кластер целиком • Реплицируются

    все операции, включая ошибки • Изменения применяются в один поток • Работа только в рамках одной мажорной версии • Слейвы read only Минусы
  12. Потоковая репликация 15 • Реплицируется весь кластер целиком • Реплицируются

    все операции, включая ошибки • Изменения применяются в один поток • Работа только в рамках одной мажорной версии • Слейвы read only Минусы
  13. Потоковая репликация 16 • Реплицируется весь кластер целиком • Реплицируются

    все операции, включая ошибки • Изменения применяются в один поток • Работа только в рамках одной мажорной версии • Слейвы read only Минусы
  14. Потоковая репликация 17 • Реплицируется весь кластер целиком • Реплицируются

    все операции, включая ошибки • Изменения применяются в один поток • Работа только в рамках одной мажорной версии • Слейвы read only Минусы
  15. Логическая репликация 18 • Тоже основана на WAL • Мастер

    и слейв могут иметь разные представления данных на диске, разные архитектуры процессора, разные структуры таблиц (при условии совместимости схем), разные конфигурации и расположение файлов данных • Частичная репликация, можно реплицировать только необходимые данные Плюсы
  16. Логическая репликация 19 • Тоже основана на WAL • Мастер

    и слейв могут иметь разные представления данных на диске, разные архитектуры процессора, разные структуры таблиц (при условии совместимости схем), разные конфигурации и расположение файлов данных • Частичная репликация, можно реплицировать только необходимые данные Плюсы
  17. Логическая репликация 20 • Тоже основана на WAL • Мастер

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

    информации необходимо писать в транзакционный лог • Только DML • Нельзя менять объекты (схему, название) • Работает только с версии PostgreSQL 10+ Минусы
  19. Логическая репликация 22 • Необходимо повысить уровень логирования, гораздо больше

    информации необходимо писать в транзакционный лог • Только DML • Нельзя менять объекты (схему, название) • Работает только с версии PostgreSQL 10+ Минусы
  20. Логическая репликация 23 • Необходимо повысить уровень логирования, гораздо больше

    информации необходимо писать в транзакционный лог • Только DML • Нельзя менять объекты (схему, название) • Работает только с версии PostgreSQL 10+ Минусы
  21. Логическая репликация 24 • Необходимо повысить уровень логирования, гораздо больше

    информации необходимо писать в транзакционный лог • Только DML • Нельзя менять объекты (схему, название) • Работает только с версии PostgreSQL 10+ Минусы
  22. Какие подводные камни? 27 Нужно избегать обильного чтения с мастера

    и по возможности с синхронной реплики ! Базовое правило — в мастер пишем, читаем только из слейвов !
  23. 29 Что такое партиционирование и как это работает? Партиционирование —

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

    каждый insert/update перестраиваем индексы, чем больше таблица, тем дороже перестройка индекса • Если много удаляем/апдейтим записи в базе, то vacuum может быть проблемой, update=delete+insert • Селекты делать только по индексам, чем больше индексов, тем больнее каждый insert/update Проблемы больших таблиц
  25. Что такое партиционирование и как это работает? 32 • На

    каждый insert/update перестраиваем индексы, чем больше таблица, тем дороже перестройка индекса • Если много удаляем/апдейтим записи в базе, то vacuum может быть проблемой, update=delete+insert • Селекты делать только по индексам, чем больше индексов, тем больнее каждый insert/update Проблемы больших таблиц
  26. Что такое партиционирование и как это работает? 33 • На

    каждый insert/update перестраиваем индексы, чем больше таблица, тем дороже перестройка индекса • Если много удаляем/апдейтим записи в базе, то vacuum может быть проблемой, update=delete+insert • Селекты делать только по индексам, чем больше индексов, тем больнее каждый insert/update Проблемы больших таблиц
  27. Что такое репликация данных и как это работает? 34 Один

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

    внимательно относиться к количеству партиций, идеально не больше 100-200 • Не нагружать БД проверками, которые можем сделать на клиентах • Не использовать встроенные системы автовычисления партиций на БД • Не использовать триггеры для автоматического создания партиций
  29. Что такое партиционирование и как это работает? 38 • Очень

    внимательно относиться к количеству партиций, идеально не больше 100-200 • Не нагружать БД проверками, которые можем сделать на клиентах • Не использовать встроенные системы автовычисления партиций на БД • Не использовать триггеры для автоматического создания партиций
  30. Что такое партиционирование и как это работает? 39 • Очень

    внимательно относиться к количеству партиций, идеально не больше 100-200 • Не нагружать БД проверками, которые можем сделать на клиентах • Не использовать встроенные системы автовычисления партиций на БД • Не использовать триггеры для автоматического создания партиций
  31. Что такое партиционирование и как это работает? 40 • Очень

    внимательно относиться к количеству партиций, идеально не больше 100-200 • Не нагружать БД проверками, которые можем сделать на клиентах • Не использовать встроенные системы автовычисления партиций на БД • Не использовать триггеры для автоматического создания партиций
  32. 42 Шардинг Шардирование — это стратегия горизонтального масштабирования кластера, при

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

    в наборе и называем его ключом шардирования shard key. От него зависит физический адрес данных
  34. Шардинг 46 Шардирование не сложно сделать самостоятельно, при условии, что

    вы можете полностью разделить данные между физическими серверами. То есть вам не нужны: • Multi shard join • Распределенные транзакции • Автоматический решардинг
  35. Логическая репликация 48 • Система кратно усложняется в обслуживании, вместо

    1 сервера у вас становится много точек отказа • Нужно заранее продумать логику будущего решардинга, даже если сейчас вам кажется, что шардов вам хватит • Нужно оборачивать запросы в доп логику, высчитывать нужный шард, держать множество коннектов Проблемы, которые возникают после шардирования
  36. Логическая репликация 49 • Система кратно усложняется в обслуживании, вместо

    1 сервера у вас становится много точек отказа • Нужно заранее продумать логику будущего решардинга, даже если сейчас вам кажется, что шардов вам хватит • Нужно оборачивать запросы в доп логику, высчитывать нужный шард, держать множество коннектов Проблемы, которые возникают после шардирования
  37. Логическая репликация 50 • Система кратно усложняется в обслуживании, вместо

    1 сервера у вас становится много точек отказа • Нужно заранее продумать логику будущего решардинга, даже если сейчас вам кажется, что шардов вам хватит • Нужно оборачивать запросы в доп логику, высчитывать нужный шард, держать множество коннектов Проблемы, которые возникают после шардирования
  38. Идеальный набор репликации и шардирования 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инхронная репликация