Dato un carico di lavoro con molte operazioni intensive CPU / IO di lunga durata (ad es. produzione di file di testo multi-GB da letture di database e regole aziendali), qual è il modo migliore per bilanciare il carico delle applicazioni .net su un gruppo di Windows Server 2012 R2 VM?
Idealmente, l'approccio consentirebbe l'aggiunta / rimozione / patch dei nodi, se necessario. È praticamente un'operazione 24 ore su 24, 7 giorni su 7, con poche opportunità per le finestre di manutenzione.
Sfondo
Siamo in procinto di migrare milioni di righe di codice COBOL da un mainframe IBM a C #. Il carico di lavoro corrente è centrato su lotti e ci sono molti lavori che si attivano a un'ora programmata per eseguire unità di lavoro di varie dimensioni.
Ovunque possibile, cercheremo di rendere i processi convertiti più in tempo reale, guidati dagli eventi, ecc ... Tuttavia, a causa della dipendenza dagli input / output esistenti da / per molti partner upstream e downstream e dal desiderio di passare da una piattaforma all'altra nel minor tempo possibile con interruzioni minime, avremo vincoli che ci impediranno di procedere con un approccio completamente greenfield.
A causa dei grandi volumi di dati in costante cambiamento coinvolti e dell'interconnessione di tali dati con altri sistemi legacy, il passaggio a un'infrastruttura basata su cloud non è probabilmente fattibile.
Approcci che stiamo considerando
Code JMS: disponiamo di un ESB conforme a JMS di classe enterprise e potremmo fare la coda del lavoro, avendo utenti su ogni VM in grado di eseguire il lavoro in base alla disponibilità delle risorse.
Coordinatore delle attività: abbiamo preso in considerazione la creazione di un gestore del carico di lavoro personalizzato in grado di monitorare i server e decidere dove inviare il lavoro. Qualcosa lungo queste linee .