Статьи

5 советов по запуску Redis через AWS

Облачные вычисления могут помочь разместить приложение таким образом, чтобы оно было масштабируемым и экономически эффективным. Ведущим поставщиком в области инфраструктуры как услуги (IaaS) является Amazon Web Services (AWS), которая предлагает масштабируемый, высокодоступный и безопасный облачный хостинг. Если ваше приложение использует Redis для кэширования или хранения данных, ниже приведены несколько советов, которые помогут вам сэкономить время, деньги и в целом повысить производительность Redis в AWS.

Совет № 1: Выбор экземпляра EC2

Когда это применимо, экземпляры с включенной аппаратной виртуальной машиной (HVM) (например, экземпляры M3 второго поколения и экземпляры, оптимизированные для памяти R3) следует использовать для уменьшения проблем с задержкой из-за времени разветвления и для запуска нескольких серверов Redis на разных ядрах.

В инстансах, отличных от HVM EC2, используется гипервизор Xen, который работает намного медленнее, когда нужно создавать большие процессы. Параметры персистентности Redis, RDB и AOF, оба разветвляют основной поток и запускают фоновое переписывание или сохранение процессов. Когда разветвление требует большого объема памяти, это может значительно увеличить задержку Redis.

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

Совет № 2: отключить обмен

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

При включенном обмене Redis может пытаться получить доступ к страницам памяти, которые находятся на диске. Это приведет к тому, что процесс Redis будет заблокирован операцией ввода-вывода диска, что может быть медленным процессом, поскольку включает случайные операции ввода-вывода. Привязав Redis к производительности диска, вы, вероятно, увеличите время ожидания. Чтобы смягчить это, вы можете настроить следующие параметры в Linux в /etc/sysctl.conf:

vm.swappiness=0
vm.overcommit_memory=1

Это означает, что когда память почти заполнена, ядро ​​будет пытаться украсть страницы из кэша, а не выгружать их из памяти в программу. Используйте эти параметры вместе с директивами Redis maxmemory и maxmemory-policy, чтобы Redis не запрещал записи, а диспетчер нехватки памяти (OOM) ядра не прерывал Redis.

Совет № 3: Redis Постоянство с Elastic Block Store

Экземпляры EC2 оснащены временным хранилищем, а EBS является де-факто стандартным хранилищем для постоянных данных в AWS. Имейте в виду, что EBS является сетевым хранилищем. Поэтому, если вы сохраняете данные на томах, EBS конкурирует с Redis за пропускную способность сети. Существует вероятность того, что дополнительный ввод-вывод и ограниченная пропускная способность могут повлиять на производительность Redis при использовании EBS . Тем не менее, это также может быть уменьшено несколькими способами, включая:

  • Использование больших томов EBS для выделенной производительности.

  • Использование конфигурации RAID поверх EBS.

  • Передача персистентности реплицированному ведомому (будьте осторожны с  циклами репликации и следите за  этими советами ).

  • Использование экземпляров, оптимизированных для EBS, для повышения производительности в результате выделенной полосы пропускания между экземплярами EC2 и EBS.

  • И последнее, но не менее важное: обзор требований к устойчивости вашего приложения и настройка соответствия Redis для их соответствия.

Совет № 4: Для наборов данных <4 ГБ используйте 32-битные экземпляры

Если максимальный размер ваших данных составляет менее 4 ГБ на экземпляр, сохраняя биты, вы также можете сэкономить деньги. При компиляции и запуске Redis на 32-битной цели он использует меньше памяти на ключ, поскольку указатели меньше.

Если вы не уверены в размере своего набора данных, используйте команду INFO, чтобы получить соответствующие числа (например, used_memory). Вы также можете использовать инструмент сравнения, такой как redis-benchmark или memtier-benchmark , чтобы генерировать случайные наборы данных для предположений.

Помните, что размер вашего набора данных — не единственное соображение при планировании общей оперативной памяти для сервера Redis. Например, если вы включили постоянство или репликацию, поток фоновой памяти будет периодически создавать копию данных, которая будет находиться в памяти в этот момент. Любые данные затем остаются в памяти до завершения операции, и, следовательно, любая операция обновления копируемых данных / ключа требует дополнительной памяти в виде страниц памяти и буферов . В «наихудшем» сценарии, когда все ключи обновляются в течение этого периода, может потребоваться в два или более раз больше памяти, чем требовалось бы без сохранения и / или репликации. Чтобы предотвратить нехватку памяти в таком сценарии, используйте коэффициент 2 как минимум на фактический размер набора данных.

Совет № 5: Используйте шардинг для правильного использования многоядерных экземпляров EC2

Окончательный наконечник проходит полный круг, начиная с того места, где остановился наконечник № 1. Redis — это (в основном) однопоточный процесс, что означает, что каждый процесс Redis может использовать самое большее одно ядро. Чтобы лучше использовать экземпляры EC2 с несколькими ядрами, вы можете запустить один процесс Redis для каждого ядра сервера и эффективно использовать дополнительные ядра. Эти дополнительные серверы могут действовать как независимые серверы Redis. Например, один может использоваться для управления данными сеанса пользователя, а другой — для кэширования пользовательских профилей. Альтернативный подход к использованию этих нескольких ядер состоит в разделении данных между серверами.

Сам по себе шардинг — это большая тема, и в ближайшие недели мы уделим ей больше времени. Подготовьтесь к драме, связанной с выбором между прикладной, клиентской, прокси-сервером или кластерным разделением. Изучите ужасные истины о шардинге для себя и о том, как смело сражаться с ними. Понять, как перевести Redis на следующий шаг. Вопросов? Обратная связь? Напишите  или  напишите  мне — я очень доступен.