feat(backend): ジョブキュー用Redisを別サーバーに分離できるように
This commit is contained in:
		
							parent
							
								
									ff6d9d2860
								
							
						
					
					
						commit
						239d3f2dbf
					
				
					 7 changed files with 50 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -70,6 +70,14 @@ redis:
 | 
			
		|||
#  #prefix: example-prefix
 | 
			
		||||
#  #db: 1
 | 
			
		||||
 | 
			
		||||
#redisForJobQueue:
 | 
			
		||||
#  host: redis
 | 
			
		||||
#  port: 6379
 | 
			
		||||
#  #family: 0  # 0=Both, 4=IPv4, 6=IPv6
 | 
			
		||||
#  #pass: example-pass
 | 
			
		||||
#  #prefix: example-prefix
 | 
			
		||||
#  #db: 1
 | 
			
		||||
 | 
			
		||||
#   ┌─────────────────────────────┐
 | 
			
		||||
#───┘ Elasticsearch configuration └─────────────────────────────
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -70,6 +70,14 @@ redis:
 | 
			
		|||
#  #prefix: example-prefix
 | 
			
		||||
#  #db: 1
 | 
			
		||||
 | 
			
		||||
#redisForJobQueue:
 | 
			
		||||
#  host: localhost
 | 
			
		||||
#  port: 6379
 | 
			
		||||
#  #family: 0  # 0=Both, 4=IPv4, 6=IPv6
 | 
			
		||||
#  #pass: example-pass
 | 
			
		||||
#  #prefix: example-prefix
 | 
			
		||||
#  #db: 1
 | 
			
		||||
 | 
			
		||||
#   ┌─────────────────────────────┐
 | 
			
		||||
#───┘ Elasticsearch configuration └─────────────────────────────
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -70,6 +70,14 @@ redis:
 | 
			
		|||
#  #prefix: example-prefix
 | 
			
		||||
#  #db: 1
 | 
			
		||||
 | 
			
		||||
#redisForJobQueue:
 | 
			
		||||
#  host: redis
 | 
			
		||||
#  port: 6379
 | 
			
		||||
#  #family: 0  # 0=Both, 4=IPv4, 6=IPv6
 | 
			
		||||
#  #pass: example-pass
 | 
			
		||||
#  #prefix: example-prefix
 | 
			
		||||
#  #db: 1
 | 
			
		||||
 | 
			
		||||
#   ┌─────────────────────────────┐
 | 
			
		||||
#───┘ Elasticsearch configuration └─────────────────────────────
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,6 +36,7 @@
 | 
			
		|||
 | 
			
		||||
### Server
 | 
			
		||||
- イベント用Redisを別サーバーに分離できるように
 | 
			
		||||
- ジョブキュー用Redisを別サーバーに分離できるように
 | 
			
		||||
- サーバーの全体的なパフォーマンスを向上
 | 
			
		||||
- ノート作成時のパフォーマンスを向上
 | 
			
		||||
- アンテナのタイムライン取得時のパフォーマンスを向上
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -91,6 +91,14 @@ redis:
 | 
			
		|||
#  #prefix: example-prefix
 | 
			
		||||
#  #db: 1
 | 
			
		||||
 | 
			
		||||
#redisForJobQueue:
 | 
			
		||||
#  host: localhost
 | 
			
		||||
#  port: 6379
 | 
			
		||||
#  #family: 0  # 0=Both, 4=IPv4, 6=IPv6
 | 
			
		||||
#  #pass: example-pass
 | 
			
		||||
#  #prefix: example-prefix
 | 
			
		||||
#  #db: 1
 | 
			
		||||
 | 
			
		||||
#   ┌─────────────────────────────┐
 | 
			
		||||
#───┘ Elasticsearch configuration └─────────────────────────────
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,6 +41,14 @@ export type Source = {
 | 
			
		|||
		db?: number;
 | 
			
		||||
		prefix?: string;
 | 
			
		||||
	};
 | 
			
		||||
	redisForJobQueue?: {
 | 
			
		||||
		host: string;
 | 
			
		||||
		port: number;
 | 
			
		||||
		family?: number;
 | 
			
		||||
		pass: string;
 | 
			
		||||
		db?: number;
 | 
			
		||||
		prefix?: string;
 | 
			
		||||
	};
 | 
			
		||||
	elasticsearch: {
 | 
			
		||||
		host: string;
 | 
			
		||||
		port: number;
 | 
			
		||||
| 
						 | 
				
			
			@ -99,6 +107,8 @@ export type Mixin = {
 | 
			
		|||
	mediaProxy: string;
 | 
			
		||||
	externalMediaProxyEnabled: boolean;
 | 
			
		||||
	videoThumbnailGenerator: string | null;
 | 
			
		||||
	redisForPubsub: NonNullable<Source['redisForPubsub']>;
 | 
			
		||||
	redisForJobQueue: NonNullable<Source['redisForJobQueue']>;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export type Config = Source & Mixin;
 | 
			
		||||
| 
						 | 
				
			
			@ -160,6 +170,7 @@ export function loadConfig() {
 | 
			
		|||
 | 
			
		||||
	if (!config.redis.prefix) config.redis.prefix = mixin.host;
 | 
			
		||||
	if (config.redisForPubsub == null) config.redisForPubsub = config.redis;
 | 
			
		||||
	if (config.redisForJobQueue == null) config.redisForJobQueue = config.redis;
 | 
			
		||||
 | 
			
		||||
	return Object.assign(config, mixin);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,13 +8,13 @@ import type { DeliverJobData, InboxJobData, DbJobData, ObjectStorageJobData, End
 | 
			
		|||
function q<T>(config: Config, name: string, limitPerSec = -1) {
 | 
			
		||||
	return new Bull<T>(name, {
 | 
			
		||||
		redis: {
 | 
			
		||||
			port: config.redis.port,
 | 
			
		||||
			host: config.redis.host,
 | 
			
		||||
			family: config.redis.family == null ? 0 : config.redis.family,
 | 
			
		||||
			password: config.redis.pass,
 | 
			
		||||
			db: config.redis.db ?? 0,
 | 
			
		||||
			port: config.redisForJobQueue.port,
 | 
			
		||||
			host: config.redisForJobQueue.host,
 | 
			
		||||
			family: config.redisForJobQueue.family == null ? 0 : config.redisForJobQueue.family,
 | 
			
		||||
			password: config.redisForJobQueue.pass,
 | 
			
		||||
			db: config.redisForJobQueue.db ?? 0,
 | 
			
		||||
		},
 | 
			
		||||
		prefix: config.redis.prefix ? `${config.redis.prefix}:queue` : 'queue',
 | 
			
		||||
		prefix: config.redisForJobQueue.prefix ? `${config.redisForJobQueue.prefix}:queue` : 'queue',
 | 
			
		||||
		limiter: limitPerSec > 0 ? {
 | 
			
		||||
			max: limitPerSec,
 | 
			
		||||
			duration: 1000,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue