Достижение ограничений на соединение с помощью функций Azure и Azure SQL (node.js)
У меня есть приложение-функция, которое обслуживает API node.js. Мы достигли предела 900 одновременных подключений с утомительным подключением к Azure SQL и понимаем, что должны добавить пулы подключений (если, конечно, нет лучшей рекомендации).
Функции Azure + Azure SQL + Node.js и пул соединений между запросами? кажется, отвечает на наши молитвы, но хотел проверить, как вы можете использовать один пул соединений с функциями Azure
Лучше всего ставить "let pool = new ConnectionPool(poolConfig, connectionConfig);" выше mode.exports на все функции? Разве это не создает новый пул каждый раз, когда вызывается отдельная функция?
К сожалению, у Microsoft нет четкой документации по этому вопросу для node.js, поэтому любая помощь будет принята с благодарностью!
1 ответ
Чтобы все приложение Function делило один пул, нам нужно поместить часть инициализации в общий модуль. Кристиан Вестербик ( Christiaan Westerbeek) опубликовал замечательное решение с использованием mssql, в этом отношении между приложением Function и веб-приложением не так много различий.
Я рекомендую использовать mssql
(использование tedious
а также generic-pool
внутренне) вместо пула утомительного соединения, который, кажется, не обновлялся в течение 2 лет.
Введите код подключения в poolConfig.js
под SharedLib
папка.
const sql = require('mssql');
const config = {
pool:{
max:50 // default: 10
},
user: '',
password: '',
server: '',
database: '',
options: {
encrypt: true // For Azure Sql
}
};
const poolPromise = new sql.ConnectionPool(config).connect().then(pool => {
console.log('Connected to MSSQL');
return pool;
})
.catch(err => console.log('Database Connection Failed! Bad Config: ', err));
module.exports = {
sql, poolPromise
}
И загрузить модуль для подключения к SQL. Мы используем await для получения ConnectionPool, функция должна быть асинхронной (по умолчанию для функции v2 js).
const { poolPromise } = require('../SharedLib/poolConfig');
module.exports = async function (context, req) {
var pool = await poolPromise;
var result = await pool.request().query("");
...
}
Обратите внимание, что если приложение Function масштабируется с несколькими экземплярами, новый пул также будет создан для каждого экземпляра.