У меня есть автономный экземпляр 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.