2013-05-09 5 views
4

Я сделал забавное наблюдение в моем случае Redis развернутым на моем AWS EC2 Micro экземпляра (тестовая среда)производительность Redis на AWS EC2 Micro Instance

я измерения времени выполнения различных операций, которые должны ударить Redis. В итоге, время выполнения (в среднем), приведены ниже:

Jedis -> Redis Connection is 63 milliseconds 
Read of top Element in a list using lrange(<listname>,0,1) is 44 milliseconds 
Read of entire Elements of set is 5ms 
Iteration over entire Set space is 60ms(Set space approx 130 elements) 
Iteration over subset of elements of set is 5ms (Subset element size is 5) 

Теперь то, что беспокоит меня первые 2 операции (подключение и извлечение верхнего элемента в списке).

Для подключения, код приведен ниже:

Jedis redis= new Jedis("localhost"); 

И для извлечения верхнего элемента в списке:

String currentDate = redis.lrange(holderDate,0,1).get(0); 

Теперь из командной документации Redis lrange:

Сложность времени: O (S + N), где S - начальное смещение, а N - количество элементов в spe округленный диапазон.

Теперь из моего кода S будет 0 и N будет 1.

Мой вопрос тогда: Что вызывает эти времена выполнения этих несколько тривиальных операций.

Существуют ли особенности экземпляра EC2 Micro, которые могут негативно повлиять на производительность этих операций.

Некоторые ключевые сведения о развертывании Redis:

redis_version:2.4.10 
used_memory:2869280 
used_memory_human:2.74M 
used_memory_rss:4231168 
used_memory_peak:2869480 
used_memory_peak_human:2.74M 
mem_fragmentation_ratio:1.47 

Спасибо заранее.

+2

Экземпляр EC2 micro сильно дросселируется. ИМО, пытаясь запустить тесты на них (или даже интерпретировать измерения производительности), является пустой тратой времени. –

+0

@DidierSpezia: Это должно быть понято, но какие характеристики машины должны быть дросселированы для приложения, чтобы показывать такую ​​статистику эффективности? Обратите внимание, что экземпляр Redis развернут на том же узле, что и приложение, сравнивающее его. Спасибо –

ответ

5

Существуют ли особенности экземпляра EC2 Micro, которые отрицательно влияют на выполнение этих операций.

Amazon EC2 Instance Typet1.micro несколько уникален и сильно задушил по определению см Micro Instances:

Micro экземпляры (t1.micro) обеспечивают небольшое количество последовательного процессора ресурсов и позволяют увеличить пропускную способность процессора в коротких очередях, когда доступны дополнительные циклы. Они хорошо подходят для нижних пропускных приложений и веб-сайтов, которые периодически требуют вычисления циклов. [курсив мой]

Последнее верно в принципе, но количество дросселирования ловит многих пользователей неожиданностью - в то время как точный алгоритм не определен, документация объясняет и особ.иллюстрирует общую стратегию и эффект довольно хорошо, что на практике, кажется, дают около ~ 97% так называемого украсть время раз дроссельных пинками в, смотрите раздел When the Instance Uses Its Allotted Resources частности:

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

Это, очевидно, делает какие-либо тесты производительности настроение действительно, как Didier Специя уже rightly commented. Обратите внимание, что в то время как другие типы экземпляров EC2 могут также показывать время кражи (что является общим артефактом платформ виртуализации, где физические процессоры могут совместно использоваться различными виртуальными машинами), соответствующие шаблоны являются более регулярными на случай, так что производительность Тесты в принципе возможны, хотя следующие ограничения применяются в целом:

  • вам нужно будет запускать тесты на ряде случаев, по крайней мере для учета различных количеств воруют время из-за случайные нагрузки процессора на соседнем виртуальные машины
  • вы не должны запускать приложение для бенчмаркинга на той же виртуальной машине, что и эталоном, поскольку это, очевидно, влияет на resu lt
+0

Я понимаю вашу точку зрения, но я борюсь с тем, как AWS EC2 Throttling повлияет на выполнение простого приложения на 200 мс, в то же время при каждом выполнении одного и того же кода. Это звучит странно для меня. Я бы понял, работает ли код на сервере, но это выполняется по требованию. Но +1 для «Украсть время» :) –