Задержка при получении пула соединений

Вопрос или проблема

У меня есть приложение на Java Spring Boot, работающее на AWS EKS (Dockerized OS: ALPINE 3.14). У меня гибридная облачная архитектура, где моя база данных находится на месте.

Каждый раз, когда я делаю API-запрос, в начале я сталкиваюсь с задержкой в 25 секунд для получения пула соединений. Когда я держу свое приложение на месте, я не испытываю никаких задержек.

2024-08-06 09:40:19.716 DEBUG 1 --- [nio-9013-exec-6] o.apache.coyote.http11.Http11Processor   : Сокет: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@2d53393c:org.apache.tomcat.util.net.NioChannel@36787f9c:java.nio.channels.SocketChannel[connected local=orderservice-deployment-784cc9d757-ncrvp/10.xx.xx.xx:xxxx remote=/10.xx.xx.xx:xxxx]], Статус в: [OPEN_READ], Состояние выход: [CLOSED]
2024-08-06 09:40:19.716 DEBUG 1 --- [nio-9013-exec-6] o.apache.tomcat.util.threads.LimitLatch  : Уменьшение [http-nio-9013-exec-6] latch=2
2024-08-06 09:40:19.716 DEBUG 1 --- [nio-9013-exec-6] org.apache.tomcat.util.net.NioEndpoint   : Закрытие [org.apache.tomcat.util.net.NioEndpoint@2763c145].closeSocket([org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@2d53393c:org.apache.tomcat.util.net.NioChannel@36787f9c:java.nio.channels.SocketChannel[connected local=orderservice-deployment-784cc9d757-ncrvp/10.xx.xx.xx:xxxx remote=/10.xx.xx.xx:xxxx]])
2024-08-06 09:40:20.654 DEBUG 1 --- [13-ClientPoller] org.apache.tomcat.util.net.NioEndpoint   : время ожидания завершено: обработано ключей=1; сейчас=1722937220654; следующаяExpiration=1722937219753; количество ключей=0; событий нет=false; eval=false
2024-08-06 09:40:21.520 DEBUG 1 --- [nio-9013-exec-3] c.t.d.s.OracleDbConnector                : время, потраченное на получение пула соединений :: 25012
2024-08-06 09:40:21.520 DEBUG 1 --- [nio-9013-exec-3] c.t.d.s.OracleDbConnector                : SQL-запрос для выполнения :: select u.um_user_id,e.em_controller_id,e.xxxxx from user_master where u.um_em_entity_id=e.em_entity_id and e.em_entity_id='xxxx'
2024-08-06 09:40:21.526 DEBUG 1 --- [nio-9013-exec-3] c.t.d.s.OracleDbConnector                : время, потраченное на выполнение запроса :: 6
2024-08-06 09:40:21.526 DEBUG 1 --- [nio-9013-exec-3] DbConnectorLogging                       : ИНТЕРАКТИВНЫЙ::
2024-08-06 09:40:21.526 DEBUG 1 --- [nio-9013-exec-3] DbConnectorLogging                       : ИНТЕРАКТИВНЫЙ::
2024-08-06 09:40:21.526 DEBUG 1 --- [nio-9013-exec-3] DbConnectorLogging                       : ИНТЕРАКТИВНЫЙ::
2024-08-06 09:40:21.526 DEBUG 1 --- [nio-9013-exec-3] DbConnectorLogging                       : ИНТЕРАКТИВНЫЙ::
2024-08-06 09:40:21.526 DEBUG 1 --- [nio-9013-exec-3] DbConnectorLogging                       : ИНТЕРАКТИВНЫЙ::
2024-08-06 09:40:21.526 DEBUG 1 --- [nio-9013-exec-3] DbConnectorLogging                       : ИНТЕРАКТИВНЫЙ::
2024-08-06 09:40:21.526  INFO 1 --- [nio-9013-exec-3] c.t.s.o.service.OrderProcessServiceImpl  : детали сущности ::{controllerId=, userIdOrLogPktId=, custodianId=} lzi8bkzr-55vkrk5i2xk_6051288

Конфигурация Spring Boot

spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.connection-timeout=800000
spring.datasource.hikari.idle-timeout=800000
spring.datasource.hikari.max-lifetime=1200000
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.minimum-idle=15

Когда я переместил свое приложение на место, я не столкнулся с задержками, приложение работало очень плавно, я даже пытался запустить JAVA-приложение без EKS, но оно также терпело неудачу с той же задержкой.

Ответ или решение

Проблема задержки при получении пула соединений для вашего Java Spring Boot приложения на AWS EKS может быть связана с несколькими факторами, включая сетевые задержки при доступе к вашему базу данных, находящемуся в локальной сети, неправильную конфигурацию пула соединений, а также возможные ограничения по сетевым ресурсам.

Возможные причины и решения:

  1. Сетевые задержки:

    • Поскольку ваша база данных находится в локальной сети, а приложение работает в облаке, необходимо убедиться, что между AWS EKS и вашим локальным дата-центром настроено надежное соединение. Используйте VPN или AWS Direct Connect для снижения задержек. Также проводите тесты подключений (ping, traceroute) для анализа времени простоя и возможных узких мест в сети.
  2. Конфигурация пула соединений:

    • Убедитесь, что настройки пула соединений (HikariCP) оптимальны для ваших потребностей.
      • Параметры maximum-pool-size и minimum-idle должны соответствовать ожидаемому количеству параллельных соединений.
      • Попробуйте уменьшить значение connection-timeout, чтобы быстрее выявлять проблемы с соединениями.
      • Проверьте, не блокируются ли соединения на уровне базы данных, и увеличьте значение idle-timeout, если приложение ожидает восстановления соединений по мере необходимости.
  3. Проблемы на уровне JDBC-драйвера:

    • Убедитесь, что вы используете последнюю стабильную версию JDBC-драйвера для вашей базы данных. Обновления могут содержать исправления, которые снизят задержку при инциализации соединений.
  4. Настройки базы данных:

    • Проверьте параметры вашего сервера базы данных. Возможно, они также требуют оптимизации для удаленных соединений, таких как увеличение максимального количества соединений или улучшение конфигурации сети.
  5. Мониторинг и диагностика:

    • Используйте инструменты мониторинга (например, AWS CloudWatch или локальные инструменты мониторинга) для отслеживания производительности вашего приложения и базы данных. Обратите внимание на массовые задержки, время отклика и состояние соединений.

Рекомендации:

  • Запустите ваши API тесты с использованием инструмента нагрузочного тестирования для оценки времени отклика в разных условиях нагрузки.
  • Проведите профилирование приложения, чтобы выявить потенциальные узкие места, которые могут влиять на время ответа.
  • Рассмотрите возможность кэширования данных, чтобы уменьшить количество обращений к базе данных.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...