1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors_Tencent-Tendis

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Тендис — это высокопроизводительная распределённая система хранения данных, полностью совместимая с протоколом Redis.

Содержание

  • Введение
  • Особенности
  • Начало работы
    • Требования
    • Сборка
    • Запуск и использование
    • Тестирование
  • Производительность
    • Аппаратные требования
    • Тесты и показатели QPS
    • Показатели QPS для разных типов данных
  • Вклад в проект
  • Поддержка
  • Лицензия

Введение

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

Подобно кластерам Redis, Тендис использует децентрализованное распределённое решение. Для связи между узлами используется протокол сплетен (gossip), и все узлы кластера могут быть направлены к правильному узлу при обращении пользователя. Узлы кластера поддерживают автоматическое обнаружение других узлов, обнаружение неисправных узлов и обеспечивают работу приложения без значительного влияния при сбое главного узла.

Особенности

  • Совместимость с Redis: протокол и команды, поддерживаемые в Тендис, совместимы с Redis.
  • Постоянное хранилище: использование RocksDB в качестве движка хранения. Все данные хранятся в RocksDB в определённом формате, поддерживая ёмкость хранения уровня PB.
  • Децентрализованный распределённый кластер: распределённая реализация, подобная кластерам Redis, с использованием протокола сплетен для взаимодействия между узлами.
  • Горизонтальная масштабируемость: миграция данных онлайн между узлами. Высокая производительность и линейная масштабируемость до 1000 узлов.
  • Отказоустойчивость: автоматическое обнаружение неработающих узлов и повышение реплик до мастера при возникновении сбоя.
  • Ключевой компонент для Тендис Hybrid Storage Edition: благодаря дизайну и внутренней оптимизации, Redis и Тендис могут работать вместе как Hybrid Storage Edition. Это подходит для сценариев хранения KV, так как обеспечивает баланс производительности и стоимости, а также значительно снижает операционные расходы бизнеса на 80% в сценариях, где холодные данные занимают много места для хранения.

Начало работы

Требования

  • g++ (требуется C++17, версия >= 5.5)
  • cmake (версия >= 3.13.0)

Сборка

$ git clone https://github.com/Tencent/tendis.git --recursive
$ git submodule update --init --recursive
$ mkdir bulid
$ cd build & cmake ..
$ make -j12

Запуск и использование

$ ./build/bin/tendisplus tendisplus.conf

Подключение к серверу через redis-cli

$ redis-cli -p 51002

Тестирование

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

$ sh ./testall.sh

Производительность

Аппаратные требования

CPU:2.50 GHz,48 core
DISK:NVMe SSD
MEM:192GB

Тесты и показатели QPS

Тендис плюс: workers = 56

./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="set __key__ __data__" --key-prefix="kv_" --key-minimum=1 --key-maximum=500000000 --random-data --data-size=128 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="get __key__" --key-prefix="kv_" --key-minimum=1 --key-maximum=500000000 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="incr __key__" --key-prefix="int_" --key-minimum=1 --key-maximum=1000000 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="lpush __key__"
``` ```
data --key-prefix="list_" --key-minimum=1 --key-maximum=1000000 --random-data --data-size=128 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="sadd __key__ __data__" --key-prefix="set_" --key-minimum=1 --key-maximum=1000000 --random-data --data-size=128 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="zadd __key__ __key__ __data__" --key-prefix="" --key-minimum=1 --key-maximum=1000000 --random-data --data-size=128 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="hset __key__ __data__ __data__" --key-prefix="hash_" --key-minimum=1 --key-maximum=1000000 --random-data --data-size=128 --test-time=1800

Изображение: qps.png

латентность:

SET    1,6 мс    99%
SET    2,2 мс    99,9%
SET    6,9 мс    99,99%
SET    9,4 мс    100,00%

QPS на разных полезных нагрузках

Tendisplus: workers = 56

./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="set __key__ __data__" --key-prefix="kv_" --command-key-pattern=R --random-data --data-size=128 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="get __key__" --key-prefix="kv_" --command-key-pattern=R --test-time=1800

Изображение: qps_payload.png

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

Вклад

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

Поддержка

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

Лицензия

Tendis лицензирован под GNU General Public License Version 3.0. Информацию об авторских правах и лицензии можно найти в файле LICENSE.txt.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
C++ и 6 других языков
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors_Tencent-Tendis.git
git@api.gitlife.ru:oschina-mirror/mirrors_Tencent-Tendis.git
oschina-mirror
mirrors_Tencent-Tendis
mirrors_Tencent-Tendis
unstable