Come può un'app Web funzionare correttamente quando la connessione Internet viene persa per alcune ore?

2

Il nostro team desidera progettare un sistema di gestione della farmacia al dettaglio basato sul Web. Una soluzione basata sul Web è buona perché non sono necessarie installazioni da parte dell'utente.

Alcuni dei dati recuperati dal database centrale sono di sola lettura e sono condivisi tra i client (5000 utenti di farmacie) ei clienti possono archiviare la fatturazione o qualsiasi altra cosa in un database centrale.

C'è una sfida. L'app web dovrebbe avere il 100% di up time.

  • Come possiamo gestire la modalità ibrida online e offline quando la connessione Internet viene persa?
  • C'è qualche metodo noto? Dovremmo sincronizzare gli aggiornamenti di database nel computer del cliente locale e lavorare con quello? Le dimensioni del database potrebbero essere troppo grandi, ad esempio 10 GB.
posta user355834 26.04.2018 - 15:36
fonte

5 risposte

3

Se la connessione Internet viene persa, non è la tua applicazione a essere dannosa, è la connessione Internet. Quindi è la connessione internet su cui devi concentrarti. se è fondamentale connettersi a Internet tutto il tempo, questo può essere fatto facilmente avendo due connessioni Internet (ridondanza) in ogni posizione. (dovrebbe provenire da diversi operatori)

in molti casi una farmacia avrebbe anche bisogno di una connessione Internet per essere in grado di gestire l'acquisto con carta di credito, quindi anche la tua applicazione è una "applicazione desktop installata localmente" che potrebbe non essere effettivamente in grado di fare molto con essa senza Internet collegamento.

    
risposta data 29.04.2018 - 21:58
fonte
2

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.

    
risposta data 29.04.2018 - 09:41
fonte
2

Potresti prendere in considerazione Applicazioni web progressive (PWA): link

link

link

UPDATE:

Sia il commento alla mia risposta originale che la prospettiva di tutte le altre risposte mi hanno fatto pensare La domanda ha una risposta plausibile e realistica o è una domanda che dovrebbe essere prima votata?

Ovviamente il team che pone la domanda ha un strong background nello sviluppo di applicazioni desktop, che vengono installate nel computer del client e funzionano offline con i dati locali. Come tutti sappiamo, le cose sono cambiate drasticamente con l'avvento del web.

D'altro canto, tutti noi conosciamo anche l'estensione con cui il web è stato abusato nel corso degli anni per adattarsi alle esigenze ben oltre la sua natura in termini di usabilità e funzionalità. Ci sono stati numerosi tentativi di force applicazioni web imitare applicazioni desktop. Alla fine della giornata, è noi gli sviluppatori che si sforzano di far quadrare i conti usando tutti i tipi di complicati trucchi, hack e soluzioni proprietarie . Tutto ciò porta a software non modificabile e instabile che ignora gli standard Web.

Un sacco di volte, la fonte del problema è cattivo design che deriva da una mancanza di cambio di mentalità per conto dei progettisti. Sono sicuro che siamo tutti d'accordo che è possibile progettare creare un'applicazione di successo per il web con una mentalità applicativa desktop.

Detto questo, la mia risposta onesta al team di progettazione sarebbe quella di rilasciare la "sfida" e ridisegnare con il web nelle loro menti Credo che alla fine la cosiddetta "sfida" si rivelerà non essere affatto una sfida perché è qualcosa che viene loro imposto dal loro background desktop.

    
risposta data 28.04.2018 - 16:07
fonte
1

Non è impossibile per un sito Web continuare a funzionare in assenza di una connessione Internet.

Il tuo javascript sul lato client funzionerà ancora ed è possibile memorizzare i dati localmente per l'elaborazione quando ritorna la connessione.

Tuttavia !! Il problema inerente è che l'applicazione client è in esecuzione in un browser Web con un pulsante grande pagina di aggiornamento, che interromperà definitivamente tutto se viene premuto.

Per qualsiasi livello di funzionalità offline affidabile è necessario un maggiore controllo sul client rispetto a una semplice offerta di pagine web.

Lo svantaggio è che qualsiasi soluzione richiederà qualche forma di installazione.

Mi concentrerei sull'automazione dell'installazione piuttosto che cercare di evitarlo del tutto.

    
risposta data 28.04.2018 - 10:27
fonte
1

Mentre le applicazioni web possono funzionare offline ( W3C ; MDN ), l'obiettivo è più di fornire un servizio agli utenti mobili, piuttosto che ai clienti desktop di un CRM.

Alcune delle limitazioni che incontrerai includono:

  • Le restrizioni di memoria e la volatilità dei dati. Non hai specificato la dimensione dei dati di sola lettura di cui stavi parlando, ma dovresti capire che SQL lato client non sostituisce il database lato server. Non è possibile memorizzare terabyte di dati nel browser e non si può essere sicuri che l'utente non vada e cancellarlo immediatamente un giorno (o manometterlo, a proposito).

  • Sincronizzazione al ritorno online. Questo è il classico problema di un dato che è stato modificato in due posizioni offline: come dovrebbe essere gestito il conflitto?

  • Problemi relativi a browser diversi. Immagina che il tuo utente acceda all'applicazione da un PC, così come da uno smartphone. La connessione di rete del PC si interrompe, ma l'utente continua a utilizzare l'applicazione e genera una fattura. Più tardi, controlla l'elenco delle fatture sul suo smartphone e nota che il conto manca. Ciò non è sorprendente per te come sviluppatore, ma la maggior parte degli utenti non capirà perché la versione online, che dovrebbe essere più aggiornata, non abbia i dati generati su un dispositivo offline.

    Se i dati sono condivisi tra i clienti, le cose potrebbero andare anche peggio. Ad esempio, una persona può generare un'informazione su un dispositivo offline, le informazioni vengono condivise con un altro utente e quindi chiamare l'altro utente per discutere l'informazione solo per scoprire che non può vederla. A meno che tu non stia molto attento con l'interfaccia utente, la colpa in tali situazioni sarà nella tua app "che è rotta".

Se stai facendo questa domanda, suppongo che:

  • O stai ospitando la tua applicazione a casa (in ufficio), dove la connettività Internet non è particolarmente affidabile. In questo caso, dovresti pensare a ospitalo su Amazon AWS o a un provider di hosting simile, in cui puoi essere certo che la tua applicazione sarà online permanentemente.

  • Oppure i tuoi clienti non hanno una connessione affidabile. In questo caso, non c'è molto che tu possa fare; sono i loro problemi, e dovrebbero aspettarsi che il loro business rimanga in piedi (o almeno rallenti) in caso di problemi di rete. Avere una versione ottimizzata per dispositivi mobili della tua applicazione web potrebbe aiutarli a rimanere operativi in caso di problemi di rete, continuando a utilizzare l'app su uno smartphone.

risposta data 28.04.2018 - 14:27
fonte