I job server pianificati sono la scelta giusta per un motore di gioco sensibile al fattore tempo?

5

Attualmente sto architettando e progettando una nuova ed entusiasmante applicazione web che entrerà in alcune aree in cui ho poca esperienza nello sviluppo del gioco.

L'applicazione non è necessariamente un gioco, ma ci sono alcune attività molto delicate e lavori programmati che un server dovrà eseguire per svolgere attività correlate al gioco (ad esempio, il nuovo match inizia a mezzogiorno ogni giorno per un torneo di 12 giorni , aggiornando i tabelloni alle 17:00 tutti i giorni, ecc ...)

In passato, in genere, ho usato cron job con il Quartz Scheduler in esecuzione all'interno di un server di applicazioni Web, ma so che questa non è probabilmente una soluzione scalabile per la base di utenti veramente massiva che la gestione mi sta dicendo di aspettarsi sono di gestione e sono probabilmente molto ottimisti su questo) e anche per quanto sia importante il ruolo di questi compiti in questa applicazione web.

L'altra cosa importante che voglio considerare è che voglio evitare SPOF (Single Point Of Failure). Se il server di lavoro primario si arresta, un altro server di lavoro dovrebbe essere in grado di eseguire correttamente il lavoro al suo posto. Suppongo che questo possa essere fatto in modo appropriato per registrare il blocco e le transazioni del database.

La mia domanda è se i lavori programmati come CRON in esecuzione su un server di applicazioni Web sono una scelta di design saggia, date le attività di gioco sensibili al tempo di questa applicazione, o c'è qualcosa di più appropriato per l'esecuzione di un motore di gioco scalabile parallelo ai server di applicazioni web ?

    
posta maple_shaft 09.07.2012 - 13:33
fonte

1 risposta

2

Non so perché stai scartando il quarzo come opzione possibile. Quartz ha una configurazione di distribuzione in cluster che ottiene uno scheduler ridondante cluster-singleton (un nodo del cluster eseguirà il lavoro con determinate garanzie). Usa la tecnica di blocco del db che citi per ottenere il blocco a livello di cluster. Vedi Configurazione del cluster di quarzo .

Ciò che non è chiaro dai requisiti di "carico" è se un singolo nodo nel cluster debba essere responsabile dell'esecuzione dell'attività pianificata (singleton del cluster) o se ogni nodo nel cluster debba eseguire tale attività in un dato momento . Il primo può essere raggiunto con le opzioni di clustering che ho citato. Quest'ultimo è possibile utilizzando istanze Quartz indipendenti su ogni nodo, eseguendo la stessa configurazione e NTP per garantire la sincronizzazione temporale tra i nodi. (Esistono altre opzioni, ad esempio l'invio di un messaggio di attivazione all'argomento cluster).

L'unico punto in cui un quarzo cluster con un archivio SQL non scala bene è quando si desidera pianificare sequenzialmente processi secondari, ma dalla descrizione, non è il caso.

    
risposta data 09.07.2012 - 17:45
fonte

Leggi altre domande sui tag