Dalle informazioni fornite, è difficile dare una risposta adeguata. Quindi ho potuto fornire solo alcuni pensieri:
The web app should have 100% up time
Questo è piuttosto difficile da raggiungere. Anche in uno scenario locale a una sola macchina.
Devi combattere interruzioni di corrente, guasti hardware ecc. E non appena la rete è coinvolta hai più parti in errore, per non parlare di Internet e connessioni instabili.
Per inserire alcuni numeri:
- disponibilità del 99,999% significa 0,87 secondi al giorno non disponibili
- disponibilità del 99,99% significa 8,64 secondi al giorno non disponibile
Tratto da Libro SRE di Google
Quindi, anche se potresti garantire una disponibilità del 99,99% per la tua parte, la domanda è, indipendentemente dal fatto che la rete utilizzata dal cliente sia quella disponibile.
Per ridurre i problemi di rete, è necessario un qualche tipo di accesso di rete ridondante per ogni cliente.
A web based solution is good because no user installations are needed
È vero, ma ha il costo di hard (er) per raggiungere la disponibilità.
Some of the data fetched from central database are read-only and are shared between clients
Dì che fai un'installazione on-premise:
- come facevi gli aggiornamenti?
- in che modo gli aggiornamenti influiscono sul tuo obiettivo di disponibilità?
- come gestire le diverse velocità di aggiornamento in termini di coerenza? Il cliente
A
ha una versione aggiornata del tuo database, mentre il cliente B
non ha, dal momento che lei / lui sta ancora aggiornando?
Quindi, anche se si sceglie una strategia on-premise con alcuni "aggiornamenti intelligenti", è necessario riflettere sul problema della coerenza.
Clients maybe store their billing or anything else to a central database
Questo è un altro argomento interessante. Anche se gestisci la parte di lettura con un'installazione on-premise dei tuoi dati, il problema di rete per scrive rimane lo stesso: connessioni inaffidabili.
Quali sono i criteri per cui le scritture devono essere accessibili da altri?
Se non altro che il cliente stesso ha bisogno di un accesso "immediato", è possibile rinviare la parte di aggiornamento.
How can we handle hybrid online and offline mode when the Internet connection is lost?
Riguardo alla "parte letta":
Effettua un'installazione del DB in locale. Questa è l'unica possibilità di escludere problemi di rete. Gli aggiornamenti saranno a senso unico e semplice: non appena la rete sarà disponibile, gli aggiornamenti verranno spinti. Problema: consistenza finale.
Riguardo alla "parte di scrittura":
Le operazioni di scrittura possono essere accodate e consegnate quando la rete è disponibile.
Quando nessun altro cliente dipende, non hai problemi. Ma quando gli altri dipendono dai dati pubblicati, hai di nuovo il problema della coerenza finale.
Is there any known method?
Sì e no.
Sono disponibili diversi modelli, ma nessuna misura adatta a tutte le soluzioni.
Per dare un buon consiglio, lo scenario concreto deve essere conosciuto e i compromessi che tu o il tuo cliente siete disposti ad accettare.
Should we sync updates of database into local customer computer and work with that?
Come sopra scritto: sembra la soluzione migliore finora.
Uno scenario che potrei pensare sarebbe quello di utilizzare un tablet come piattaforma di destinazione. Questi sono dispositivi economici, quindi i tuoi clienti potrebbero permettersene più di uno (acquistando o affittando). Più di un dispositivo aumenta la ridondanza nel caso in cui un dispositivo non funzioni. I dispositivi possono essere collegati tramite WiFi e ridondanti 3 / 4G per ridurre la probabilità di problemi di rete.
Forse avrebbe senso dal punto di vista della sicurezza, che blocchi i dispositivi sul tuo dispositivo, per evitare che il malware accidentalmente installato acceda ai tuoi dati.