Проблема производительности AWS Elastic Cache (Redis)
Я использую Spring boot для одного из моих микро сервисов. Он использует пружинные библиотеки данных для доступа к AWS эластичному кешу (redis).
Мой микро сервис - Spring boot - Spring data libs - Jedis Connection.
Redis настроен в некластерном режиме и состоит из двух узлов, один из которых является основным, а другой - репликой для чтения. Моя служба работает на экземпляре EC2. Эта служба и узлы AWS Elastic-Cache (r4.large) находятся в одном и том же VPC.
Поскольку существует два узла кэша Redis (основной и реплика), в AWS доступны две конечные точки. Моя служба всегда подключается к основному узлу.
Вопрос 1: Поскольку моя служба всегда подключается к первичному узлу, я вижу, что некоторые подключения также выполняются к экземпляру реплики. Как это случилось? Я использую один пул для соединений Redis, эти точки указывают только на Первичную конечную точку. Я заметил, что 6/10 подключений выполняется к первичному узлу, а 4/10 - к экземпляру реплики. Но мой сервис вообще не общается с репликой.
Вопрос 2: Я вижу, что при попытке получить значения из redis происходит задержка производительности (в худшем случае ~800 миллисекунд). Я много искал для лучших решений. Некоторые предлагают использовать библиотеки Lettuce (опция-1), а некоторые предлагают использовать отдельный пул для чтения-реплики и другой пул для основного узла (опция-2). Если я использую опцию 2, в будущем, если мне понадобится еще одна реплика, мне потребуется другой пул соединений, чтобы указать на эту новую реплику, и тогда потребуются изменения кода. Кажется, не очень хорошее решение.
Не могли бы вы предложить какой-либо другой подход, который улучшает производительность моего приложения при получении значений из кэша?
Спасибо хари