Ho questo progetto Java chiamato Server . Server è essenzialmente un'applicazione a thread singolo che ascolta gli eventi da applicazioni esterne. Questi eventi sono cruciali e quello che manca è un grosso problema.
Quello che Server fa è che ascolta gli eventi, fa alcuni calcoli basati sugli eventi ricevuti e memorizza il valore calcolato nel database. Inoltre, alcuni eventi dipendono l'uno dall'altro e ho una singola mappa statica che tiene traccia di tutti gli eventi in arrivo.
Sto gestendo gli eventi di chiamata. Ci sono tre eventi che sto gestendo attualmente:
-
Partecipa agli eventi: due persone in una conversazione
-
Eventi di conversazione: dove una persona A o B sta parlando
-
Lascia eventi: dove una persona lascia la conversazione
Il mio obiettivo è calcolare quanto tempo ogni persona ha parlato per la durata della conversazione.
Quello che faccio adesso è che quando ottengo un evento Join, aggiungo quella conversazione alla mappa. Mentre parlo di eventi, ottengo la conversazione dalla mia mappa e faccio qualche calcolo. Quando qualcuno abbandona la conversazione, rimuovo la conversazione dalla mappa e salvo ciò che ho nel database.
Dato che non posso permettermi di perdere un singolo evento, come posso implementare la ridondanza? Ho pensato al clustering, ma se mai dovessi fare il cluster, allora entrambi i cluster avranno gli stessi eventi in arrivo, portando alla duplicazione dei dati.