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

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

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

  • Записи масштабирования могут быть дорогостоящими, особенно если вы платите за операцию, и записывает в пять раз дороже, чем чтения.
  • Блокировка может добавить задержки и снизить пропускную способность.
  • Уздшие места ввода/вывода могут привести к тому, чтобы написать усиление и усложнить восстановление аварии.
  • Обратное давление в базе данных может занять входящую нагрузку.

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

Что мы подразумеваем под «рабочей нагрузкой в ​​реальном времени»?

Во -первых, давайте проясним, что мы подразумеваем под этим термином. Мы говорим о рабочих нагрузках, которые:

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

В дикой природе они происходят во всем, от онлайн-игр до бирж в реальном времени. Несколько конкретных примеров:

  • Интернет вещей (IoT) Рабочие нагрузки, как правило, включают небольшие, но частые записи только для приложения данных временных рядов. Здесь скорость проглатывания в первую очередь определяется количеством конечных точек, собирающих данные. Подумайте о датчиках интеллектуального дома или промышленного мониторинга, постоянно отправляя потоки данных для обработки и сохранения.
  • Регистрация и мониторинг Системы также имеют дело с частым приемами данных, но у них нет фиксированного уровня приема. Они могут не обязательно добавлять только, а также могут быть склонны к горячим точкам, например, когда одна из конечных точек.
  • Онлайн -игры Платформы должны обрабатывать взаимодействие с пользователями в реальном времени, включая изменения состояния игры, действия игрока и обмен сообщениями. Рабочая нагрузка имеет тенденцию быть колючей, с внезапными всплесками активности. Они чрезвычайно чувствительны к задержке, поскольку даже небольшие задержки могут повлиять на игровой опыт.
  • Электронная коммерция и розничная торговля Рабочие нагрузки, как правило, с тяжелыми обновлениями и часто связаны с переработкой партии. Эти системы должны поддерживать точные уровни запасов, обрабатывать отзывы клиентов, отслеживать статус заказа и управлять операциями корзины покупок, которые обычно требуют чтения существующих данных, прежде чем делать обновления.
  • AD Tech и ставки в реальном времени Системы требуют решений с разделенной секундой. Эти системы обрабатывают сложную обработку ставок, включая отслеживание оттисков и результаты аукциона, одновременно контролируя взаимодействия с пользователями, такие как клики и преобразования. Они также должны обнаружить мошенничество в режиме реального времени и управлять сложной сегментацией аудитории для целенаправленной рекламы.
  • В реальном времени фондовая биржа Системы должны поддерживать высокочастотные торговые операции, постоянные обновления цен на акции и сложные процессы сопоставления заказов-все это при сохранении абсолютной согласованности данных и минимальной задержки.

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

Архитектура двигателя хранения

Выбор архитектуры двигателя хранения в основном влияет на производительность записи в базах данных. Существуют два основных подхода: деревья LSM и B-деревья.

Базы данных, известные для обработки, записываются эффективно, например, Scylladb, Apache Cassandra, Hbase и Google Bigtable, используют строгих структурированных деревьев слияния (LSM). Эта архитектура идеально подходит для обработки больших объемов записей. Поскольку записи немедленно добавляются в память, это позволяет очень быстрое начальное хранилище. После того, как «Memtable» в памяти заполняется, недавние записи промываются на диск в отсортированном порядке. Это уменьшает потребность в случайном вводе/выводе.

Например, вот как выглядит путь написания Scylladb:

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

Размер полезной нагрузки

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

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

Сжатие

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

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

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

Уплотнение

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

При выборе стратегий уплотнения вы можете стремиться к низкому усилению чтения, что делает чтения максимально эффективными. Или вы можете стремиться к низкому усилению записи, избегая уплотнения от слишком агрессивного. Или вы можете расставить приоритеты в области низкого пространства и иметь как можно эффективно данные о очистке уплотнения. Например, Scylladb предлагает несколько стратегий уплотнения (а Cassandra предлагает аналогичные):

  • Стратегия уплотнения размера (STCS): Запускается, когда система имеет достаточно (четыре по умолчанию) SSTALS аналогичного размера.
  • Стратегия уплотнения (LCS): Система использует небольшие Sstables, распределенные на разных уровнях (по умолчанию 160 МБ).
  • Стратегия инкрементного уплотнения (ICS): Разделяет те же коэффициенты усиления чтения и записи, что и STCS, но он устраняет свою 2 -кратную проблему временного амплификации пространства, разбивая огромные SSTables на прогоны SSTABLE, которые состоят из отсортированного набора более мелких (1 ГБ по умолчанию), непереселшившихся SSTables.
  • Стратегия уплотнения времени (TWCS): Разработано для данных временных рядов.

Для рабочих нагрузок с тяжелыми напитками мы предупреждаем пользователей, чтобы избежать выравниваемого уплотнения любой ценой. Эта стратегия предназначена для считывающих считывающих вариантов использования. Использование его может привести к увеличению 40x.

Партия

В базах данных, таких как Scylladb и Cassandra, партия может быть чем-то вроде ловушки, особенно для рабочих нагрузок. Если вы привыкли к реляционным базам данных, партия может показаться хорошим вариантом для обработки большого объема записей. Но на самом деле это может замедлить ситуацию, если это не сделано тщательно. В основном это связано с тем, что крупные или неструктурированные партии в конечном итоге создают много координационных и сетевых накладных расходов между узлами. Тем не менее, это действительно не то, что вы хотите в распределенной базе данных.

Вот как подумать о партии, когда вы имеете дело с Heavy Prise:

  • Партия по ключу разделения: Group Your Writes с помощью ключа раздела, чтобы партия переходила к узлу координатора, который также владеет данными. Таким образом, координатору не нужно обращаться к другим узлам для дополнительных данных. Вместо этого он просто обрабатывает свой собственный, который сокращает ненужный сетевой трафик.
  • Держите партии маленькими и целенаправленными: Разрушение больших партий на более мелкие по перегородке сохраняет эффективные вещи. Он избегает перегрузки сети и позволяет каждому узлу работать только над данными, которым он владеет. Вы все еще получаете преимущества партии, но без накладных расходов, которые могут утомить вещи.
  • Придерживаться незапланированных партий: Учитывая, что вы следите за более ранними точками, лучше всего использовать незагрязненные партии. Зарегистрированные партии добавляют дополнительные проверки последовательности, которые могут действительно замедлить запись.

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

Завершая

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

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

  • Zillow: потребление записей от нескольких производителей данных, что привело к записи вне порядка, которые могут привести к неправильным обновлениям.
  • Tractian: подготовка к 10-кратному росту в высокочастотных данных записи от устройств IoT.
  • Фанатики: операции с тяжелыми записями, такие как обработка заказов, корзины для покупок и обновления продуктов для этого онлайн -магазина спорта.

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

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

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

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