Чтобы получить наилучшую производительность необходима тонкая настройка, которая уменьшит вероятность непредвиденных ошибок, ограничений и пиковых нагрузок. Это касается всех частей системы, железа и базы данных.
Любую оптимизацию необходимо начинать с профилирования и тестирования приложения под высокими нагрузками. Также не забывайте о серверной оптимизации, правильной настройке Nginx и дополнительной оптимизации Ubuntu-сервера. Такой подход сохранит нервы и упростит дальнейшую процедуру тюнинга.
Когда Redis настроена и готова к работе, рекомендуем проверить ее при помощи встроенного теста:
$ redis-benchmark -q -n 100000 -c 50 -P 12 # Вывод будет таким PING_INLINE: 641025.62 requests per second PING_BULK: 694444.50 requests per second SET: 434782.59 requests per second GET: 520833.34 requests per second INCR: 456621.00 requests per second LPUSH: 462962.94 requests per second LPOP: 440528.62 requests per second SADD: 418410.06 requests per second SPOP: 549450.56 requests per second LPUSH (needed to benchmark LRANGE): 473933.66 requests per second LRANGE_100 (first 100 elements): 37397.16 requests per second LRANGE_300 (first 300 elements): 10351.97 requests per second LRANGE_500 (first 450 elements): 6939.14 requests per second LRANGE_600 (first 600 elements): 5518.76 requests per second MSET (10 keys): 88105.73 requests per second
# Выполнит 100 000 запросов от 50 клиентов по 12 команд одновременно
В Redis реализовано два persistence-режима: RDB и AOF.
При включении RDB система создает компактные снэпшоты данных в заданные интервалы времени. Это хороший подход для восстановления информации в случае сбоя. Бэкапы пишутся в параллельном процессе при помощи команды fork()
, который в случае большой БД затратен по ресурсам и времени. Кроме этого, в случае неожиданного выключения сервера, все данные, которые не были записаны или находились в процессе создания резервной копии, будут утеряны.
AOF представляет собой лог операций, которые выполняют клиенты. Метод расшифровывается как Append Only File, то есть все новые данные добавляются к уже имеющимся данным, причем, каждую секунду по умолчания. Так что в случае сбоя потери будут минимальны. Но подход немного медленнее RDB, лог-файл существенно больше, производительность зависит от параметров fsync.
Для настройки Redis нужно отредактировать файл конфигурации /etc/redis/redis.conf
:
# Параметры по умолчанию save 900 1 save 300 10 save 60 10000 dir /var/redis/ # Директория хранения dbfilename dump.rdb # Имя файла rdbcompression yes # Включение сжатия
# По умолчанию включен режим RDB
Хотите максимальной производительности — отключите persistence полностью. Или же настройте частоту создания снэпшотов. По умолчанию установлены параметры:
Еще один вариант — используйте репликацию.
Чтобы избежать узких мест, рекомендуем увеличить количество соединений, которые слушает сокет:
tcp-backlog 65536
# Значение по умолчанию — 511
Также стоит обратить внимание на разрешенное количество клиентов:
maxclients 10000
# Если слишком низкое, то появится ошибка ‘max number of clients reached’
Redis работает с ОЗУ, используя весь максимум доступной памяти. Так что есть смысл ограничить разрешенный объем, чтобы другие процессы сервера также могли выполняться:
maxmemory 1572864000
# Указание в байтах
Просмотр статистики работы Redis поможет найти ошибки и проблемные места. К примеру, можно оценить скорость кэширования:
$ redis-cli INFO stats |grep keyspace keyspace_hits:1920 keyspace_misses:930
# Система явно не успевает
Таким способом отслеживайте лимит доступной памяти maxmemory через eviction ключей:
$ redis-cli INFO stats |grep evicted_keys evicted_keys:11582
# Система упирается в доступный объем памяти
Также стоит подобрать наилучшую политику отклонения ключей (eviction policy):
maxmemory-policy allkeys-lru
# Указывать в файле конфигурации Redis
Доступно 6 параметров:
noeviction
— возвращает ошибку;allkeys-lru
— отклоняет ключи, убирая наименее используемые ключи (least recently used (LRU);volatile-lru
— отклоняет ключи, удаляя наименее используемые, если установлен срок истечения;allkeys-random
— отклоняет ключи в случайном порядке;volatile-random
— отклоняет ключи в случайном порядке, если установлен срок истечения;volatile-ttl
— в первую очередь отклоняет ключи c наименьшим сроком истечения.Для создания отказоустойчивой системы используйте репликацию. Отключение снэпшотов принесет заметный прирост производительности. Также стоит подобрать наилучшую eviction policy для вашего приложения.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…