ScyllaDB лучше Cassandra, и вот почему.

1656656769 scylladb luchshe cassandra i vot pochemu

от Kartik Khare

yNPhqEY4hcp3olLmtXnTDkiadKXCd7Bh2S2C
База данных Ника Янгсона CC BY-SA 3.0 Alpha Stock Images

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

ScyllaDB реализует практически все функции Cassandra в C++. Но сказать, что это простой порт C++, было бы не сказать ничего. Разработчики Scylla внесли много изменений под капот, которые не видны пользователю, но привели к значительному улучшению производительности.

Вы шутите, правда?

Нет.

Как видите (если вы перешли по этой ссылке), в большинстве случаев задержка Scylla в 99,9 процентиля в 5–10 раз лучше, чем у Cassandra.

Также в упомянутых здесь тестах стандартный 3-узловой кластер Scylla предлагает почти такую ​​же производительность, как и 30-узловой кластер Cassandra (что приводит к 10-кратному снижению стоимости).

Как это возможно?

Важнейшим моментом является то, что Scylla написана на языке C++14. Итак, ожидается, что он будет быстрее, чем Cassandra, работающий исключительно на JVM.

Однако у Scylla было много значительных низкоуровневых оптимизации, что делает ее лучше конкурентов.

Подход совместного использования ничего

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

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

ScyllaDB использует структуру seastar для сегментирования запросов на каждом ядре. У программы есть только один поток на ядро. Таким образом, если сеанс обрабатывается ядром 1 и запрос для этого сеанса поступает в ядро ​​2, он направляется в ядро ​​1 для обработки. Любое из ядер может обработать ответ после этого.

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

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

Избегайте ядра

Когда строка найдена в SSTable, ее необходимо отправить по сети клиенту. Это подразумевает копирование данных из пространства пользователя в пространство ядра.

Однако ядро ​​Linux обычно выполняет многопоточные операции блокировки, не масштабируемые.

ScyllaDB позаботится об этом, используя сетевой стек Seastar.

Сетевой стек Seastar работает в пользовательском пространстве и использует DPDK для более быстрой обработки пакетов. DPDK обходит ядро, чтобы скопировать данные непосредственно в NIC буфер и обрабатывает пакет в течение 80 циклов ЦП. (источник: веб-сайт DPDK)

Не полагайтесь на кэш страницы

Кэш страниц превосходен, когда у вас есть последовательный ввод-вывод и данные хранятся на диске в проводном формате.

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

ScyllaDB, вместо того чтобы полагаться на страничный кэш, выделяет большую часть своей памяти для row-cache.

Row-Cache содержит данные в оптимизированном формате памяти, который занимает меньше места и не требует сериализации/десериализации.

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

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

Если вам интересно больше дизайнов, подобных приведенным выше, или если вы хотите связаться со мной, свяжитесь со мной в LinkedIn или Facebook или отправьте электронное письмо на kharekartik@gmail.com

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

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