Redis - эталон против реальности - PullRequest
1 голос
/ 25 сентября 2019

У меня есть автономный экземпляр Redis.Более ранние 8 экземпляров моего приложения, каждое из которых имело 64 подключения Redis (всего 12 * 64) со скоростью 2000 QPS на экземпляр, дало бы мне задержку <10 мс (что мне подходит).Из-за увеличения трафика мне пришлось увеличить количество экземпляров приложения до 16, а также уменьшить количество подключений на экземпляр с 128 до 16 (всего 16 * 16 = 256).Это было сделано после бенчмаркинга с тестом Memtier, как показано ниже </p>

12        Threads
64        Connections per thread
2000      Requests per thread

ALL STATS
========================================================================
Type        Ops/sec     Hits/sec   Misses/sec      Latency       KB/sec
------------------------------------------------------------------------
Sets           0.00          ---          ---      0.00000         0.00
Gets       79424.54       516.26     78908.28      9.90400      2725.45
Waits          0.00          ---          ---      0.00000          ---
Totals     79424.54       516.26     78908.28      9.90400      2725.45
16        Threads
16        Connections per thread
2000      Requests per thread


ALL STATS
========================================================================
Type        Ops/sec     Hits/sec   Misses/sec      Latency       KB/sec
------------------------------------------------------------------------
Sets           0.00          ---          ---      0.00000         0.00
Gets       66631.87       433.11     66198.76      3.32800      2286.47
Waits          0.00          ---          ---      0.00000          ---
Totals     66631.87       433.11     66198.76      3.32800      2286.47

Тест Redis дал аналогичные результаты.

Однако, когда я сделал это изменение в Production, (16 * 16),задержка взлетела до 60-70мс.Я думал, что количество подключенных соединений было меньше (что казалось маловероятным), и я вернулся к 64 соединениям (64 * 16), что, как и ожидалось, еще больше увеличило задержку.На данный момент у меня половина приложений работает с основным Redis, а другая половина подключена к подчиненному, причем каждое имеет 64 подключения (8 * 64 к главному, 8 * 64 к подчиненному), и это работает для меня (задержка 8-10 мс).

Что могло пойти не так, если задержка увеличилась с 256 (16 * 16) соединениями, но уменьшилась с 512 (64 * 8) соединениями, даже если в тесте указано иное?Я согласен не полностью доверять эталонному тесту, но даже в качестве ориентира, это полярно противоположные результаты.

Примечание: 1. Приложение и Redis находятся в одном месте, задержка в сети отсутствует, используемая память составляет около 40%.Redis и коэффициент фрагментации составляет около 1,4.Приложение использует Jedis для пула соединений.2. Задержка не включает накладные расходы при пропадании Redis, учитывается только двусторонняя передача Redis.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...