1. Описание
Kyoto Tycoon - ещё один сервер, реализующий хранилище «ключ-значение». В отличие от Memcached данные хранит на диске (альтернатива Memcachedb). Высокопроизводительный и не требует много ресурсов для работы. Может обрабатывать запросы по протоколу Memcached.
Подробно:
Kyoto Tycoon (киотский магнат) - сервер, реализующий хранилище «ключ-значение». Отлично подходит для хранения кэша, т.к. обладает возможность указывать время хранения ключа. Сервер создавался таким образом чтобы иметь производительность DBM (реализовано с помощью Kyoto Cabinet), но при этом была возможность обрабатывать несколько подключений одновременно.
Kyoto Tycoon поддерживает взаимодействие через свой бинарный протокол, протокол HTTP, а также по протоколу Memcached (ограниченный набор команд). Сервер может одновременно работать с 10 000 соединениями, т.к. обработка соединений происходит через методы «epoll» и «kqueue». Сервер поддерживает «горячее резервное копирование» - возможность сделать резервные копии данных без остановки сервера при копировании файлов базы данных. Кроме того, сервер реализует асинхронную репликацию.
В сервер встроена поддержка языка сценария Lua. Если вам недостаточно функций предоставляемые API вы можете на сервере написать свою функцию использую язык Lua.
Kyoto Tycoon написан на С++, под лицензией GNU General Public License.
2. Установка
Установку буду производить на операционную систему Debian 8.2.0 (amd64). Команды указаны под пользователем root.
2.1. Установка через менеджер пакетов
3. Запуск
Создаём пользователя «kt» с группой «kt», под которым будем запускать сервер. И создаём папку «/var/kt», в которой будут хранится файлы для работы «ktserver».
Запускаем «ktserver».
Подробнее:
- «-host 127.0.0.1 -port 1978» - сервер будет доступен только локально и под портом 1978
- «-log /var/kt/main.log» - отчёт по работе
- «-dmn» - Запускаем в фоне
- «-plsv /usr/lib/x86_64-linux-gnu/ktplugservmemc.so» - плагин для работы по протоколу Memcached.
- «-plex 'host=127.0.0.1#port=2010'» - сообщаем что сервер будет доступен по протоколу Memcached только локально и по порту 2010.
- «'/var/kt/main.kch#msiz=32m'» - опции подключения файла с базой данных. Подробнее здесь.
Проверяем, запустился ли.
1978 - порт для собственного протокола, 2010 - порт для Memcached. При указании порта больше 9999 выдаёт ошибку. Жаль что нет возможность указания unix-сокета, как у Memcached опция «-s».
Опции подключения файла базы.
Опции записаны в оригинальном стиле, так что будет не привычно. Каждая опция разделена через символ «#». Например вот так: «/var/kt/main.kch#opts=l#bnum=100000#msiz=32m#dfunit=8». Обязательным параметром является указание полный путь к файлу «/var/kt/main.kch» остальные параметры «#opts=l#bnum=100000#msiz=32m#dfunit=8» являются необязательны. Опции указывают параметры подключения к файлам Kyoto Cabinet.
От суфикса имени файла зависит тип базы:
- «.kch» - HashDB - данные в файле хранятся в виде хэш таблицы. Типичный DBM.
- «.kct» - TreeDB - данные в файле хранятся в виде B+ дерева. DBM с сортировкой
- «.kcd» - DirDB
- «.kcf» - ForestDB
У каждого типа есть свои плюсы и минусы, но меня заинтересовало именно тип «HashDB» т.к. он самый производительный. Производительность типов в порядке по уменьшению: HashDB > TreeDB > DirDB > ForestDB. Подробнее по типам смотрите здесь и здесь.
Параметр «opts» используют что уменьшить размер БД за счёт небольшого уменьшения производительности:
- «s» - размер ключа снижен с 6 байт до 4 байт. В результате размер каждой записи уменьшится с 16 до 12 байт, а максимальный размер базы не превысит 16 ГБ.
- «l» - меняется механизм разрешения коллизий. Размер каждой записи уменьшается с 16 до 10 байт и скорость становится чувствительная от количества записей.
- «c» - размер каждой записи сжимается если превышает 1 кб.
Можно использовать несколько параметров одновременно, типа «opts=slc». По умолчанию отключен.
Параметр «apow» указывает чему должен быть кратный размер записи (1 = 2 байта, 2 = 4 байта, 3 = 8 байт и т.д.). По умолчанию «3» (8 байт). Если база редко меняется ставим «0», если размер записи в среднем больше 1 Кбайт, ставим «8» или более.
Параметр «fpow» - размер пула свободных блоков (1 = 2 байта, 2 = 4 байта и т.д). По умолчанию «10» (1024 байта). Лучше не трогать.
Параметр «bnum» - размер корзины в хэш-таблицах. Желательно чтобы это число было в 2 или 4 раза больше кол-ву записей. Если меньше то скорость чтения немного снижается. По умолчанию «1048576».
Параметр «msiz» - максимальный размер оперативной памяти, который может использовать сервер. По умолчанию «64MB» (64 МБайт). Для указания гигабайтов и терабайтов указываем суффиксы (GB, TB). Чем больше тем лучше.
Если указан параметр «dfunit», то будет производиться автоматическая дефрагмантация блока. «dfunit=8» означает что дефрагматация будет производиться через каждые 8 операций записи. При включенном «dfunit» скорость записи немного снижается, но экономится место на диске. По умолачанию «dfunit» отключен, но дефрагмантация всё равно происходит, только постепенно не влияя на производительность.
4. Тестирование
Тестировать производительность, я буду на языке PHP через модуль Memcache, Memcached и класс, который поддерживает бинарный протокол. Буду записывать и считывать 100 000 записей. Буду тестировать на VPS (виртуализация через Xen), процессор 2000 МГц, 512 МБайт оперативки, винчестер как написано: сочетание SSD и SATA. Файловая система: ext4. Операционная система Linux Debian 8.2 (amd64), PHP 5.6.14. Запускаю сервер с параметрами как указано здесь.
Результат:
Источник: fallabs.com
Комментарии:
Добавить комментарий