Достижение ограничений на соединение с помощью функций Azure и Azure SQL (node.js) - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть приложение-функция, которое обслуживает API node.js.Мы достигли предела 900 одновременных подключений с утомительным подключением к Azure SQL и понимаем, что должны добавить пулы подключений (если, конечно, нет лучшей рекомендации).

Функции Azure + Azure SQL + Node.js и пул соединений между запросами? , кажется, отвечает на наши молитвы, но хотел проверить, как вы можете использовать один пул соединений с функциями Azure

Лучше всего ставить "let pool = new ConnectionPool (poolConfig, connectionConfig);"выше mode.exports на все функции?Разве это не создает новый пул каждый раз, когда вызывается отдельная функция?

К сожалению, у Microsoft нет четкой документации по этому вопросу для node.js, поэтому любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 06 декабря 2018

Чтобы все приложение Function совместно использовало один пул, нам нужно поместить часть инициализации в общий модуль.Christiaan Westerbeek опубликовал замечательное решение с использованием mssql , в этом отношении между приложением Function и веб-приложением не так много различий.

Я рекомендую использовать mssql (используйте tedious и generic-pool для внутреннего использования) вместо tedious-connection-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 масштабируется с несколькими экземплярами, новый пул также будет создан для каждого экземпляра..

...