Better distribute db connection pool amongst workers
This commit is contained in:
@@ -1,12 +1,13 @@
|
||||
import { CreateTableBuilder, Kysely, PostgresDialect, sql } from 'kysely';
|
||||
import { type DB } from "./out/db";
|
||||
import { Pool } from "pg";
|
||||
import { env } from '../util';
|
||||
import { env, WORKER_COUNT } from '../util';
|
||||
|
||||
export const db = new Kysely<DB>({
|
||||
dialect: new PostgresDialect({
|
||||
pool: new Pool({
|
||||
connectionString: env.DATABASE_URL,
|
||||
max: Math.max(1, Math.floor(+env.DATABASE_POOL_MAX / WORKER_COUNT))
|
||||
}),
|
||||
})
|
||||
});
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
import cluster from 'node:cluster'
|
||||
import os from 'node:os'
|
||||
import { env, log } from "./util";
|
||||
import { log, WORKER_COUNT } from "./util";
|
||||
|
||||
if (cluster.isPrimary) {
|
||||
const n = Math.min(os.availableParallelism(), +env.MAX_WORKER_PROCESSES);
|
||||
log.info(`Starting ${n} worker processes`)
|
||||
for (let i = 0; i < n; i++)
|
||||
log.info(`Starting ${WORKER_COUNT} worker processes`)
|
||||
for (let i = 0; i < WORKER_COUNT; i++)
|
||||
cluster.fork()
|
||||
} else {
|
||||
await import('./server')
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import cluster from 'node:cluster';
|
||||
import { createHash } from 'node:crypto';
|
||||
import { pino } from 'pino';
|
||||
import os from 'node:os'
|
||||
|
||||
export const log = pino({
|
||||
level: Bun.env.LOG_LEVEL ?? "info",
|
||||
@@ -21,11 +22,13 @@ export const env = {
|
||||
AUTH_SECRET: requireEnv("AUTH_SECRET"),
|
||||
ADMIN_PASSWORD: requireEnv("ADMIN_PASSWORD"),
|
||||
DATABASE_URL: requireEnv("DATABASE_URL"),
|
||||
MAX_WORKER_PROCESSES: requireEnv("MAX_WORKER_PROCESSES"),
|
||||
DATABASE_POOL_MAX: requireEnv("DATABASE_POOL_MAX"),
|
||||
MAX_WORKER_COUNT: requireEnv("MAX_WORKER_COUNT"),
|
||||
NODE_ENV: optionEnv("NODE_ENV", "development"),
|
||||
LOG_LEVEL: optionEnv("LOG_LEVEL", "info"),
|
||||
};
|
||||
|
||||
export const WORKER_COUNT = Math.min(os.availableParallelism(), +env.MAX_WORKER_COUNT);
|
||||
export const DEFAULT_NAME = "Default";
|
||||
|
||||
function requireEnv(key: string): string {
|
||||
|
||||
Reference in New Issue
Block a user