Interruttore a due passaggi
Una possibilità è usare l'interruttore a due fasi.
Immagina di dover eseguire un'attività di manutenzione durante la quale gli utenti non dovrebbero poter accedere al database.
Passaggio 1
Si inizia cambiando un flag in un database. Questo flag non è un flag della modalità di manutenzione, ma indica che i client non devono più utilizzare il database poiché sarà presto messo in modalità di manutenzione.
Il valore di questo flag può essere memorizzato nella cache per, ad esempio, cinque minuti per evitare ripetuti interrogazioni al database.
Passaggio 2
Cinque minuti più tardi , avvii l'attività di manutenzione effettiva.
Ora sei sicuro che tutti hanno annullato la cache, quindi il client ha già richiesto il flag e sa che il database sta per entrare in modalità di manutenzione, o sarà necessariamente per questo valore prima di eseguire qualsiasi altra query.
Pro
-
Non è necessario interrogare il database troppo spesso per il valore del flag di pre-manutenzione.
-
Non è possibile per il client avviare l'interrogazione del database mentre viene eseguita la manutenzione.
Contro
- È necessario attendere alcuni minuti (cinque nel mio esempio) prima di eseguire l'operazione di manutenzione. Questo è OK se si tratta di un'attività pianificata o qualcosa che può essere pianificata, ma sarebbe un problema per le attività di manutenzione che dovrebbero essere eseguite il prima possibile, come le modifiche alla configurazione relative a un problema di sicurezza appena scoperto o le misure utilizzate per prevenire un attacco in corso.
Connessione a due vie
Se è necessario essere in grado di eseguire rapidamente le attività di manutenzione senza pianificazione aggiuntiva (vedere Cons sopra), potrebbe essere necessario implementare una connessione a due vie che consente a te, il fornitore di servizi, di inviare un messaggio a i tuoi clienti, notificandoli che il servizio passerà alla modalità di manutenzione.
Sebbene questo tipo di comunicazione diventi sempre più popolare per le applicazioni web con il supporto di Web socket da parte di tutti i principali browser, se capisco bene, hai a che fare con le applicazioni desktop. Se l'ecosistema Java non ha una tecnologia simile per le app desktop (sono abbastanza sicuro che lo faccia) o se per qualche motivo non puoi usarlo, potresti essere interessato alle tecniche legacy utilizzate nelle app web, come ad esempio sondaggio lungo . Puoi leggere queste tecniche nella pagina Cometa , in particolare in che modo influiscono sulla larghezza di banda e quali effetti collaterali hanno.
Pro
- È possibile eseguire l'attività di manutenzione quasi immediatamente pur sapendo che i clienti sono informati del passaggio alla modalità di manutenzione.
Contro
- Queste tecniche potrebbero essere difficili da implementare correttamente (ad esempio, come gestiresti il caso in cui hai inviato un messaggio a un client, ma il client non ha risposto né ha abbandonato la connessione?)