Причины задержки Redis в облаке (по сравнению с локальным redis на MacBook Pro)

Redis может дать время отклика менее миллисекунды. Это большое обещание. Я тестирую героку редис и получаю 1ms примерно до 8ms, для zincrby, я использую microtime() в php обернуть звонок. Это повторение heroku (я использую бесплатный план) является общим экземпляром, и существует конфликт ресурсов, поэтому я ожидаю, что время отклика для идентичных запросов будет разным, и они, безусловно, меняются.

Мне любопытно узнать причину различия в производительности по сравнению с Redis, установленным на моем MacBook Pro с помощью homebrew. Там явно нет задержки в сети. Что меня интересует, так это то, означает ли это, что любое повторное облачное хранилище (т. Е. Подключение по сети, скажем, в пределах aws) всегда будет работать немного медленнее, чем если бы я имел один облачный сервер и запускал бы redis внутри та же физическая машина, таким образом устраняя сетевую задержку?

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

Некоторые цифры: мой местный MacBook Pro последовательно дает 0.2ms для идентичного zincrby что занимает между 1ms & 8ms на геройку редис.

Является ли задержка сети причиной этого?

1 ответ

Нет, наверное нет.

Типичная задержка сети 1 Гбит / с составляет около 200us, Это 0.2ms,

Более того, в AWS вы, вероятно, по крайней мере на 10 Гбит / с.

Как объясняется на этой странице в руководстве по Redis, основной причиной изменения задержки между этими двумя средами почти наверняка будет результат более высокого intrinsic latency (есть команда redis для проверки этого на любой конкретной системе: redis-cli --intrinsic-latency 100см. страницу руководства выше), возникающую из-за запуска в контейнере Linux.

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

Вот контрольный список (со страницы руководства Redis, указанной выше).

  • Если вы можете себе это позволить, предпочитайте физический компьютер виртуальной машине для размещения сервера.
  • Не систематически подключаться / отключаться от сервера (особенно актуально для веб-приложений). Сохраняйте ваши связи как можно дольше.
  • Если ваш клиент находится на том же хосте, что и сервер, используйте доменные сокеты Unix.
  • Предпочитают использовать агрегированные команды (MSET/MGET) или команды с переменными параметрами (если возможно) по конвейеру.
  • Предпочитаю использовать конвейерную обработку (если это возможно) поверх последовательности циклов.
  • Redis поддерживает сценарии на стороне сервера Lua, чтобы охватить случаи, которые не подходят для необработанной конвейерной обработки (например, когда результат команды является входом для следующих команд).
Другие вопросы по тегам