Рабочие нагрузки в области чтения в реальном времени в реальном времени: соображения и советы

Scylladb спонсировал этот пост.

Чтение и письмо явно разные звери. Это верно в чтении и написании слов, чтении и написании кода, а также о чтении и написании данных в базу данных. Таким образом, когда дело доходит до оптимизации производительности базы данных, ваше коэффициент чтения: записи действительно имеет значение.

Недавно я писал о соображениях производительности, которые важны для рабочих нагрузок базы данных с тяжелыми напитками-охватывающих факторов, таких как дерево слияния (LSM) в отношении логарифмического слияния (LSM) против B-дерева, размер полезной нагрузки, сжатие, уплотнение и партия. Но рабочие нагрузки базы данных с прочтением приносят другой набор проблем, в том числе:

  • Масштабирование кеша: Многие команды пытаются ускорить чтения, добавив кэш перед своей базой данных, но стоимость и сложность могут стать непомерными по мере роста рабочей нагрузки.
  • Конкурирующие рабочие нагрузки: Первоначально все может работать хорошо, но в случае добавления новых вариантов использования, одна рабочая нагрузка может в конечном итоге оказаться узким заполнением всех остальных.
  • Постоянное изменение: По мере роста вашего набора данных или поведения пользователя сдвигаются, горячие точки могут появиться.

Давайте рассмотрим соображения высокого уровня и лучшие практики для обработки чувствительных к задержке рабочих нагрузок.

Что такое рабочая нагрузка в реальном времени?

Когда мы говорим о рабочей нагрузке «в реальном времени», мы имеем в виду рабочие нагрузки, которые:

  • Включать в себя большое количество устойчивого трафика; Например, более 50 тыс. Операций в секунду (OPS).
  • Включать в себя больше чтений, чем пишет.
  • Связаны строгими соглашениями об уровне обслуживания (SLA); Например, однозначная миллисекундная задержка P99.

Вот несколько примеров того, как они проявляются в дикой природе:

  • Ставки: Все ставки на данное событие постоянно проверяют индивидуального игрока, команды и игровых статистиков по мере продвижения матча.
  • Социальные сети: Небольшая подмножество людей публикует новый контент, в то время как подавляющее большинство пользователей обычно просто просматривают свои каналы и сроки.
  • Каталоги продуктов: Как и в социальных сетях, просмотр гораздо больше, чем фактическое обновление.

Источник: Scylladb

Соображения производительности

Вот некоторые ключевые соображения, которые влияют на производительность чтения в системах баз данных в реальном времени.

Путь чтения базы данных

Чтобы понять, как базы данных, такие как операции считывания процесса Scylladb, давайте подтвердим его путь чтения. Когда вы отправляете чтение (оператор SELECT), база данных сначала проверяет запрошенные данные в Memtables, которые являются в структурах данных в памяти, которые временно удерживают ваши недавние записи.

Источник: Scylladb

Кроме того, база данных проверяет, присутствуют ли данные в кэше. Почему этот дополнительный шаг необходим? Потому что мемкабль не всегда может хранить последние данные. Иногда данные могут быть записаны вне порядка, особенно если приложения потребляют данные из неупорядоченных источников. Поскольку протокол позволяет клиентам манипулировать временными метками записей для предотвращения правильного упорядочения, проверяя как мемтабл, так и кэш необходим для обеспечения возврата последней записи.

Затем база данных предпринимает одно из двух действий:

  • Если данные хранятся на диске, база данных заполняет кэш, чтобы ускорить последующие чтения.
  • Если данные не существуют на диске, база данных отмечает это отсутствие в кэше — избегая дальнейших ненужных поисков.
  • По мере того, как мемтаблс промывает на диск, данные также объединяются с кэшем. Таким образом, кэш в конечном итоге отражает последние данные о диске.

    Горячие против холодного чтения

    Чтение из кэша всегда быстрее, чем чтение с диска. Чем больше данных ваша база данных может служить непосредственно из кэша, тем лучше ее производительность (поскольку данные с чтением из памяти имеют практически неограниченный потолок избрать).

    Но как вы можете сказать, собираются ли ваши чтения в кеш или диск? Мониторинг. Вы можете использовать такие инструменты, как стек мониторинга SCYLLADB, чтобы узнать все о ваших хитах и ​​промахах кэша. Чем меньше кеша пропускается, тем лучше задержка чтения.

    Scylladb использует наименьшую недавно используемую (LRU) стратегию кэширования, аналогичную Redis и Memcached. Когда кэш заполняется, наименьшие данные выселяются, чтобы освободить место для новых записей. С подходом LRU вы должны помнить о своих чтениях. Вы хотите избежать ситуаций, когда несколько «дорогостоящих» читателей в конечном итоге выселяют важные элементы из вашего кеша.

    Если вы не оптимизируете использование кэша, вы можете столкнуться с явлением, называемым «Кэш -трэшор». Вот что происходит, когда вы постоянно высекаете и заменяете элементы в своем кеше, по сути, делая кеш неэффективным. Например, полные сканирования таблицы могут создать значительное давление в кэше, особенно когда размер вашего рабочего набора больше, чем ваше доступное пространство кэширования.

    Во время сканирования, если конкурирующая рабочая нагрузка зависит от чтения часто кэшированных данных, его задержка чтения на мгновение увеличится, поскольку эти элементы были выселены. Чтобы предотвратить эту ситуацию, дорогостоящие чтения должны указывать такие варианты, как Scylladb uspass_cache, чтобы предотвратить его результаты.

    Пейджинг

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

    Например, предположим, что у вас есть запрос на чтение кворума в кластере с тремя узлами. Две реплики должны ответить на просьбу быть успешным. Каждая реплика вычисляет одну страницу, которая затем согласована координатором, прежде чем вернуть данные обратно клиенту. Обратите внимание, что:

    • Задержки SCYLLADB сообщаются на страницу. Если задержки в вашем приложении высоки, но у них есть низкие на стороне базы данных, это свидетельствует о том, что ваши клиенты могут часто поддерживать.
    • Меньшие размеры страниц увеличивают количество круглых поездок клиента. Например, для получения 1000 строк с размером страницы 10 требует 100 круглых поездок, влияющих на задержку.

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

    Оптимизация рабочих нагрузок

    В то время как двигатель хранения дерева LSM Scylladb делает его довольно хорошо подходящим для рабочих нагрузок с тяжелыми напитками, наши инженеры представили множество функций, которые также оптимизируют его для считываемого чтения задержки с ультра-низкой. К ним относятся унифицированный кэш, кэширование индекса SSTABLE, приоритет рабочей нагрузки, балансировку с тепловой нагрузкой, подготовленные заявления и высокую параллелию.

    Есть много способов поддерживать низкие задержки с помощью рабочих нагрузок с высокой чтением-даже в базах данных, таких как SCYLLADB, которые также оптимизированы для рабочих нагрузок с тяжелыми напитками. Фактически, производительность SCYLLADB сопоставима с специальными решениями кэширования, такими как MemCached для определенных рабочих нагрузок.

    Если вы хотите узнать больше, вот некоторые первые перспективы от команд, которые решали некоторые интересные задачи, тяжелые чтения:

    • Discord: С миллионами пользователей активно читают и ищут историю чата, Discord нуждается в ультра-низко-затратной чтениях и высокой пропускной способности для поддержания взаимодействия в реальном времени в масштабе.
    • Epic Games: Для поддержки Unreal Engine Cloud, Epic Games потребовалось высокоскоростное масштабируемое хранилище метаданных, которое могло бы справиться с недействительным кэша и хранения метаданных для поддержки для игровых активов.
    • Zeroflucs: Чтобы питать свое приложение для ставок на спорт, Zeroflucs (теперь Caesars Entertainment) должны были обрабатывать запросы в практически в режиме реального времени, постоянно и в регионе, локальном как для клиента, так и для данных.

    Кроме того, взгляните на следующее видео, которое входит в еще большую глубину на этих тяжелых заданиях, а также проходит то, как эти рабочие нагрузки выглядят на Scylladb.

    Scylladb разработан для обеспечения предсказуемой производительности в масштабе. Он принят организациями, которые требуют ультра-низкую задержку, даже с рабочими нагрузками, превышающими 1M OPS/SEC. Наша уникальная архитектура использует силу современной инфраструктуры — переводится на меньшее количество узлов, меньшую административную и снижающую затраты. Узнайте больше последних из Scylladb Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Felipe Cardeneti Mendes является ИТ -специалистом с многолетним опытом работы в распределенных системах и технологиях с открытым исходным кодом. Он является соавтором Three Linux Books и является частым оратором на публичных мероприятиях и конференциях для продвижения технологий с открытым исходным кодом …. Подробнее от Felipe Cardeneti Mendes

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *