В чем разница между одновременным входом в систему и параллельным сеансом?

#java #sql-server #azure #spring-data #hikaricp

#java #sql-сервер #azure #spring-данные #hikaricp

Вопрос:

Справочная информация

Работа над приложением Spring с пулом соединений Hikari, которое подключается к критически важному для бизнеса экземпляру Azure SQL Server.

Ограничения на стороне Azure экземпляра DB являются:

  1. 200 рабочих
  2. 200 логинов
  3. 30 тыс. сеансов

У нас есть 3 сервера приложений, развернутых с помощью Hikari CP.

Насколько я знаю:

  1. Пул соединений Hikari приложения открывает новые TCP-соединения по мере их необходимости и объединяет их для spring data / hibernate / etc.
  2. SqlConnection из POV приложения использует Connectionstring для создания TCP-соединения с сервером, через который передаются данные протокола (вкл. будут переданы аутентификация) и sql-запросы
  3. В соответствии с ограничениями, перечисленными выше, количество TCP-соединений не ограничено
  4. В моем понимании workers — это процессы / потоки, которые фактически выполняют SQL-запросы к базе данных и извлекают результаты.
  5. Один запрос / оператор может использовать несколько рабочих, если его можно распараллелить
  6. (хотя не нашел документацию) Легко видеть, что логины ограничены рабочими, потому что тот, кто входит в систему и хочет взаимодействовать с БД, будет нуждаться в работнике, который выполняет инструкции, предоставляемые контекстом безопасности вошедшего в систему пользователя
  7. В соответствии с этим: «Сеансы относятся к количеству одновременных подключений, разрешенных к базе данных SQL одновременно. Workers можно рассматривать как процессы в базе данных SQL, которые обрабатывают запросы. Максимальное количество разрешенных сеансов и рабочих зависит от уровня обслуживания ваших баз данных.»

Вопросы

  1. Могут ли приложения Spring создавать в общей сложности ~ 30 тыс. подключений или ~ 200 подключений (при условии, что ни одно другое приложение не подключается к базе данных) с тем же именем пользователя и паролем?
  2. Как следует интерпретировать Azure SQL Login / Azure SQL Session в этом контексте?

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

Ответ №1:

Ваше понимание работников правильное.

Логины — это пользователи, активно аутентифицирующиеся на сервере. С этой проблемой довольно редко можно столкнуться, но это может произойти, если ваша архитектура включает в себя множество действий типа отключения / повторного подключения. Имя пользователя / пароль в этом контексте не имеет значения. Вы просто не хотите пытаться запускать 200 экземпляров вашего приложения одновременно.

Хотя ограничение на вход в систему встречается довольно редко, вам нужно следить за ограничением сеанса. Каждое соединение, которое Hikari создает в пуле, считается сеансом на стороне SQL Azure. При этом, имея всего 3 сервера, вы могли бы открыть 10 тысяч подключений в каждом пуле и все было бы в порядке. Вероятно, это не проблема для вас прямо сейчас, если вы не сделаете что-то, что мешает Hikari правильно закрывать соединения, когда это необходимо. Я не слишком знаком с Hikari, поэтому я не могу привести вам конкретный пример того, что могло бы вызвать это.

Комментарии:

1. Как SQL Server различает 2 соединения JDBC, исходящие из HikariCP, исходящие из одного приложения, и 2 соединения JDBC, исходящие из HikariCP, исходящие из двух разных приложений. Я не нашел никакой документации, в которой это четко указано. Не могли бы вы указать на документацию, где описывается процесс входа в систему с его ограничениями? И как SQL Server обрабатывает их, потому что это все еще немного расплывчато даже после прочтения упомянутого сообщения на форуме.

2. Проще говоря: И что касается одновременных сеансов / рабочих, вот как это работает. Допустим, у вас есть 10 разработчиков, работающих над вашим приложением, и все они подключаются к Azure SQL с помощью SSMS. Они создадут 10 одновременных входов в систему / рабочих и 10 сеансов в Azure SQL. Теперь предположим, что ваше приложение использует один логин для подключения к Azure SQL, и у вас есть 100 одновременных пользователей в вашем приложении. Это создаст один одновременный вход / рабочий процесс и 100 одновременных сеансов в Azure SQL.

3. Что касается конкретных документов: baeldung.com/spring-boot-hikari и learn.microsoft.com/en-us/sql/connect/jdbc /… хорошее начало. Руководство по программированию для драйвера JDBC SQL: learn.microsoft.com/en-us/sql/connect/jdbc /…