Abbiamo un buco nella nostra architettura, ma non è immediatamente evidente che c'è un pezzo di software esistente per riempirlo. Potrebbe esserci una ragione, o potrebbe non esserci, quindi lasciami spiegare il problema.
Abbiamo lavori che richiedono un'esecuzione in modo asincrono. Alcuni lavori potrebbero richiedere tutti i core del sistema per diverse ore e molti gigabyte di memoria. Altri lavori possono richiedere memoria marginale, un singolo thread e diversi millisecondi da eseguire e scadenze ridotte per il completamento, misurati in secondi a una sola cifra. E ci sono molti lavori in mezzo, che richiedono 1.100 minuti usando tutti i core disponibili.
Desideriamo inviare i lavori con una stima approssimativa delle risorse richieste per eseguirli, insieme a una sorta di priorità o scadenza. E vorremmo che le macchine 1..n prendessero lavoro da questa coda e le eseguissero. Ma, ovviamente, se una macchina non è abbastanza grande per eseguire un lavoro, non dovrebbe accettare il lavoro; se attualmente sta eseguendo un lavoro che occupa metà della memoria disponibile, dovrebbe accettare solo lavori che si adattano allo spazio rimanente; ecc. Questo è un problema di pianificazione / imballaggio / vincolo di vincoli che deve essere risolto ogni volta che la coda del lavoro cambia.
Da molte ricerche, non sembrano esserci sistemi di accodamento dei messaggi open source con la pianificazione dei lavori basata sui vincoli. Non possiamo essere le uniche persone che hanno un problema come questo, e mi chiedo cosa facciano gli altri per risolverlo.
Si noti che non è possibile semplicemente aggiungere molte macchine che eseguono client di coda di lavoro e fare affidamento sulla capacità in eccesso per risolvere il problema. Vendiamo software come servizio al settore finanziario e uno dei requisiti di sicurezza è che i loro dati sono limitati a macchine (virtuali) dedicate, con subnet separate e comunicazioni incrociate vietate. Se assegniamo troppe macchine worker alla rete di un cliente, i nostri profitti sono direttamente influenzati dai maggiori costi di noleggio dell'hardware, dai costi delle licenze delle macchine virtuali, dalla complessità di gestione aggiuntiva, ecc.