我基本上试图解耦主设备和从设备之间的连接数,以便最大化可用连接的数量并在我的只读副本中加载。我目前正在为Heroku托管的应用程序(40个dynos)快速轻松地进行优化,当应用程序达到峰值时,该应用程序目前处于连接限制状态。
我尝试使用pgbouncer-stunnel优化请求吞吐量的尝试都失败了,我想知道Sequelize汇集是否与pgbouncer的游戏池打得不好。我没有尝试的一件事就是设置pool: false
(我在Sequelize版本3上)。当然,我需要进行其他优化,但增加只读连接的数量可以减轻此应用程序遇到的最大量。
我们如何实例化postgres的示例Sequelize postgres连接如下:
let seqOptions: Sequelize.Options = {
dialect: 'postgres',
logging: function (sql: string) {
if (pgConfig.logging) {
helpers.logDebug('sequelize ' + sql);
}
},
pool: {
maxConnections: pgConfig.maxConnections,
minConnections: pgConfig.minConnections,
},
define: {
timestamps: false // true by default
},
timezone: config.timezone
};
if (config.pg.useSSLDBConnection) {
seqOptions.dialectOptions = {
ssl: config.pg.useSSLDBConnection,
timeout: 10,
returning: true
};
};
if (config.pg.useReadReplication && !config.pg.separateReadWrite) {
let masterUrl = url.parse(config.pgWrite.url);
let username = masterUrl.auth.split(':')[0];
let password = masterUrl.auth.split(':')[1];
let databaseName = masterUrl.path.split('/').pop();
seqOptions.replication = {
write: {
host: masterUrl.hostname,
port: masterUrl.port,
database: databaseName
},
read: _.map(config.pgReadReplicas, (readUrl) => {
let _readUrl = url.parse(readUrl);
let databaseName = _readUrl.path.split('/').pop();
return ({
host: _readUrl.hostname,
port: _readUrl.port,
database: databaseName
});
})
};
let connection = new Sequelize(null, username, password, seqOptions);
return new SQLContext(connection);