Проблема производительности 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, в будущем, если мне понадобится еще одна реплика, мне потребуется другой пул соединений, чтобы указать на эту новую реплику, и тогда потребуются изменения кода. Кажется, не очень хорошее решение.

Не могли бы вы предложить какой-либо другой подход, который улучшает производительность моего приложения при получении значений из кэша?

Спасибо хари

0 ответов

Другие вопросы по тегам