Я работаю над мультитенантным приложением, ориентированным на микро сервисы, используя Spring MVC, Spring Boot и PostgreSQL. В моем сервисном домене у меня 30 различных проектов Spring Boot, соединяющихся с одной и той же базой данных.
Проблема
Когда я запускаю более 11 параллельных проектов Spring Boot, Я не могу получить данные из базы данных. Я только получаю пустой JSON ответ. Но если я запускаю менее 11 проектов, тогда я могу получить результат микросервиса. Проблемы с получением, когда я начинаю с 12-й службы.
Устранение неполадок и мое расследование
Согласно чтению, я внес небольшие изменения следующим образом:
Я установил PostgreSQL конфигурационный файл, max_connections = 100
и shared_buffers = 128MB
.
Но это не решило мою проблему. А также добавил дополнительные строки в мой application.property
для hikari
пула соединений, как показано ниже,
spring.datasource.hikari.minimumIdle=3
spring.datasource.hikari.maximum-pool-size=3
Даже это также не решает мою проблему. Тем не менее, я могу запустить не более 12 проектов Spring Boot за один раз.
На пом. xml добавлено следующее,
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>9.0.10</version>
</dependency>
application.property обновлен следующим образом:
spring.datasource.tomcat.initial-size=15
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=20
spring.datasource.tomcat.max-idle=20
spring.datasource.tomcat.min-idle=5
spring.datasource.tomcat.default-auto-commit=true
Обновления
Как я уже упоминал выше, в общей сложности у меня 100 макс. Когда я запускаю первый микросервис и отслеживаю соединение с БД с помощью запроса (ниже запроса), я получаю 10 соединений.
select max_conn,used,res_for_super,max_conn-used-res_for_super res_for_normal
from
(select count(*) used from pg_stat_activity) t1,
(select setting::int res_for_super from pg_settings where
name=$$superuser_reserved_connections$$) t2,
(select setting::int max_conn from pg_settings where
name=$$max_connections$$) t3
Снимок экрана активности - Когда я запускаю только 1 микросервис, я получаю вот так,
Скриншот активности 2:
Итак, здесь для каждого микро запуск службы, 10 подключений к базе данных инициируются на уровне внутренней базы данных. Поэтому, если я запускаю более 30 микросервисных приложений, оно будет go подключаться к более чем 300.
Путаница
- Это из-за какой-либо базы данных настройки по умолчанию?
- Или это из-за проблемы Tomcat при подключении к ядру БД?
Даже я пытался использовать инструмент пула соединений pgbouncer
в моем узле базы данных. Кроме того, у меня возникают те же проблемы.
Если это связано с настройками или конфигурацией базы данных по умолчанию, как я могу это переопределить?